redis缓存设计规范

一、键值设计

1、key名设计

        a.(建议)可读性和可管理性:以业务名(或数据库名)为前缀,用冒号分隔

e.g. 业务名:表名:id    trade:order:1

        b.(建议)简洁性:保证语义的情况下,控制key的长度

e.g. user:{uid}:friends:messages:{mid}  简化为 u:{uid}:fr:m:{mid}

        c.(强制)不要包含特殊字符

不要包含空格、换行、单双引号及其他转义字符

2、value设计

        a.(强制)不允许使用bigkey(防止网卡流量、慢查询)

Redis中,一个字符串最大512MB,一个二级结构(hash、list、set、zset)可以存储大约40亿个(2^32 -1)元素,实际情况中以下两种情况,就可以认为它是bigkey:

                1、字符串:单个value值很大,超过10kb;

                2、非字符串:hash、list、set、zset,元素个数超过5000;

        bigkey的危害:

                1、导致redis阻塞

                2、网络阻塞

                3、过期删除,如果没有采用redis4.0的过期异步删除,就会造成阻塞;

        例子:

                社交类:粉丝列表,明细大V

                统计类:按天存储用户集合

                缓存类:将数据库数据load出来序列化放入redis

        如何优化bigkey:

                拆:将数据分段存储

3、(推荐)控制key的生命周期,redis不是垃圾桶,设置过期时间(条件允许打散过期时间)

二、命令使用

1、(推荐)O(N)命令关注N的数量:hgetall、lrange、smembers、zrange等的使用需要明确N的值,有遍历的需求可以使用hscan、scan、zscan替代

2、(推荐)禁用命令:禁止线上使用keys、flushall、flushdb等,通过redis的rename机制禁掉命令,或者使用scan的方式渐进式处理。

3、(推荐)合适使用select:redis的多数据库较弱,使用数字进行区分,很多客户端支持较差,同时多业务用多数据库实际还是单线程处理,会有干扰。

4、(推荐)使用批量操作提高效率:原生批量命令有mget、mset,非原生批量命令有pipeline,但要注意控制一次批量操作元素的个数。

三、客户端使用

1、避免多个应用使用一个redis实例

2、使用带有连接池的数据库

连接池配置含义,maxTotal:最大连接数;maxIdle:最大空闲连接数;maxWaitMillis:当连接池连接用尽后,调用者的最大等待时间(ms);

3、高并发下客户端添加熔断功能

4、设置合理的密码,如有必要使用SSL加密

5、过期键的清除策略

Redis对于过期键有三种清除策略

        1、被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除这个过期key;

        2、主动删除:Redis会定期主动淘汰一批已过期的key;

        3、当已用内存超过maxmemory限定时,触发主动清理策略;

主动清理策略在redis 4.0之前有6中实现,4.0之后,又增加了2中策略;

默认是不处理,拒绝所有写入操作并返回报错信息“OOM”,只响应读操作;

常用volatile-lru:使用LRU算法筛选设置了过期时间的键值对删除

LRU(Least Recently Used):最近最少使用,以最近一次访问时间作为参考

LFU(Least Frequently Used):最不经常使用,以最近访问次数,频率为参考

Redis建议设置最大内存,如果不设置,当Redis内存超出物理内存限制时,内存的数据会开始和磁盘产生频繁的交换(swap),会让Redis的性能急剧下降;

Redis主从模式下,只有主节点才会执行过期策略,然后把删除操作同步到从节点;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值