redis一些常用场景记录

Redis基本类型有5种,分别是:string、hash、list、set、zset

hash类型的应用场景

购物车的商品添加,数量增减

实现原理:

1、初次选择商品到购物车

此处设计为: hset 购物车标识:用户ID:数据类型 商品ID 数量
hset car:10000:hash 1000 1
hmset car:10000:hash 1000 1 1001 2

2、对已经选择的商品进行数量上的添加
hincrby car:10000:hash 1000 5 

3、移除已经选择的商品
hdel car:10000:hash 1001 

4、查看已经选择的商品数量
hlen car:10000:hash 
 

list类型的应用场景

涉及命令解析

往列表头部添加数据: 
lpush key value [value...]

往列表尾部添加数据:
rpush key value [value...]

取出头部数据并移除
lpop key

取出尾部数据并移除
rpop key

取出一段区间的数据
lrange key start stop

可以模拟场景 - 常用的数据结构

Stack (栈) = lpush + lpop -> FILO
Queue(队列) = lpush + rpop
Blocking MQ(阻塞队列) = LPUSH + BRPOP

应用场景: 查看最新的微博信息

用户1关注了用户2
1、用户2发表信息, 信息ID为1
lpush msg:user1 1

2、用户2发表信息, 信息ID为2
lpush msg:user1 2

3、查看最新微博信息
lrange msg:user1 0 5

set应用场景

微信抽奖小程序

1、添加所有参与抽奖的用户ID
127.0.0.1:6379> sadd random:userid 1 2 3 4 5
(integer) 5

2、查看所有抽奖用户列表
127.0.0.1:6379> smembers random:userid
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

3、从所有用户中抽取两个中奖用户
127.0.0.1:6379> srandmember random:userid 2
1) "3"
2) "5"
127.0.0.1:6379> 

zset的应用场景

排行榜的实现

1、点击新闻
127.0.0.1:6379> zincrby hotNews:20200303:zset 1 中国加油 
"1"
127.0.0.1:6379> zincrby hotNews:20200303:zset 1000 战胜疾病
"1000"
127.0.0.1:6379> zincrby hotNews:20200303:zset 1000 战胜疾病2
"1000"

2、展示当日排行榜前十
127.0.0.1:6379> zrevrange hotNews:20200303:zset 0 9 withscores
1) "\xe6\x88\x98\xe8\x83\x9c\xe7\x96\xbe\xe7\x97\x852"
2) "1000"
3) "\xe6\x88\x98\xe8\x83\x9c\xe7\x96\xbe\xe7\x97\x85"
4) "1000"
5) "\xe4\xb8\xad\xe5\x9b\xbd\xe5\x8a\xa0\xe6\xb2\xb9"
6) "1"


3、3日结果榜单计算
添加3日相同榜单
127.0.0.1:6379> zincrby hotNews:20200303:zset 10 test
"10"
127.0.0.1:6379> zincrby hotNews:20200302:zset 10 test
"10"
127.0.0.1:6379> zincrby hotNews:20200301:zset 10 test
"10"
使用交并集实现数据的累计计算
ZUNIONSTORE hotNews:20200301-20200303:zset 3 hotNews:20200301:zset hotNews:20200302:zset hotNews:20200303:zset
(integer) 4

4、展示三日内计算的结果榜单
127.0.0.1:6379> zrevrange hotNews:20200301-20200303:zset 0 3 withscores
1) "\xe6\x88\x98\xe8\x83\x9c\xe7\x96\xbe\xe7\x97\x852"
2) "1000"
3) "\xe6\x88\x98\xe8\x83\x9c\xe7\x96\xbe\xe7\x97\x85"
4) "1000"
5) "test"
6) "30"
7) "\xe4\xb8\xad\xe5\x9b\xbd\xe5\x8a\xa0\xe6\xb2\xb9"
8) "1"

### Redis 常用数据结构及其应用场景 #### 字符串(String) 字符串是最基本的数据类型,不仅键本身是字符串形式,其他复杂数据结构也建立在其之上。这种类型的值可以容纳多种形式的内容,比如简单字符串、JSON 或 XML 这样的复杂字符串、数值以及二进制对象,不过单个值大小被限制在512MB以内[^4]。 对于计数需求而言,`INCRBY`等命令提供了原子性的增量操作功能,使得Redis成为理想的计数器解决方案之一。通过组合使用`INCR`和`EXPIRE`指令能够轻松实现带有时效性的计数逻辑,例如记录某段时间内的访问次数[^3]。 ```python # Python伪代码展示如何利用Redis作为计数器 import redis r = redis.Redis(host='localhost', port=6379, db=0) user_id = "user:1" r.incr(user_id) # 对指定用户的计数加一 r.expire(user_id, 60) # 设置该计数在一分钟后自动清除 ``` #### 列表(List) 列表允许存储一系列按顺序排列的元素,并支持两端高效插入/删除操作。适用于诸如消息队列这样的场景,其中生产者可以在一侧添加项目而消费者则从另一侧移除处理过的条目[^2]。 ```bash LPUSH mylist "item1" # 向左端压入新项 RPUSH mylist "item2" # 向右端追加新项 LPOP mylist # 移除并返回左侧第一个元素 RPOP mylist # 移除并返回右侧最后一个元素 ``` #### 集合(Set) 集合用于保存不重复成员组成的无序集合体。当涉及到去重问题时非常有用;另外还可以执行交集、并集运算来找出共同点或合并多个源中的唯一项[^5]。 ```bash SADD setA "apple" # 添加到setA中 SADD setB "banana" # 添加到setB中 SUNION store setC setA setB # 计算两个集合的并集并将结果存入第三个集合 ``` #### 哈希(Hash) 哈希映射适合表示具有字段-值关系的对象模型。每个散列表都由若干个field-value对构成,非常适合模拟实体属性或是缓存关联型数据。 ```json HSET user:alice name Alice age 28 city Beijing // 创建了一个名为'user:alice' 的hash,包含了三个字段(name,age,city),对应相应的值(Alice,28,Beijing) ``` #### 有序集合(Sorted Set) 除了保持内部元素互异外,还额外维护着一个分数域以便按照一定规则排序输出。典型应用包括排行榜系统、优先级调度机制等等。 ```bash ZADD leaderboard 100 player1 # 给player1分配得分为100分加入leaderboard ZADD leaderboard 200 player2 # 给player2分配得分为200分加入leaderboard ZRANGE leaderboard 0 -1 WITHSCORES # 获取全部玩家排名连同他们的得分情况 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值