Redis7基础篇(一)

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 的话默认是把数据一下全部读完

重点问题

redis位域bitfield

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值