网站备案表上面的开办单位写什么,郑州网站建设推广渠道,怎么做网站结构图,上海自助建站系统最近由于项目需要#xff0c;在系统缓存服务部分上了redis#xff0c;终于有机会在实际开发中玩一下#xff0c;之前都是自己随便看看写写#xff0c;很零碎也没沉淀下来什么#xff0c;这次算是一个系统学习和实践过程的总结。 和Redis有关的基础知识 Redis是一个开源的分… 最近由于项目需要在系统缓存服务部分上了redis终于有机会在实际开发中玩一下之前都是自己随便看看写写很零碎也没沉淀下来什么这次算是一个系统学习和实践过程的总结。 和Redis有关的基础知识 Redis是一个开源的分布式NoSql数据库可以用来做缓存服务、消息队列、数据存储等等数据类型之丰富效率之高简直逆天没有了解过的可以移步去问度娘~客户端之丰富足可见它的社区有多强大 其中C#的客户端就有这么多 没错我们的项目里也选择了最热门的StackExchange.Redis作为底层服务。 Redis虽然也可以部署在window上但效率会大打折扣所以通常都是部署在linux上跑刚好我在上次部署.net core 项目时创建了一个centos虚拟机可以直接拿来用不会配虚拟机的同学可以点这里。Redis服务部署网上有很多教程在此就略过了。 在这里向大家推荐一款redis图形化操作的客户端Redis Studio比Redis Desktop Manager好用太多谁用谁知道可以查看运行情况、查看数据和类型、查看剩余有效时间、刷新数据、删除数据甚至可以直接在图形界面配置redis再也不用去配置文件里懵逼了。 当然以上操作都可以在redis服务开启后用redis-cli工具实现。 基础操作封装 缓存的基础操作无非就是get、set这些所以统一定义了一个接口 里面用StackExchange.Redis提供的API来实现这些操作代码太多就不贴出来了。其中对redis的连接做了连接池处理连接对象ConnectionMultiplexer封装在一个阻塞队列里面每次读写操作的时候去队列里面取用完再放回在应用启动的时候会初始化这个连接池。 创建连接的时候有两种方式第一种是使用连接字符串的形式把需要的参数写在一个字符串中 第二种是使用ConfigurationOptions对象 其中EndPoints是redis服务器的地址做集群的时候可以写多个。为了搞清楚里面参数的含义从github上clone了一份StackExchange.Redis的源码来看非常清晰。在看源码的过程中发现底层都有记录redis的详细运行情况但都是写在Stream里于是自己基于系统的log4net日志然后根据它的实现重写了一套TextWriter来实现日志持久化用于日后来分析错误 在做泛型操作封装的时候遇到一个问题:我想把一个复杂对象整存整取。第一个想到的办法是序列化但总觉得这样干会拖累redis的性能觉得不爽不想用。然后是用redis的hash类型但是操作起来非常不方便而且没办法存集合也pass了其他的类型翻了源码看只支持int、string、bool这些也不行。没办法还是序列化吧然后想起来张善友老师推荐的protobuf说是性能超级棒于是就用了发现它是用Stream来转化的莫非这就是它性能高的原因哪位大神指点下~ 用redis自定义session存储 缓存服务搭起来后就打算把session搬到里面去便于做分布式和统一状态管理。很简单重写一套SessionStateStoreProviderBase就行了然后跟着园子里焰尾迭的博客《分布式中Redis实现Session终结篇》做了一套但是发现跑不起来应该和我的封装有关由于时间问题就先放下了直接上nuget找了一个现成的看中了Microsoft.Web.RedisSessionStateProvider想着既然是我软官方出的应该没什么大问题另外这个SessionStateProvider也是依赖于StackExchange.Redis与项目中的一致于是果断下载安装了。接下来不得不夸一下微软的细节处理啊下载完立马蹦出个readme告诉我安装结果 要不然还要研究这个东西怎么用按照里面的提示打开web.config发现在system.web节点下帮我们自动加了一个节点sessionState里面定义了和session有关的配置最重要的是配置模板都给出来了连数据类型都标记的清清楚楚: 众所周知微软一直向他的开发者推崇傻瓜式操作但这些细节真的是太贴心了根据自己的redis服务器信息配置一下关键信息就ok了。写个session测试一下页面跑起来了redis里面也查到session值了(被编码了)太TM爽啊~100个大写的赞。。。 最后把系统中临时用的HttpContext.Cache和静态Dictionary全部用redis替换掉然后build、run、ok。 总结 经过这几天的实践算是打开了redis的大门走出了第一步今后系统开发和运行中肯定还会遇到很多问题也不是说在程序用redis实现get、set就是学会了现在接触到的只是最基础的东西后面还要学习一下redis的高级用法例如pub/sub、master/slave、集群等。 问题 1、序列化那里心里还是有梗有没有更好的解决方案而且用protobuf的话要在类名和属性上打标签这个有点忧桑啊~ 2、有人说把session放到redis后可以解决session阻塞的问题测试了一下好像不行啊哪位大神知道真相的还请指点一二~ 相关文章 Redis到底该如何利用一Redis到底该如何利用二Redis 3.0.0正式版发布高性能 K/V 服务用Docker构建分布式Redis集群推荐–个通用缓存接口抽象类库CacheManagerasp.net core 使用 Redis 和 Protobuf 进行 Session 缓存C#使用Redis集群缓存Azure Redis 缓存的 ASP.NET 会话状态提供程序搜狐视频Redis私有云cachecloud开源了 原文地址http://www.cnblogs.com/hohoa/p/5771255.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注