Redis常用数据结构及使用场景

Redis

一:Redis常用数据结构

1:String - 字符串

1.1 数据结构
	Key-Value
1.2 常用命令
字符串常用操作
1:SET KEY VALUE   // 存入字符串键值对 eg: SET name zhansan
2:GET KEY  // 获取一个字符串键值  eg: GET name
3::MSET KEY VALUE  [KEY VALUE]   //批量存储字符串键值  eg: MSET user:2:name zhansan user:2:age 20
4: MGET KEY [KEY]   //批量获取字符串键值  eg: Mget user:1:name user:1:age
5:SETNX KEY VALUE  //存入一个不存在的字符串键值 
6:DEL KEY [KEY]   //删除一个健  eg: del name 
7:EXPIRE KEY SECONDS  //设置一个健的过期时间  eg: expire name 3
原子加减
1:INCR KEY  //将KEY中储存的数字值加1 eg:  incr age 1
2:DECR KEY  //将KEY中储存的数字值减1 eg: decr age 1
3:INCRBY KEY INCREMENT  //将KEY中储存的数字值加  eg: incrby  ment 100
4:DECRTY KEY INCREMENT  //将KEY 中储存的数字值减  eg:  decrby  ment 50

2:Hash - 哈希

2.1 数据结构
	Key filed1 value1 [ field value2]
2.2 常用命令
1:HSET KEY FIELD VALUE   //存储一个hash表的key的键值  eg:hset  product apple 10
2: HGET KEY FIELD 	//获取一个hash表key对应的field值  eg:hget product apple
3:HMSET KEY FIELD VALUE [FIELD VALUE	] //批量存储多个key的键值 eg: hmset product xihongshi 20 xigua 330
4::HMGET KEY FIELD [FIELD]	 //批量存储多个key的键值 eg: hmget product xihongshi  xigua
5: HSETNX KEY FIELD VALUE //	存储一个不存在的哈希表KEY 的键值 eg: hsetnx order zhansan 10
6:HDEL KEY FIELD [FIELD] //	删除hash表对应key的field键值 eg: hdel order zhansan
7:HLEN KEY //	返回hash 表key中的field 的数量  eg: hlen product
8:HGETALL KEY //	返回hash表中所有的键值   eg:hgetall product 
9:HINCRBY KEY FIELD INCREMENT 	//为hash表key中的field键的值加上增量increment  eg:hincrby product xihongshi 30

3:List - 列表

3.1 数据结构
	Key-Value [value value]
3.2 常用命令
1:LPUSH KEY VALUE [VALUE...]    // 将一个或多个值插入到key列表的左边  eg:lpush age 10
2:LPOP KEY   //移除并返回key列表最左边的元素  eg: lpop age
3: RPUSH KEY VALUE [VALUE...] // 将一个或多个值插入到key列表的右边 eg:rpush age 23
4: RPOP KEY  // 移除并返回key列表最右边的元素 eg:rpop age
5: LRANGE KEY STAT STOP  // 返回列表中指定区间的元素  eg:lrage age 0 10
6: BLPOP KEY [KEY] TIMEOUT  // 从key列表左边弹出一个元素,若该列表中没有元素,阻塞等待timeout秒,若timeour等于0,则一直阻塞等待 eg: blpop agee 0
7: BRPOP KEY [KEY] TIMEOUT  //从key列表中右边弹出一个元素,若该列表中没有元素,阻塞等待timeou秒,若timeour等于0,则一直阻塞等待 brpop agee 0

4:Set - 集合

4.1 数据结构
	Key-member [member...]
4.2 常用命令
set常用操作
1:SADD KEY MEMBER [MEMBER]  // 往集合key中存入元素,若元素存在则忽略,若key不存在则新建  eg: sadd people zhansan lisi    sadd city shanghai shenzheng chendu    sadd addr gansu guangdong zhaoqing
2:SREN KEY MEMBER [MEMBER]  //从集合key中删除元素   eg: srem people zhansan
3:SMEMBERS KEY  // 获取集合中的所有元素  eg: smembers people
4:SCARD KEY  // 获取集合key中元素的个数   eg: scard people
5:SISMEMBER KEY MEMBER // 判断members元素是否存在于集合key中  eg: sismember people wangwu  返回1表示存在、返回0表示不存在
6:SRANDMEMBER KEY [COUNT] // 从集合key中选出count个元素、元素不从key中删除   eg: srandmember people 1
7:SPOP KEY [COUNT]  // 从集合key中选出count个元素,元素从key中删除  spop people 1
set 运算操作
1:SINTER KEY [KEY...]  //交集运算   eg:sinter people city
2:SINTERSTOR DESTINATION KEY [KEY]  // 将交集结果存入新集合destination中  eg: sinterstore age people city
3:SUNION KEY [KEY]  // 并集运算   eg: sunion people city
4: SUNIONSTORE DESTINATION KEY [KEY ] //将并集结果存入新集合destination中  eg: sunion  name people city
5:SDIFF KEY [KEY] // 差集运算  eg: sdiff people city
6:SDIFFSTORE DESTINATION KEY [KEY]  //将差集结果存入新集合destination中  eg:sdiffstore fangzi people city

5:Zset(sorter set)- 有序集合

5.1 数据结构
	Key-Valu
5.2 常用命令
1:ZADD key score1 member1 [score2 member2]  //向有序集合添加一个或多个成员,或者更新已存在成员的分数  eg: zadd hotnewwanggang 1  "守护香港"  2  " 智慧养老"  7  "天下无敌"  4  “陆嘉怡”
2:ZCARD key //获取有序集合的成员数  
3:ZINCRBY key increment member //有序集合中对指定成员的分数加上增量 increment  eg:zincrby hotnew:0823 1 守护香港
4:ZREVRANGE key start stop [WITHSCORES]  //返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序  eg: zrevrange hotnewwanggang 0 2
5:ZUNIONSTORE destination numkeys key [key ...]  计算给定的一个或多个有序集的并集,并存储在新的 key 中

二:Redis数据机构使用场景

1:字符串使用场景

1.1 :单值存储
set name zhangsan
set user:3 (name:zhansan age:20)----
get name
1.2:对象存储
mset user:1:name zhansan user:1:age 20 user:1:pwd 40
mget user:1:name user:1:age user:1:pwd
mset name zhang  age 20 pwd 123
mget name age pwd
1.3:分布式锁
setnx product:10001:name apple  返回1 代表获取锁成功、返回0 代表获取锁失败
--- 执行业务操作---
del prodcut:1003
set pruduct:1001 true ex 10 nx
1.4:计数器
incr article:readcount:1001  统计文章阅读数
get article:readcount:1001  获取文章阅读数
1.5:web集群session共享
web session+redis 实现集群共享    实现web集群下session共享问题
1.6:分布式系统全局序列号
incrby id 10 批量生成序列号用以提升性能

2:字符串使用场景

2.1 :电商购物车
以用户id为key 
商品id为field
商品数量为value
购物车相关操作
1:添加商品  hset wanggang juzi 10
2: 增加数量 hincrby wanggang juzi 1
3: 商品总数 hlen wanggang
4: 删除商品  hdel wanggang juzi
5: 获取购物车所有商品  hgetall wanggang 

3:List使用场景

3.1 :常用数据结构
Stack(栈) = LPUSH + LPOP  --FILO  先进后出
Queue(队列) = LPUSH _RPIP  --FIFO  先进先出
Blocking MQ(阻塞队列) = LPUSH+ BRPOP 
3.2: 微博消息和公众号消息
zhangsan 关注了 lisi、wangwu等
1:lisi 发微博
  lpush msg:zhansan 1001  --1001为消息id
2: wangwu发微博
 lpush msg:zhansan 1002
3:查看最新微博消息
lrange msg:zhangsan 0 5

4:Set使用场景

4.1 :微博微信关注模型
1:zhangsan关注的人
zhangsanSet -->  sadd zhansan a  b c
2:lisi关注的人
lisiSet -->  sadd lisi b c d
3:wangwu关注的人
wangwuSet-->   sadd wangwu c d e
4:zhansan和lisi共同关注的人
sinter zhangsan lisi
5:zhangsan关注的人也关注zhaoliu
sismember lisi zhaoliu
sismember wangwu zhaoliu
6:zhansan可能认识的人
sdiff lisi wangwu
4.2: 微信抽奖小程序
1:点击参与抽奖加入集合
sadd choujiang zhansan
2:查看参与抽奖的用户
smember choujiang
3:抽取count名中奖者
srandmember choujiang count /spop choujiang count
4.3: 微信微博点赞、收藏、标签
1:点赞
sadd like:消息id  zhansan 用户id
2:取消点赞
srem like zhansan 
3:检查用户是否点过赞
sismember like zhansan
4:获取点赞的用户列表
smember like
5:获取点赞用户数
scard like
4.4: 实现电商商品筛选

5:Zset使用场景

5.1 :实现排行榜
1:点击新闻
incrby hotnew:0823 1 守护香港
2:展示当日排行榜前10
zrevrange hotnewwanggang 0 10
3:七日搜索榜单计算
zunionstore hotnews0809 7  hounews0807 hotnews0803
4:展示七日排行榜前10
zrevrange hotnews0809 0 10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

班婕妤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值