资料总结 资料总结
首页
go
java
云原生
  • mysql
  • redis
  • MongoDB
  • 设计模式详解
  • 数据结构与算法
  • 前端
  • 项目
  • 理论基础
  • 运营
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

linghui Wu

一只努力学飞的鱼
首页
go
java
云原生
  • mysql
  • redis
  • MongoDB
  • 设计模式详解
  • 数据结构与算法
  • 前端
  • 项目
  • 理论基础
  • 运营
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 数据库表设计
  • mysql

  • redis

    • 数据类型的应用场景
    • 持久化
    • 场景问题
    • 高可用架构
    • 设计和使用规范
      • 【建议】: 可读性和可管理性
      • 【建议】:简洁性
      • 【强制】:不要包含特殊字符
      • 【强制】: 集群批量操作key,用{}保证成功
        • value设计
      • 【强制】:拒绝bigkey
      • 【推荐】:选择适合的数据类型
      • 【推荐】:控制key的生命周期,redis不是垃圾桶。
        • 【推荐】:慎用lua脚本
        • 命令使用
      • 【推荐】 O(N)命令关注N的数量
      • 【推荐】:禁用命令
      • 【推荐】合理使用select
      • 【推荐】使用批量操作提高效率
      • 【建议】Redis事务功能较弱,不建议过多使用,可以用lua替代
        • 客户端使用
      • 【推荐】 避免多个应用使用一个Redis实例
      • 【推荐】使用带有连接池的数据库
      • 【建议】高并发下建议客户端添加熔断功能(例如sentinel、hystrix)
      • 【推荐】设置合理的密码,如有必要可以使用SSL加密访问
        • 配置
      • 【强制】: 设置最大内存(maxmemory-policy)
      • 【推荐】cluster-require-full-coverage为no
      • 【推荐】cluster-­node-­timeout 设置合理
        • 参考资料
    • redis
  • MongoDB

  • InfluxDB
  • 数据库
  • redis
wulinghui
2022-02-18
目录

设计和使用规范

# key名设计

# 【建议】: 可读性和可管理性

比如业务名:表名:id

# 【建议】:简洁性

保证语义的前提下,控制key的长度

# 【强制】:不要包含特殊字符

空格、换行、单双引号以及其他转义字符

# 【强制】: 集群批量操作key,用{}保证成功

# value设计

# 【强制】:拒绝bigkey

  • string类型控制在10KB以内,hash、list、set、zset元素个数不要超过5000

  • 危害: 过期删除,导致redis阻塞,网络拥塞

  • bigkey的产生

    • 社交类:粉丝列表,如果某些明星或者大v不精心设计下,必是bigkey。
    • 统计类:例如按天存储某项功能或者网站的用户集合,除非没几个人用,否则必是bigkey。
    • 缓存类:将数据从数据库load出来序列化放到Redis里,第一是不是有必要把所有字段都缓存,第二,有没有相关关联的数据,为了 图方便把相关数据都存一个key下,产生bigkey
  • 非字符串的bigkey,不用del删除,用hscan、sscan、zscan方式渐进式删除

  • 如何优化bigkey

  • 拆
  • 如果bigkey不可避免,用渐进式和局部数据获取数据,避免阻塞.

# 【推荐】:选择适合的数据类型

要合理控制和使用数据结构,但也要注意节省内存和性能之间的平衡

# 【推荐】:控制key的生命周期,redis不是垃圾桶。

(条件允许可以打散过期时间,防止集中过期,统一调用del,阻塞reids)

# 【推荐】:慎用lua脚本

# 命令使用

# 【推荐】 O(N)命令关注N的数量

hgetall、lrange、smembers、zrange、sinter等并非不能使用,但是需要明确N的值。有遍历的需求可以使用hscan、sscan、zscan代替。

# 【推荐】:禁用命令

禁止线上使用keys、flushall、flushdb等,通过redis的rename机制禁命令

# 【推荐】合理使用select

redis的多数据库较弱,还是单线程处理

# 【推荐】使用批量操作提高效率

# 【建议】Redis事务功能较弱,不建议过多使用,可以用lua替代

# 客户端使用

# 【推荐】 避免多个应用使用一个Redis实例

# 【推荐】使用带有连接池的数据库

连接池预热

# 【建议】高并发下建议客户端添加熔断功能(例如sentinel、hystrix)

# 【推荐】设置合理的密码,如有必要可以使用SSL加密访问

# 配置

# 【强制】: 设置最大内存(maxmemory-policy)

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

# 【推荐】cluster-require-full-coverage为no

cluster-require-full-coverage为no时,集群可以不完整提供服务

# 【推荐】cluster-­node-­timeout 设置合理

防止脑裂问题

# 参考资料

Redis最佳实践:7个维度+43条使用规范,带你彻底玩转Redis (opens new window)

  • 性能
  • 可靠性
  • 资源
  • 运维
  • 监控
  • 安全

编辑 (opens new window)
上次更新: 2023/01/24, 15:21:15
高可用架构
redis

← 高可用架构 redis→

最近更新
01
架构升级踩坑之路
02-27
02
总结
02-27
03
语法学习
02-27
更多文章>
| Copyright © 2021-2025 Wu lingui |
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式