前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >redis很多人都用错了

redis很多人都用错了

原创
作者头像
java 技术入门
发布2022-09-04 08:46:39
3930
发布2022-09-04 08:46:39
举报
文章被收录于专栏:redis 教材

一.规范命名:

1.1通过合理的命名

不同的业务使用不同的前缀(防止key冲突),用冒号隔开,比如业务名:表名:id

代码语言:javascript
复制
 uv:page:1024 

1.2 控制key的长度

key 本身是字符串,底层的数据结构是 SDS。SDS 结构中 会包含字符串长度、分配空间大小等元数据信息 , 当 key 字符串 的长度增加时,SDS 中的元数据也会占用更多内存空间 。

尽量使用单词首字符或者缩写代替

1.3 不要包含特殊字符

比如:空格,换行,单双引号以及其他转义字符

二. value规范设计

2.1避免使用bigkey

有两种情况:

  • 值为string,例如value为10M的string,只能在业务层,控制string类型的value大小在10K以下,还可以对vale进行压缩减少大小。
  • 值为集合类型,尽量把集合元素个数控制在1w个以下,如果超过需要把大集合拆分成多个小集合;

List,Hash,Set,Sort Set 集合元素小于一定阀值,会才用压缩数据结构,达到节省内存效果,比如hash元素小于1000,就会使用zipList来保存,需要注意的时,使用压缩数据结构虽然节省了内存,但是会降低读写访问速度,所以不属于bigkey的前提下,如果业务更需要高性能,那就不用刻意去控制集合元素个数

2.2 使用高效序列化方式和压缩方法

  • 使用protobuf,kryo序列化可以节省内存空间
  • 使用xml和json序列化数据虽然可读性好,但是占用内存,可以使用gzip压缩数据达到节省内存目的

2.3 使用整数对象共享池

Redis 内部维护了 0 到 9999 这 1 万个整数对象,并把这些整数 作为一个共享池使用

两种情况不能使用:

  • 如果 Redis 中设置了 maxmemory,而且启用了 LRU 策略(allkeys-lru 或 volatile-lru 策略),
  • 如果集合类型数据采用 ziplist 编码,而集合元素是整数,这个时候,也不 能使用共享池。因为 ziplist 使用了紧凑型内存结构,判断整数对象的共享情况效率低。

三。数据保存规范

  • redis更多的保存热数据
  • redis保存的数据需要设置过期时间
  • 不同的业务使用不同实例的redis,避免不同的业务相互影响
  • 控制redis单个实例内存大小(2G-6G),避免生成RDB,主从复制阻塞主线程,影响正常请求处理

四。命令使用规范

  • 使用重命令方式禁用命令:keys,flushall,flushdb;keys可以使用scan代理,flushall,flushdb加上async代替
  • 慎用monitor命令
  • 慎用全量操作命令, (例如 Hash 类型的 HGETALL、Set 类型的 SMEMBERS) ,大集合会阻塞主线程,影响正常请求。可以使用sscan,hscan分配返回集合;把大集合拆分成按( 时间、地域、用户 ID 等属性)小集合,每次访问只会访问到小集合
  • 使用批量操作:mget,mset,pipeline (非原子操作)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.规范命名:
  • 二. value规范设计
  • 2.1避免使用bigkey
  • 2.2 使用高效序列化方式和压缩方法
  • 2.3 使用整数对象共享池
  • 三。数据保存规范
  • 四。命令使用规范
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档