redis那点事8: 规范篇

redis大纲: 

    传送

 

原文

    本篇博文是根据阿里的规范手册进行修改  原文: 闪现

 

key的设计

    可管理性和可读性:

        以业务名(数据库名)为前缀, 防止key冲突 用冒号隔开

        如: 数据库名:表名:id       local:user:12

 

    简洁性:

         保证语义的前提下, 尽量缩短key,  key很多时也会占用很多的内存

         如: user:{uid}:friend:message:{mid} 简化为  u:{uid}:f:msg:{mid}

 

    不要包含特殊字符:

         如: 包括空格、换行符、单双引号、转移符等

 

value的设计

    拒绝bigkey (防止网卡流量、慢查询):

         string最好控制在10kb

        hash、list、set、zest元素不要超过5000

        如果删除bigkey不要直接del, 最好用scan进行渐进式的删除, 同时也要防止bigkey自动过期,

        自动过期会触发del操作, 造成阻塞

 

    选择合适的数据类型:

        反例: set user:1:name 张三  set user:1:age 18

        正例: hmset user:1 name 张三 age 18

 

    控制key的生命周期:

        使用expire设置过期时间 (随机打散过期时间, 防止缓存雪崩)

        不过期的数据使用idletime

 

 

命令的使用:

    时间复杂度为O(n)的命令需要关注n的数量:

        例如: hgetall lrange smembers zrange sinter 这些命令时间复杂度都是O(n), 在使用的时

        候一定要指定n的大小, 否则也有可能造成缓存雪崩, 如果需要遍历, 可以使用 scan 命令遍历

 

    禁用命令:

        生产环境下禁用 FLUSHALL FLUSHDB CONFIG KEYS, 这些命令需要通过配置文件禁用掉,

        如: rename-command KESY ""

 

    合理使用select :

        redis多库会比较弱, 使用分区很多客户端支持较差, redis本身就是单线程的, 同时使用多

        个库还是单线程的, 会干扰性能

 

    使用批量处理会提高性能:

        如 mget, mset, pipeline 批量插入会提高性能, 但是一次最多不要超过500个, 和数据的 实际大小有关

        mget 和 mset是原生操作, 所以他是原子性的, pipeline是非原生的命令, 不是原子性的

        pipeline可以打包不同的命令, 原生命令做不到, pipeline需要客户端和服务端的同时支持

 

    不要使用过多的事务:

        redis的事务比较弱, 不支持回滚操作, 在集群中官方要求一次事务操作的key必须在一个槽上

 

    集群上使用LUA脚本有特殊要求:

        所有key都应该由 KEYS 数组来传递, redis.call/pcall 里面调用的redis命令, key的位置,

        必须是KEYS array, 否则直接返回error

        所有的key, 必须在同一个slot上, 否则直接返回error

 

    生产环境下不要长时间使用monitor命令:

        monitor 会开辟一个进程, 实时打印出redis的命令, 所以会占用资源, 除了排查故障时, 其他时候建议不要使用

 

客户端的使用:

    避免多个应用使用一个redis实例:

        拆分不同的业务, 公共数据服务化处理

 

    使用连接池:

        可以有效的控制连接, 同时提高效率

 

    熔断功能:

        高并发情况下客户端添加熔断功能, 可以使用netflix hystrix

 

    合理的加密:

        设置合理的密码

 

    淘汰策略:

        根据自身业务, 配置好maxmemory, 设置好过期时间, 根据自己业务的需求, 设置淘汰策略,

       默认策略是volatile-lru, 但是可能出现OOM错误 (只读不可写)

 

结束

  这就是我对redis规范篇的总结  感觉有用就点个赞吧 如果有错误或更好的方法评论区请多多指出  相互学习共同进步

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值