redis key命名规范_Redis设计思路总结(一)

前言

目前大部分程序员,在使用redis的过程中,基本都存在或多或少的滥用。其中包括key的命名,失效时间,key的存储结构都非常随意。项目上线后,短短时间内 内存水涨船高。我决定将我个人设计redis的习惯分享给各位(有不对,不合理的地方希望可以谅解)我将会在以下几个方面进行说明

  • key 命名设计
  • key 常见业务场景
  • php 命令使用场景
  • key 过期时间设置
  • redis连接池

、key命名设计

可读性和管理性

以项目名为前缀(防止key冲突),用冒号分隔,比如项目名:表名:id

zh(知乎):news_data(新闻数据):2(主键id)
zh:news_data:2

精简性

key的命名,尽量精简,key的名字长度对内存的占用不可忽视,我们来实际操作看看

//特地搞个长一点的key 方便看对比
SET zh:news_data_test_info:2 1
SET zh:n_d:2 1

我们现在分别set了两个key,结构都是string,值都是1。我们来看看两个key 对内存对占用情况

10d30f7ea6c63b3617995f85a1360bae.png

通过上图我相信各位看官都已经明白为什么key要精简了

二、key 常见业务场景

XX列表。如:新闻列表,用户收支记录,帖子列表等。。。

以下我们用新闻来举例, 假设 产品经理给了我们一个这样的需求:

首页新闻列表(页面展示数据:标题,文章摘要,发布时间,作者。业务约束:按发布时间倒序,每次下列加载20条)

首先我们需要先设计一个key,去存储关于新闻的基本数据(Hash结构,为什么用Hash?这里就不赘述了详细可以看教程,结合简介性去搞明白redis的几种存储数据结构 Redis菜鸟教程)

HMSET zh:news_data:1 id 1 title "文章标题1" synopsis "文章摘要1" author "Icecream" create_time "1594794254"
HMSET zh:news_data:2 id 2 title "文章标题2" synopsis "文章摘要2" author "Icecream" create_time "1594796254"

1f401a2753908baa1c82a00679e88bdf.png

bc89f63584825c67d0751a61021c884c.png

接着我们需要设计一个列表(zset)有序集合可以满足各种上述需求的排序,具体可以看这篇文章了解zset菜鸟教程

ZADD zh:news_list 1594794254 1(新闻主键id)
ZADD zh:news_list 1594796254 2

如果仅仅只是按时间倒序,我们score值有必要存时间戳吗?存主键id不是更好吗?

ZADD zh:news_list2 1 1
ZADD zh:news_list2 2 2

ea77b9a5ccb47013db2546dad1c13d2d.png

同样是完成了业务,存储主键ID 可以节省8Bytes不香吗?后续如果衍生需求 用户发布新闻列表 socre保持不变继续存新闻主键id,value改为用户主键。这样一个key就能满足两个需求,岂不美哉?

数据统计,如:每日活跃用户,每日新增用户等

此处用每日活跃用户举例,首页用户的活跃时间对我们统计来讲没有太大的价值,活跃用户我们是需要去重的,这里我们就可以使用redis中的set结构了。set结构中成员是不可重复的。我们只需要在用户登陆的时候,将用户uid插入key 即可

//登陆成功~~
SADD zh:hot_user:0715 1
SADD zh:hot_user:0715 1
SADD zh:hot_user:0715 1
SADD zh:hot_user:0715 2
SADD zh:hot_user:0715 3
SADD zh:hot_user:0715 4
SADD zh:hot_user:0715 5

//统计活跃用户
SCARD zh:hot_user:0715
(integer) 5 //今日活跃的用户为5名哦~

befff819f2fe555a4a9b73453055ff4b.png

上述的做法从业务逻辑来讲其实没啥毛病,但程序员就应该更加精益求精,要有极客精神嘛。偶然间我看到了这篇文章 redis的bitmap使用场景。根据这篇文章讲解的bitmap 我决定实际操作试试

//登陆成功~~
SETBIT zh:hot_user2:0715 1 1
SETBIT zh:hot_user2:0715 2 1
SETBIT zh:hot_user2:0715 3 1
SETBIT zh:hot_user2:0715 4 1
SETBIT zh:hot_user2:0715 5 1

BITCOUNT zh:hot_user2:0715
(integer) 5

4e5a4dced5d2b38f4616b27c7b68fc01.png

set与bitmap的存储对比,少了将近10Bytes 香吗?真香

呃,剩下的有时间再写了
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值