Redis Key
key命名策略
推荐使用项目名:业务名称:时间构成,如:baike:login-name-code:20201228,百科项目登录验证码,与不同的开发人员定义相同时间的概率很低,时间可以按照不同情况定义到天、时、分、秒。
过期时间的设定
绝大多情况下需要设定过期时间,原因如下:
- 作为缓存,加快程序的执行速度。但是缓存的 Object 很可能是会经常变化的,不要长期驻留在 Redis 中
- 当 Redis 的内存使用超过一个阈值(可以自定义)时,会触发 Redis 的缓存淘汰策略,此时的 LRU 过程是非常慢的。极大的影响 Redis 的性能
Redis Value
单key的Value不适宜很大,原因如下:
- Redis 的单线程工作机制,无法用多核并行处理。如果遇到 IO 量大的操作,出现等待 IO 的情况会增多,即使 Redis 底层用的是 IO 多路复用技术,IO 的事件句柄也是要占用资源的
- Redis 的持久化需要将数据保存下来,KV 的数据量很大,也会影响持久化的执行
各数据结构推荐限制
- String 单个元素最大值为512 MB,推荐value最大长度不超过1 MB。
- List 单个元素最大值为512 MB,推荐list的元素个数小于8192,value最大长度不超过1 MB。
- Set 单个元素最大值为512 MB,推荐set的元素个数小于8192, value最大长度不超过 1 MB。
- Sorted set 单个元素最大值为512 MB,推荐sorted set的元素个数小8192,value最大长度不超过1 MB。
- Hash 没有field个数限制,单个元素最大值为512 MB,推荐元素个数小于8192, value最大长度不超过1 MB。
持久化机制的选择
- RDB:在指定的时间间隔内将内存中的数据快照写入磁盘,实际操作过程是 fork 一个子进程,先将数据写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。
- AOF:以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。
RDB的缺点:
- 如果你想保证数据的高可用性,即最大限度的避免数据丢失,那么 RDB 将不是一个很好的选择。因为系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失
- 由于 RDB 是通过 fork 子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟
AOF的缺点
- 对于相同数量的数据而言,AOF 文件通常要大于 RDB 文件。RDB 在恢复大数据时的速度比 AOF 的恢复速度要快
- 由于同步策略的不同,AOF 在运行效率上往往会慢于 RDB
禁用命令
- keys
虽然其模糊匹配功能使用非常方便也很强大,在小数据量情况下使用没什么问题,数据量大会导致 Redis 锁住及 CPU 飙升。- flushdb
删除 Redis 中当前所在数据库中的所有记录,并且此命令从不会执行失败- flushall
删除 Redis 中所有数据库中的所有记录,不只是当前所在数据库,并且此命令从不会执行失败。- config
客户端可修改 Redis 配置。