redis 传统 5 大数据类型的运用
redis 传统 5 大数据类型的落地应用
Redis 介绍:
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)] 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel) 和自动 分区(Cluster)提供高可用性(high availability)。【相关推荐:Redis视频教程】
redis 命令查询:http://www.redis.cn/commands.html
备注:redis 命令不区分大小写,而 key 是区分大小写的
查询命令帮助:
help @类型名词
示例:
string 字符串类型
最常用
set key vuue
getkey
同时设置/获取多个键值
MSET key value [key value ...]
MGET key [key ,,,]
数值增减
递增数字 incr key
增加指定的整数 incrby key increment
递减数值 decr key
减少指定的整数 decrby key decrement
获取字符长度
STRLEN key
分布式锁
setnx key value
set key value [EX seconds] [PX milliseconds] [NX|XX]
- EX: key 在多少秒后过期
- PX: key自多少毫秒后过期
- NX: 当key 不存在的时候,才创建 key. 效果等同于 setnx
- XX: 当 key 存在的时候,覆盖 key
运用场景
- 商品编号、订单号采用 INCR 命令生成
- 是否喜欢文章点赞
阅读数:只要点击了 rest 地址,直接使用 incr key 命令增加一个数字 1,完成记录数字。
命令实践
hash 哈希类型
和 Java 数据结构映射
Map<Stirng, Map<Object, Object>>
一次设置一个字段值
HSET key field value
一次获取一个字段值
HGET key field
一次设置多个字段值
HMSET key field value [fild value ...]
一次获取多个字段值
HMGET key field [field ...]
获取所有字段值
hgetall key
获取某个 key 内的全部数量
hlen
删除一个 key
hdel
命令演示
应用场景
购物车的早期,当前中小厂可以使用
新增商品 --> hset shopcar:uid1024 334488 1
新增商品 --> hset shopcar:uid2014 334477 1
增加商品数量 --> hincrby shopcar:uid1024 334477 1
商品总数 --> hlen shopcar:uid1024
全部选择 --> hgetall shopcar:uid1024
list 列表类型
向列表左边添加元素
lpush key value [value ...]
向列表右边添加元素
rpush key value [value ...]
查看列表
lrange key start stop
获取列表中元素的个数
llen key
命令使用
应用场景
微信文章订阅公众号
1、【xx宝】和 【xx报】发布了文章分别是 11 和 22
2、 作者关注了他们两个,只要他们发布了新的文章,就会推送到我的 list
lpush likearticle: uid1024 11 22
3、查看作者自己的订阅号的全部文章,类似分页,下面 0-10 就是 一次显示 10 条 lrange likearticle:uid1024 0 10
set 不重复列表类型
添加元素
sadd key member [member ...]
删除元素
srem key member [member ...]
获取集合的所有元素
smembers key
判断元素是否在集合中
sismember key member
获取集合中的元素个数
scard key
从集合中随机弹出一个元素, 元素不删除
srandmember key [数字]
从集合中随机弹出一个元素,出一个删一个
spop key [数字]
集合运算
集合的差集运算 A - B
属于 A 但不属于 B 的元素构造成的集合
sdiff key [key ...]
集合的交集元算 A ^ B
属于 A 同时也属于 B 共同拥有的元素
simter key [key ...]
集合的并集运算 A v B
属于 A 或者属于 B 的元素合并后的集合
sunion key [key ...]
运用场景
微信抽奖小程序
1、用户 id, 立即参与, sadd key 用户id
2、显示已经有多少人参与了当前有 67231 人参与, scard key
3、抽奖(从 set 中任意选取 N 个中奖人)
srandmember key 2 随机抽奖 2 个人, 元素不会删除
spop key 3 司机抽奖 3 个人, 元素会删除
微信朋友圈点赞
1、新增点赞 ; sadd pub:msgid 点赞用户id1 点赞用户id2
2、取消点赞;srem pub:msgid 点赞用户id
3、展示所有点过赞的用户 smembers pub:msgid
4、点赞用户数统计,就是常见的待点赞的红色数数字 scard pub:msgid
5、判断某个朋友是否对楼主点过赞, sismember pub:msgid 用户id
微博好友关注社交关系
共同关注的人
sadd s1 1 2 3 4
sadd s2 2 3 6 8
sinter s1 s2
共同关注:我去某人的微博,马上获取和某人共同关注的人
我关注的人, 也关注了他(大家爱好相同)
我关注了华为余承东, 余承东也关注了张召动, 我和余总有共同的爱好
sadd s1 1 2 3 4 5
sadd s2 3 4 5 6 7
sismember s1 3
sismember s2 3
QQ内推可能认识的人
sadd s1 1 2 3 4 5
sadd s2 3 4 5 6 7
// 共同好友
sinter s1 s2
// 差集
sdiff s1 s2
sdiff s2 s1
zset 有序集合
常用命令
1、 向有序集合中添加一个元素和该元素的分数
2、 添加元素
- ZADD key score member [score member ...]
3、 按照元素分数从小到达的顺序返回索引从 strat 到 stop 之间的所有元素
- zrange key start stop [WITHSORES]
4、获取元素的分数
- zscore key member [member ...]
5、删除元素
- zrem key member [member ...]
6、 获取指定分数范围的元素
- zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
7、增加某个元素的分数
- zincrby key increment member
8、 获取集合中元素的数量
- zcard key
9、获得指定分数范围内的元素个数
- zcount key min max
10、按照排名范围删除元素
- zremrangebyrank key start stop
11、获取元素的排名
从小到大 zrank key member
从大到小 zrevrank key member
应用场景
1、更具商品销售对商品进行排序显示
思路:定义商品销售排行榜(sorted set 集合),key 为 goods:sellsort, 分数为商品销售数量。
商品编号 1001 的销量是 9 , 商品编号 1002 的销量是 15 | zadd goods:sellsort 9 1001 15 1002
有一个顾客又买了 2 件商品 1001 , 商品编号是 1001 响亮增加 2 | zincrby goods:sellsort 2 10001
求商品销量前 10 名 zrange goods:sellsort 0 10 withscores
2、 抖音热搜
1、点击视频
ZINCRBY hotavi:20220203 1 八百
ZINCRBY hotavi:20220203 15 八百 2 花木兰
2、展示当日排行前 10 条
zrevrange hotavi:20220203 0 9 withscores
更多编程相关知识,请访问:编程入门!!
以上就是通过命令和运用场景,带你了解Redis中的五大基础类型的详细内容,转载自php中文网
发表评论 取消回复