redis五种数据类型和应用场景
1.String 类型
常用的格式以key、value格式存储
常用的场景对象JSON缓存、以及对象缓存、分布式锁,计数器
SET KEY VALUE 存入字符串的键值对
MSET key value [key value …]批量存储字符串键值对
SETNX key value 存入一个不存在的键值对,如果key已存在则无效。插入成功返回1,失败返回0 可以用于分布式锁。
GET key 根据key字符串value
MGET key 批量字符串
EXPIRE key seconds设置key的过期时间。
INCR key 值自增 + 1
DECR key 值自增 – 1
INCRBY key increment 值 + increment
DECRBY key decrement 值 – increment
2.Hash
以key filed value的方式进行存储,但是比String类型效率高 存储空间少,优点是可以分类存储,如下图所示,将User分类的数据根据user key进行关联存储。
过期功能只能用在key上,也就是上图的user,无法用在filed上。
redis集群中不宜大规模使用,因为Hash是分片存储在一台机子上的,key只能存储在一台机器中,找数据的时候也只能在一台机器中找,别的机器没有数据,大量请求打在一台redis中,使得该机器压力变大。
HSET key filed value 存储一个hash key 字段 value
HSEXTNX key filed value [key filed value …] 批量存储hash 键 字段 值
HGET key filed 根据key和字段value
HMGET key filed value [key filed value…] 批量根据key 字段 值
HDEL key filed 根据key filed删除hash中存储的一个键值对 删除成功返回1 删除失败返回0
HGETALL key key中的所有键值
HLEN key key下所存储的键值对数量
HINCRBY key filed increment 根据key和filed找到值并 + increment
例如购物网站
添加商品时可以使用 hset cart:1001 12 1,其中1001是用户id,12为商品id,1为商品数量。
增加数量可以使用HINCRBY cart:1001 12 1,其中1001是用户id,12为商品id,1为要增加的商品数量。
删除商品可以使用HDEL cart:1001 12,删除用户id为1001购物车下的商品id为12的商品。
购物车
购物车下的所有的商品可以使用HGETALL cart:1001
3.List
可以用于组成分布式队列/栈,Java自带的集合只能满足单机,无法进行分布式多机共享。
LPUSH key value 在list左边插入一个value值
RPUSH key value 在list右边插入一个value值
LPOP key 移除左边的一个元素
RPOP 移除右边的一个元素
可以使用上面四条排列组合形成一个先进先出和先进后出的数据结构。
BLPOP key timeout 从key列表左边弹出一个元素 如果key中存储的数据为空且timeout为0则会一直阻塞,直到有数据返回为止。
BRPOP key timeout 与上面那条语句相同,不同在于这条语句是从右边取元素。
通关上面两条数据可以实现阻塞队列。
应用场景
例如微博的首页,会将的人发送的消息显示在首页中。
有两种方式可以完成这个功能:
- 当被者发送消息时,主动利用List的特性,使用LPUSH key value命令将消息发送到队列中,由用户主动从队列中拉取消息,但是这样做有个弊端,由于用户了多个用户,多个用户发送消息的时间不是一致的,导致用户拉取完消息还得需要对消息按时间排序。
- 被者发送完消息后主动将消息推送到用户的消息队列中,但是这样做也有个弊端就是如果被的人的用户过多,一个一个推送会占用资源,可以进行优化,将消息优先推送给在线用户,未在线用户可以慢慢进行推送。
4.set
无序集合,可以对Set进行并集、差集和交集操作。
SADD key memeber [member…] 在集合中添加元素
SREM key memeber 在集合移除指定元素
SMEMBERS key 清空集合中的所有元素
SCARD key 元素个数
SIMEMBER key memeber 判断元素是否在集合中,如果在集合中返回1,不在集合中返回0。
SRANDMEMBER 可以 count 从集合中选出count个元素,不从集合中删除
SPOP key 从集合中选出count个元素,元素从key中删除。
SINTER key key[key ..] 交集运算
SINTERSTORE destination key [key ..]将交集结果放入到集合destination中
SUNION key [key..] 并集运算
SUNIONSTORE destination key [key ..]将并集结果放入到destination中
SDIFF key [key ..]差集运算
SDIFFSTORE destination key 将差集结果存储到集合destination中
并集 差集 交集运算存储到集合中时,如果集合存在,则会覆盖集合中的数据
应用场景
抽奖
SADD key userID 将用户id添加到抽奖列表中
SMEMBERS key 所用抽奖的用户id列表
SRANDMEMBER key [count] / SPOP key[count] 抽取count个用户
用户点赞
SADD like:1001 lyra ts rd 给用户消息1001点赞
SREM like:1001 lyra lyra取消点赞
SISMEMBER like:1001 lyra 判断luyra是否点赞
SMEMBERS likie:1001 所有点赞的用户列表
SCARD like:1001 点赞数
模型
取交集可以共同用户列表
电商商品筛选
可以将商品根据分类存储商品信息,之后使用SINTER取交集就可以根据分类商品
5.zset
有序集合,每个 元素会关联一个score,redis通过score进行从小到大进行排序。
ZADD key score member [[score member]…] 添加带分值元素
ZREM key member [member …] 删除元素
ZSCORE key member 元素分值
ZINCRBY key increment member 元素分值 + increment数
ZCARD key 元素个数
ZRANGE key start stop [WITHSCORES] 正序有序集合从start到stop下标元素
ZREVRANGE key start stop [WITHSCORES] 倒叙有序集合从start到stop下标元素
ZUNIONSTORE destkey numkeys key [key …] 并集运算
ZINTERSTORE destkey numkeys key [key …] 交集运算
应用场景
热搜可以使用zset来实现,没点击一个新闻,分数 + 1,之后取倒序取后10个元素表示热搜数据即可
参考博客:https://www.cnblogs.com/lyraHeartstrings/p/16634601.html
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/12897.html