背景:
redis 广泛应用于缓存方向,也经常用来做分布式锁、访问量统计、分布式会话共享等;redis支持事务、持久化、LUA脚本、LRU驱动事件、多种集群方案。
默认情况下redis没有开启AOF (append only file)方式持久化,开启:appendonly yes
AOF持久化有三种方式appendfsync(always everysec no)一般使用everysec,redis的性能几乎不受影响。
分布式会话管理的常见解决方案有Session Stick,Session 复制, Session集中管理
(一)Session Stick
基本原理:确保每一次的请求都到同一台服务器上。常见通常在haproxy、nginx上设置ip_hash的负载均衡策略
(二)Session 复制
基本原理:每台应用服务器都会保存会话session数据,导致session数据变化就需要同步到所有的应用服务器,网络开销越来越大,应用服务器保存session的内存越来越大。
(三)Session集中管理
基本原理:增加一台服务器,专门用来管理session。
关键配置:
1. Redis过期健删除策略设置,redis过期健的删除主要采用惰性删除和定期删除策略,关键参数HZ(每秒刷新的频率)默认值是10,一般采用默认值,最大不超过100.
2. Redis maxmemory 和 maxmemory-policy进行设置。maxmemory一般为主机内存的1/2,maxmemory-policy是redis达到使用的最大物理内存后,采用的健值淘汰策略,默认策略为noeviction,内存满之后禁止写,建议设置成Volatile-lru,即超过最大内存后,要在过期健中使用lru算法进行key的剔除,保证不过期数据不被删除。
3. Min-slaves-to-write和min-slaves-max-lag(主从服务器之间数据不一致的最长时间,建议设置成10s).
Redis使用规范
key名设计:
1. 业务名/数据库名:表名:ID
2. 保持key的简介性,避免不可忽视的内存占用User:{uid}:friends:messages:{msgid}简化为u:{uid}🇫🇷m:{mid}。
3. 不要包含特殊字符
value:
1. 拒绝bigkey(防止网卡流量、慢查询)
2. 推荐选择适合的数据类型
3. 推荐控制key的生命周期
命令使用规范
1. 禁止生产环境使用keys、flushall、flushdb、monitor 等耗时命令,keys命令建议使用scan命令替代。
2. 合理使用select命令