大家现在估计都在项目中或多或少的使用redis,这篇文章主要叙述它主要的数据结构。
redis的存储数据结构大致分为5种:
1.String
set k1 jsonc ---------->get k1
append k1 abc 追加
mset k2 a k3 a 批量操作
getset k2 c 对c 重新赋值并返回旧值
setex k3 2 k3 设置值 并且2s中后过期
setnx k4 k4 如果没有k4 则设置成功,返回1,若有则设置不成功
strlen k4 返回k4的string类型value的长度
incr k 对k 每次增加一
decr k 每次减一
incrby key increment 将key所储存的值加上increment
decrby key decrement 将key所储存的值减去decremen
通过以上列举3个使用场景:
单值缓存:set k1 value
get key
对象缓存:
set user value(json格式数据)
mset user:name cgm user:age 18 user:tel 10086
mget user:name user:age user:tel
分布式锁:
setnx key value 如果key不存在则成功,反之不成功
。。。。业务逻辑
del key 使用完释放锁
set key key ex 10 nx 解决上述的锁在异常情况的死锁问题
网页浏览次数、文章点击量:
set www 0
incr www 每次浏览加1
get www
web集群session共享
spring session +redis 实现
2.Hash
hset k f v 设置k 中f字段的值为v
hsetnx k f v 在不存在时设置成功
hmset k f1 v1 f2 v2 ...批量设置
hget k f 获取f的值
hmget k f1 f2 ...批量获取
hdel k f 删除字段f
hlen k k中字段的个数
hgetall key 获取全部键值对
hincrby k f 1 对f字段加1
使用场景
对象缓存:
hmset user name cgm age 18
hmget user nage age
微博用户的信息、帖子信息
购物车:
用户id为key
商品id为f
数量为v
添加商品:hset 100car 1000 1
增加商品数量: hincrby 100car 1000 1
商品总数: hlen 100car
删除商品:hlen 100car 1000
获取购物车所有商品:hgetall 100car
3.List
放入是有顺序的
lpush key value ... 从左边插入值
rpush key value ... 从右边插入值
lpop key 从左边删除一个值,并返回
rpop key 从右边删除一个值,并返回
lrang key start stop 返回key中指定区间的元素
blpop key ... timeout 从左边弹出元素,阻塞等待timeout秒,若timeout 为0 ,则一直阻塞
brpop key ... timeout
使用场景
栈: lpush +lpop / rpush+rpop
队列: rpush+lpop /lpush+rpop
阻塞队列:lpush+brpop
数据列表的分页展示,使用lrang k start stop 分页加载
4.set
无重复
常用操作
sadd key m1 m2... 往集合中添加元素
srem key m1 m2 ... 从集合中删除元素
smembers key 集合中所有元素
scard key 集合中元素的个数
sismember key m 判断m是否在集合key中
srandmember key count 从集合中随机选出count个元素,元素不从key中删除
spop key count 从集合中移除count个元素,元素从key中删除
运算操作
sinter k1 k2... 交集运算
sinterstore destination k1 k2... 将交集运算存入新集合distination中
sunion k1 k2 ...并集运算
sunionstore destination k1 k2 .. 将并集运算存入新集合distination中
sdiff k1 k2 ... 差集运算
sdiffstore destination k1 k2... 将差集运算结果存放disination中
....
使用场景
微博帖子点赞数、评论数:
sadd articleId userId
scard articleId
hmset articleId likeNums 0 reviewNums 0
hincrby articleId likeNums 1
hincrby articleId reviewNums 1
微博帖子点赞用户Id列表、评论Id列表:
sadd articleId userId
smermbers articleId
取消点赞:
srem articleId userId
zset
zadd key soure m1 soure m2 ... 往有序集合key 中加入元素 ,会使用soure排序
zrem key m1 m2... 从有序集合key中删除元素
zsoure key m1 返回有序集合key中m1的分值
zincrby key increment m1 为有序集合key中元素m1增加increment
zcard key 返回key中元素个数
zrange key start stop withscores 正序有范围的获取集合key中的元素
zrevrange key start stop withscores 倒序有范围的获取集合key中的元素
运算操作
zunionstore dest numkeys k1 k2 并集运算
zinterstore dest numkeys k1 k2 交集运算
使用场景
微博排行榜
点击新闻 :zincrby 20200101 1 bci
展示当日排行前十: zrevrange 20200101 0 9 withscores
七日榜单:zunionstore 20200101-20200107 7 20200101....20200107
展示七日排行前十:zrevrange 20200101-20200107 0 9 withscoures
....
更多的命令以及学习资料都在redis.cn中文网站,很详细。