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 k 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 协议 ,转载请注明出处!