6

Redis 使用规范总结

 3 years ago
source link: https://suiyia.github.io/2019/12/03/Redis-%E4%BD%BF%E7%94%A8%E8%A7%84%E8%8C%83%E6%80%BB%E7%BB%93/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Redis 使用规范总结

总结 Redis 的规范用法

初始化配置

  • Redis 单机部署情况下,有 16 个「命名空间」,不同命名空间之间数据不共享,建议业务不相关的项目使用不同命名空间,集群部署忽略此条建议。
  • key、value 序列化方式

RedisTemplate 包含 9 种序列化方式,默认使用 JdkSerializationRedisSerializer 序列化键值对,有时键值对会出现乱码。

建议 StringRedisSerializer,注意存入的 key、value 必须为 String 类型,否则会抛出类型转换异常。

使用默认序列化 乱码问题

    • 由小写字母、数字、英文点号、英文半角冒号组成,必须英文字母开头

    • 格式:业务名、表名做前缀,冒号分隔,比如 mobileserver:userfreepasswordinfo:freepasswordtype

    • 控制 key 长度,不该使用过长或含义不清的名称,上面可使用 mobileserver:userfreewd:freewdtype

    • 不包含特殊字符:空格、换行、单双引号、下划线以及其他转义字符

    • 设置过期时间

    • 设置最大内存及最大内存淘汰策略(maxmemory-policy)参数。

    • 客户端使用连接池

    • 禁止命令:keys、flushall、flushdb、CONFIG

    • 禁止 Big Key。如果 1MB 的 key 每秒重复写入 10 次,就会导致写入网络 IO 达 10MB。非字符串的 bigkey,不要使用 del 删除,使用 hscan、sscan、zscan 方式渐进式删除,同时要注意防止 bigkey 过期时间自动删除问题(例如一个 200 万的 zset 设置1小时过期,会触发 del 操作,造成阻塞)。

    • 所有 key 命名在同一个实体类中定义,方便管理,比如:RedisConstant.java

    • hash、list、set、zset 元素个数不要超过 5000

    • 使用合适的数据类型。常见的如:String 可以用作普通的 K-V、计数类;Hash 可以用作对象如商品、经纪人等,包含较多属性的信息;List 可以用作消息队列、粉丝/关注列表等;Set 可以用于推荐;SortedSet 可以用于排行榜等。

    • 冷热数据分离,使用不频繁的用 MySQL 代替

    • 必须要存储的大文本数据应该压缩后存储

    • 高并发下建议客户端添加熔断功能(例如 netflix、hystrix)

    • 不建议过多使用 Redis 事务功能,它不支持回滚

  • Redis 键过期策略

    • volatile-lru:默认策略,即超过最大内存后,在过期键中使用 LRU 算法进行key 的剔除,保证不过期数据不被删除,但是可能会出现 OOM 问题。

    • allkeys-lru:根据 LRU 算法删除键,不管数据有没有设置超时属性,直到腾出足够空间为止。

    • allkeys-random:随机删除所有键,直到腾出足够空间为止。

    • volatile-random:随机删除过期键,直到腾出足够空间为止。

    • volatile-ttl:根据键值对象的ttl属性,删除最近将要过期数据。如果没有,回退到noeviction策略。

    • noeviction:不会剔除任何数据,拒绝所有写入操作并返回客户端错误信息”(error) OOM command not allowed when used memory”,此时Redis只响应读操作。

模板方法(TODO)

RedisUtils.java


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK