专栏名称: 数据分析与开发
伯乐在线旗下账号,分享数据库相关技术文章、教程和工具,另外还包括数据库相关的工作。偶尔也谈谈程序员人生 :)
目录
相关文章推荐
AustinDatabases  ·  哎,马上删,马上 ·  昨天  
终码一生  ·  如何加快 SQL 查询速度的同时保持 ... ·  2 天前  
51好读  ›  专栏  ›  数据分析与开发

Redis只能做缓存?太out了!

数据分析与开发  · 公众号  · 数据库  · 2024-04-08 11:50

正文

请到「今天看啥」查看全文


>HSET user:199929 sex m
>HSET user:199929 age 22
>HGETALL user:199929
1) "sex"
2) "m"
3) "age"
4) "22"

这种非统计型的、读多写少的场景,是非常适合使用KV结构进行存储的。Redis的hash结构提供了非常丰富的指令,某个属性也可以使用 HINCRBY 进行递增递减,非常的方便。

2.2 实现计数器

上面稍微提了一下HINCRBY指令,而对于Redis的Key本身来说,也有 INCRBY 指令,实现 某个值 的递增递减。

比如以下场景:统计某个帖子的点赞数;存放某个话题的关注数;存放某个标签的粉丝数;存储一个大体的评论数;某个帖子热度;红点消息数;点赞、喜欢、收藏数等。

> INCRBY feed:e3kk38j4kl:like 1
> INCRBY feed:e3kk38j4kl:like 1
> GET feed:e3kk38j4kl:like
"2"

像微博这样容易出现热点的业务,传统的数据库,肯定是撑不住的,就要借助于内存数据库。由于Redis的速度非常快,就不用再采用传统DB非常慢的 count 操作,所有这种递增操作都是毫秒级别的,而且效果都是实时的。

2.3 排行榜

排行榜能提高参与者的积极性,所以这项业务非常常见,它本质上是一个topn的问题。

Redis中有一个叫做zset的数据结构,使用跳表实现的有序列表,可以很容易实现排行榜一类的问题。当存入zset中的数据,达到千万甚至是亿的级别,依然能够保持非常高的并发读写,且拥有非常棒的平均响应时间(5ms以内)。

使用 zadd 可以添加新的记录,我们会使用排行相关的分数,作为记录的score值,然后使用 zrevrange 指令即可获取实时的排行榜数据,而 zrevrank 则可以非常容易的获取用户的实时排名。

>ZADD sorted:xjjdog:2021-07  55 dog0
>ZADD sorted:xjjdog:2021-07  89 dog1
>ZADD sorted:xjjdog:2021-07  32 dog2
>ZCARD sorted:xjjdog:2021-07
>3
> ZREVRANGE  sorted:xjjdog:2021-07  0 -10 WITHSCORES # top10排行榜
1) "dog1"
2) "89"
3) "dog0"
4) "55"
5) "dog2"
6) "32"

2.4 好友关系

set 结构,是一个没有重复数据的集合,你可以将某个用户的关注列表、粉丝列表、双向关注列表、黑名单、点赞列表等,使用独立的zset进行存储。

使用 ZADD ZRANK 等,将用户的黑名单使用ZADD添加,ZRANK使用返回的sorce值判断是否存在黑名单中。使用 sinter 指令,可以获取A和B的共同好友。







请到「今天看啥」查看全文


推荐文章
AustinDatabases  ·  哎,马上删,马上
昨天
南方人物周刊  ·  中国式童星的成长之路丨旁观娱乐
8 年前
套利对冲投资  ·  本周套利策略
8 年前
穿衣搭配女王  ·  男人爱问的几个问题,99%的女人不知道!
8 年前
激光制造网LaserfairCom  ·  3D打印牵手教育,将会带来怎样的变革?
7 年前