redis5大基本类型
Redis介绍:
redis worker是单线程,采用epoll多路复用技术,而不是轮询,通过事件驱动,通过内核告诉epoll,然后epoll告诉服务器,需要处理哪条路的数据,然后服务器会去访问它,取数据,减少服务器压力,最后是由服务器去访问。
select,poll,epoll的共性是告诉服务器有没有数据,和服务器去读取数据分开。
redis利用io多线程实现,worker单线程协调工作。
redis主要用途:
①缓存
②统计分析,bitmap,布隆过滤器。
注:一个client所建立的connections发送数据的顺序是有序的!,因此io读写后,放到worker工作线程上执行该client的什么增删改查的顺序也会是有序的。
一、String基本类型
1.字符串
采用redis-cli –row,对十六进制的汉子格式化,默认16进制存储。
gbk:1个汉子两字节。
uft-8:1个汉子三字节。
主要方法有:strlen
,append
2.数值
单线程原子性
主要方法:incr
,decr
(加,减)
主要适用场景:秒杀限流
3.二进制(位图bitmap)
主要方法:bitcount
,setbit
。
主要是用场景:
①统计一个用户一段时间内容内登录的天数
思想:k看做一个用户,每一天作为offect,value设置为1,最后bitcount求出[0,-1]一个用户固定时间登录的天数。
②统计某一天登录的用户总数,或一段时间登录的用户总数
思想:k看做一个日期,每一个用户作为offect,value设置为1,最后或运算bittop or res k1 k2
,bitcount求出[0,-1]。
bitcount
计算某个字节区间内含1的个数
举个例子:
1 |
|
①setbit:设置bit指令
②k:key,键
③1:offect,偏移量
③1:value,值
get k1
我们来查看一下结果:@
strlen k1
1
说明:因为设置的是字节为单位。所以有8个bit,从左往右,在offect为1的位置,设置值为1,因此成为0100000
,而在ASCII中0100000
正好对应的是@
。
注:
①如果偏移量大于1个节点大小,则会扩容,新增一个字节。
②setbit不会覆盖,会在原始字节上继续set。
通过help指令,可以去学习有哪些具体方法
注:redis存在二进制安全,所以存入redis的需要序列化!
二、list类型
同样help查看指令集
主要用途:
①同向指令:栈,后进先出
②异向指令:队列,先进先出
③index
三、hash类型
同样help查看指令集
主要适用场景:
对散列表中的键值对进行操作
①详情页
②聚合
四、set类型
① 可用于随机事件
② 验证码
③ 推荐系统,共同的好友推荐,例如qq的好友推荐
五、zset类型
底层类型依靠skiplist
① 动态翻页(动态维护顺序)
② 排行榜
注:
redis还可以做限流和封杀恶意刷次数ip
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!