redis基本数据结构使用场景

文章目录

  • String使用场景
  • Hash使用场景
  • list使用场景
  • set使用场景
  • Zset使用场景

String使用场景

string类型被广泛使用,这是初级redis使用者最常用的类型,其实string类型还可以表示int和bitmap,这两种在大型复杂应用中也会被大量使用,下面分别说明:

(1)redis实现文章“阅读量”统计,类似的还有“点击量”等场景。

INCR article:readcount:101 --计数加1
GET article:readcount:101 --查看总数量

(2)web集群的session共享,基于string类型存储session。

(3)分布式系统全局序列号,典型的场景是基于redis实现递增的序列号。

INCRBY orderId 1000 --每次取1000个id,有效减少交互次数。

(4)基于bitmap操作,可以实现多种常见的场景
指令简单介绍:

setbit k1 1 1        --将k1值 第一位设置为1,此时k1共8位
get k1             --获取bit的asci码值
bitcount k1 0 -1     --统计第一个字节到最后一个字节的1的个数
bitop and k3 k1 k2   --将k1和k2的值与运算,bit位运算是bitmap使用场景的基石。
get k3             --获取k3的值

应用场景:

  1. bitmap可以用于实时的数据统计,比如登陆天数
  2. 大促期间,打卡统计并参与活动,比如每一天的是否打卡,用bitmap中的1位表示

Hash使用场景

hash在代码中被频繁使用,基于redis的hash结构也同样被大量使用,可以将redis看作为项目中的全局变量,因此在涉及到交互的场景中,可以用redis的hash存储缓存数据,比如电商场景中的购物车,或者是游戏场景中的玩家属性。

(1)实现用户购物车功能

hset card:10001 10088 1    --添加商品
hincrby card:1001 10088 1  --增加数量
hlen card:1001            --商品总数
hdel card:1001 10088      --删除商品
hgetall card:1001          --获取所有商品

缺点:
a: 过期功能不能在field上,只能在key上。
b: redis集群架构下不适合大规模使用。
c:使用hash要避免出现bigkey。

list使用场景

list的底层是双向链表,基于我们平时都list理解,很容易想到基于list可以构建其他几个常见的结构:stack、queue等,有了这些数据结构,可以方便的解决一些典型的问题,比如:排队系统、消息流等。

(1)基于list实现常用的数据结构,可用于排队系统。
Stack = LPUSH+ LPOP -> FILO
Queue = LPUSH + RPOP
Blocking MQ = LPUSH + BRPOP

(2)微信和微博公众号的消息流: pull和push模型

a:将公众号的消息内容以list的形式存在redis中,可以快速的访问。
b:实现过程:Mac发布微博,消息为10018

LPUSH msg:{id-监听} 10018
LRANGE msg:{id-监听} 0 4

如果粉丝数少可以用push方式,粉丝数多的时候可以主动获取。

set使用场景

set是一个无序集合,在互联网中也被大量使用,比如:抽奖集合、点赞集合等。
(1)微信抽奖小程序
a:点击参与到抽奖集合

SADD key {userId}

b:查看抽奖的所有用户

SMEMBERS key

c:抽取count名中奖者

SRANDMEMBER key [count] --不会删除
SPOP key [count] --会删除

(2)微信微博的点赞,收藏,标签
a:点赞

SADD like:{消息id} {用户id}

b:取消点赞

SREM like:{消息id} {用户id}

c:检查用户是否点过赞

SISMEMBER like:{消息id} {用户id}

d:获取点赞的用户列表

SMEMBERS like:{消息id}

e:获取点赞用户数

SCARD like:{消息id}

(3)集合间操作
命令简单介绍:

SINTER set1 set2 set3   -> {c} 取集合1,2,3的交集。
SUNION set1 set2 set3  -> {a,b,c,d} 取集合1,2,3的交集
SDIFF set1 set2 set3    -> {a} 在集合1中且不再集合2,3中

集合操作的使用场景广泛,比如社交系统中可能认识的人,电商中可能感兴趣的商品。

Zset使用场景

ZSet是一个有序的集合,典型的使用场景是排行榜。

(1)ZSet实现排行榜
a:点击新闻

ZINCRBY hotNews:20240131 1  --守护hokon

b:展示当前排行榜前十

ZREVRANGE hotNews:20210215 0 9 WITHSCORES

c:七日搜索榜单

ZUNIONSTORE hotNews:20210215-20210221 7 hotNews:20210215 hotNews:20210216 ... hotNews:20210221

d:展示七日排行前十

ZREVRANGE hotNews:20210215-20210221 0 9 WITHSCORES

你可能感兴趣的:(redis,redis,数据结构,数据库)