一、String
SET key value
GET KEY
分布式锁:
SETNX product:1001 true
SETNX product:1001 true.
DEL product:1001
SET product:1001 true ex 10 nx //防止程序意外终止导致死锁
应用场景:统计网站读取次数,统计成功率和失败率
incr ysy 每次递增1个
大数据量场景下,可以先内存++,到了1000再去操作增加redis;
二、Hash
优点:1)同类数据归类整合存储,方便数据管理;
2)相比string操作消耗内存和cpu更小;
3)相比string存储更节省空间;
缺点:1)过期功能不能使用在field上,只能用在key上;
2)redis集群架构下不适合大规模使用;
hset cart:1001 1088 1
hincrby cart:1001 1088 1
127.0.0.1:6379> hset cart:1001 1088 1
(integer) 1
127.0.0.1:6379> hincrby cart:1001 1088 1
(integer) 2
127.0.0.1:6379> hincrby cart:1001 1089 1
(integer) 1
127.0.0.1:6379> hincrby cart:1001 1090 1
(integer) 1
127.0.0.1:6379> hgetall cart:1001
1) "1088"
2) "2"
3) "1089"
4) "1"
5) "1090"
6) "1"
127.0.0.1:6379> hdel cart:1001 1088
(integer) 1
127.0.0.1:6379> hgetall cart:1001
1) "1089"
2) "1"
3) "1090"
4) "1"
注意避免big—key的场景
应用场景:电商购物车
优点:
1)同类数据归类整合存储,
2)相比string消耗内存和cpu更低
缺点:
1)过期功能不能使用在filed上,只能用在key上
2)Redis集群架构下,不适合大规模哦使用
三、list
lrange key start stop: 从指定位置那一定范围内的数据
实现栈的结构:lpush和lpop
队列: lpush rpop
阻塞队列:lpush brpop
lrange:返回列表key中指定区间内的元素,去见以偏移量start和stop指定。
场景:
微博和微信公众号消息流
四、set
sadd: 添加集合成员
SMEMBERS: 查看所有的成员
SRANDMEMBER: 从集合中随机取出一个数据,支持重复中奖
SPOP: 从集合中随机取出一个数据,不支持重复中奖
SREM: 从集合中删除数据
127.0.0.1:6379> sadd act:1010 1
(integer) 1
127.0.0.1:6379> sadd act:1010 2
(integer) 1
127.0.0.1:6379> sadd act:1010 3
(integer) 1
127.0.0.1:6379> sadd act:1010 4
(integer) 1
127.0.0.1:6379> sadd act:1010 5
(integer) 1
127.0.0.1:6379> sadd act:1010 6
(integer) 1
127.0.0.1:6379> SMEMBERS
(error) ERR wrong number of arguments for 'smembers' command
127.0.0.1:6379> SMEMBERS act:1010
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
127.0.0.1:6379> SPOP act:1010 3
1) "6"
2) "2"
3) "3"
场景:微信抽奖,微信微博点赞,收藏,标签
参与抽奖: sadd
抽奖:SRANDMEMBER或者SPOP
集合操作
sinter:交集
sunion:并集
sdiff:差集
集合操作实现微博微信关注模型,redis可以实现复杂的关系模型,数据库实现难度很大
1)ysy关注的人
ysyset——{ysy1,ysy2,qyh}
2)qyh关注的人
qyhset——{ysy,ysy1,ysy2,ysy3,ysy4}
3)zs关注的人
zsset——{ysy,qyh,qyh1,qyh2,ysy1,ysy3}
ysy和qyh共同关注的人:
sinter ysyset qyhset
ysy关注的人,也关注了qyh
sismember zsset qyh
ysy可能认识的人:
sdiff ysyset qyhset
五、zset
使用场景
zset集合操作实现排行榜
1)点击新闻
zincrby hotnews:20201110 1 守护中国
2)展示当日前十排行
zrevrange hotnews:20201110 0 9 withscores
3)七日搜索排行榜
zunionstore hotnews:20201110-hotnews:20201116 7
4)展示七日排行前十
zrevrange hotnews:20201110-20201118 0 9 withscores
redis单线程的概念
redis针对客户端发起的操作,是单线程的;持久化、异步删除、集群数据同步由客户端额外的线程处理
可以执行redis-benchmark命令进行压力测试
./redis-benchmark get
====== get ======
100000 requests completed in 2.00 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.99% <= 1 milliseconds
100.00% <= 1 milliseconds
50100.20 requests per second
info命令
查看redis运行信息,分为9块。
遍历命令
keys
尽量少用,遇到bigkey容容易造成阻塞;
scan
SCAN cursor 【MATCH pattern】 【COUNTcount】
scan 0 match key99* count 1000