设为首页 加入收藏

TOP

中小型研发团队架构实践五:Redis快速入门及应用(二)
2019-09-17 19:03:53 】 浏览:58
Tags:中小型 研发 团队 架构 实践 Redis 快速 入门 应用
ll。

     步骤2、在App.config或Web.config文件中添加如下配置

1 <add key="RedisServerIP" value="redis:uuid845tylabc123@139.198.13.12:4125"/>
2 <!-- 提供的 Redis 环境是单机版配置。如果 Redis 是主从配置,则还需设置 RedisSlaveServerIP-->
3 <!--<add key="RedisSlaveServerIP" value="redis:uuid845tylabc123@139.198.13.13:4125"/>--> 
4 
5 <!--Redis 数据库。如果不需要指定 Redis 数据库,就配置默认值 0-->     
6 <add key="RedisDefaultDb" value="0"/>

      步骤 3、使用 PooledRedisClientManager 类创建 Redis 连接池:

 1 // 读取 Redis 主机 IP 配置信息
 2 string[] redisMasterHosts = ConfigurationManager.ConnectionStrings["RedisServerIP"].ConnectionString.Split(',');  3 
 4 // 如果 Redis 服务器是主从配置,那么还需要读取 Redis Slave 机的 IP 配置信息
 5 string[] redisSlaveHosts = null;  6 var slaveConnection = ConfigurationManager.ConnectionStrings["RedisSlaveServerIP"];  7 if (slaveConnection != null && !string.IsNullOrWhiteSpace(slaveConnection.ConnectionString))  8 {  9     string redisSlaveHostConfig = slaveConnection.ConnectionString; 10     redisSlaveHosts = redisSlaveHostConfig.Split(','); 11 } 12 
13 // 读取 RedisDefaultDb 配置
14 int defaultDb = 0; 15 string defaultDbSetting = ConfigurationManager.AppSettings["RedisDefaultDb"]; 16 if (!string.IsNullOrWhiteSpace(defaultDbSetting)) 17 { 18     int.TryParse(defaultDbSetting, out defaultDb); 19 } 20 
21 var redisClientManagerConfig = new RedisClientManagerConfig 22 { 23     MaxReadPoolSize = 50, 24     MaxWritePoolSize = 50, 25     DefaultDb = defaultDb 26 }; 27 
28 // 创建 Redis 连接池
29 Manager = new PooledRedisClientManager(redisMasterHosts, redisSlaveHosts, redisClientManagerConfig) 30 { 31     PoolTimeout = 2000, 32     ConnectTimeout = 500                
33 };

     步骤4、通过PooledRedisClientManager的实例获取Redis客户端,然后就可以开始通过Redis客户端的API进行操作。

 

五、其它

5.1、 Redis Key命名规范

     Redis Key命名规范:AppID:KeyName。

     可能有很多人习惯用英文状态的点号来作为AppID和KeyName的分隔符,而笔者建议使用冒号作为AppID和KeyName的分隔符,其原因是:这么写会使Redis Key会以AppID作为分类显示在Redis Desktop Manager中,方便你能够快速查到要查阅的Redis Key对应的Redis Value值,请见下图:

 

     但如果使用英文状态的点号来作为分隔符的话,那么在Redis Desktop Manager中,Redis Key就不会被分类了,请见下图:

 

5.2、常见应用问题

  • 缓存穿透处理:什么是缓存穿透?当根据Redis key在缓存中查询后,不存在对应Value,就应该会在后端系统如DB中去查找,该Key的并发请求量一旦变大,那么就会对DB造成很大的压力。解决办法有:a.前端风险控制,将恶意穿透情况排除在外;b.对查询结果为空的情况依然进行缓存,但缓存时间会设置得很短,一般是几分钟。
  • 缓存雪崩处理:什么是缓存雪崩?当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力。解决办法有:后端连接数限制,错误阈值限制,超时处理,缓存失效时间均匀分布,前端永不失效及后端主动更新。
  • 缓存时长:策略定位复杂,需要多维度的计算。
  • 缓存失效:按时失效,事件失效,后端主动更新。
  • 缓存Key:Hash、规则、前缀+Hash,异常情况可人工干预。
  • Lua脚本:服务端批量处理及事务能力,有条件逻辑的可扩展脚本。使用它的好处有:减少网络开销、原子操作、可复用。
  • Limit:可滑动时间窗口,如应用于Session,Memcached需每次传Key和Value。

 

六、Demo 下载及更多资料

 

 转载链接:http://www.infoq.com/cn/articles/architecture-practice-01-redis?utm_source=infoq&utm_campaign=user_page&utm_medium=link

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Lua在Redis中的应用 下一篇业余开发Android App的架构演变

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目