redis十大数据类型
目录
redis十大数据类型
redis键key
数据类型命令
redis字符串string
分布式锁
编辑
编辑编辑应用场景
编辑编辑
reids列表list
应用场景
redis哈希hash
应用场景
redis集合set
应用场景
redis有序集合zset(sorted set集合)
应用场景
redis位图bitmap
应用场景
redis基数统计hyperloglog
应用场景
redis地理空间geo
redis流stream
redis位域bitfield
redis键key
redis的底层是由c语言来实现的 所以在判断某个key是否存在的时候 1为true 0为false 如果一下exista k1 k2 返回的是存在几个
del key删除指定的key数据是直接删除的他是原子的 但是unlink key的话是非阻塞删除 他是在后续的异步操作中完成的 因为当删除的数据是一个大key 会导致线程阻塞 所以要把它放到后续异步去完成
一个redis默认有的是16个库 0-15 默认是在0号库
先set一个k1 然后将list移动到三号库 查询键的话只剩下k1 这里默认查询的是0号库
切换为三号库 list就能查到了
命令不区分大小写 而key是区分大小写的
help @是永远的帮助命令
数据类型命令
官网命令查询步骤
第四步点击set
redis字符串string
get的话会先返回原先的值 但是也是做了修改 再进行get的时候就返回已经修改的值
ttl是返回过期时间
先设置一个过期时间 但是中途修改了key值 他的过期时间就会变为-1永不过期 这个时候就需要
keepttl就可以保留原有设置的过期时间
msetnx是键不存在的时候批量设置键值
msetnx设置了 k1 k4 k1已经存在 k4不存在 他设置的时候是把他们看成了整体 要成功都成功 要不成功都不成功
getrange k1 0 -1 从0到-1就是全部字符串
分布式锁
比如说有三个微服务 都想要同时争夺一个资源 我们要加锁 之前的加锁是sync/lock/unlock 但是这三个是针对于一个jvm的 他是分布式的 所以我们可以定义一个redis 执行setnx lock uuid加锁 nx是当键不存在的时候才能建锁 使用完之后del lock
无独有偶 zookeeper也是一个分布式锁 只不过他提供的是节点 redis是key value键值对
这个命令将set和expire结合起来了
应用场景
reids列表list
可以把它看成是一个长筒 从左边push的话就是把一往中间推 最后从左到右就是5432
从右push的话就是 把11往中间推 那最后就是11 22 33 44 55 这就是lrange从左到右遍历的顺序
用图表示的话就是这个样子
应用场景
redis哈希hash
全部罗列key和全部罗列value
应用场景
新增商品 → hset shopcar:uid1024 334488 1
新增商品 → hset shopcar:uid1024 334477 1
增加商品数量 → hincrby shopcar:uid1024 334477 1
商品总数 → hlen shopcar:uid1024
全部选择 → hgetall shopcar:uid1024
redis集合set
list是有序有重复 set是无序无重复
set是单值多value 且无重复
应用场景
首先可以是共同好友 比如A的好友是abc12 B的好友是123ax 可以使用sinter key返回合集
sintercard返回共同好友数量
抽奖系统的话可以使用spop 或者srandmembre 来进行返回
qq内推可能认识的人
redis有序集合zset(sorted set集合)
如果要做一个排行榜的功能 要用到这些
应用场景
根据商品的销售对商品进行排序
思路:定义商品销售排行榜(sorted set集合),key为goods:sellsort,分数为商品销售数量。
redis位图bitmap
由0和1状态表现的二进制位的bit数组
比如说签到七天 mysql需要七条语句 而使用bitmap只需要一个字节就ok
strlen统计字节数占用多少 这个八个为一个字节 0-7为一组 第八个就重新开了一个字节 所以下面的代码就使用了2个字节
应用场景
打卡打卡了几天
46个
redis基数统计hyperloglog
hyperloglog可能会有误差 但可以接收
添加的元素可能是用户编号 也可能是用户ip 大规模的统计使用的是ip
获取不到其中的元素
pfmerge是将hll01和02 元素进行混合
应用场景
redis地理空间geo
在查询的时候出现乱码问题的话
由于经纬度都是小数 来回使用的时候很容易有经纬度问题 所以把它转为hash
redis流stream
redis -stream就是redis版本的mq 消息中间件
redis流就是redis版的消息中间件MQ+阻塞式队列 将list实现消息队列和pub,sub结合并加入了一些新特性
生成的那个玩意就是消息id 前面是时间戳 后面是该毫秒产生的第几条消息 从0开始计数
生成的毫秒数是越来越大的正好对应了id越来越大
第一步消费者先进行监听
第二步新开一个客户端
第三步生产者 新增数据
消费者直接就能接收到消息 32.99是消费者等待的时间
stream的xadd相当于list结构的lpush xread相当于rpop
消费者的相关指令
大括号里面的count其实可以指定每个消费组读取的条数 从而实现负载均衡 如果不写count 的话默认是把数据一下全部读完
重点问题