文章目录
特点
内存
单线程
KV
IO多路复用器《-》redis
redis只是通过多路复用器获取到IO事件,程序自己要读写IO
获取IO事件-》计算-》R/W
都是串行的(因为是单线程,一次只能处理一个线程)
——》IO的输出其实是有间隔的
输出是有间隔的:
比较memcache和redis
memcache:json存在string里
客户端请求数据的时候,只能请求到所有的json数据
redis:会建立本地方法,存在list
客户端请求的时候,只需要告诉服务器需要哪个数据index,不用操作全量
单线程:
假设2个client一起来请求,那么redis处理时候肯定是串行的
串行化,操作是原子
如何利用多核CPU
5种Value类型和应用场景
string
二进制安全:必须将数据变成字节数组交给redis
不管客户端什么编码集,redis数据不会乱
127.0.0.1:6379> help @string help查看所有api
127.0.0.1:6379> set k1
(error) ERR wrong number of arguments for 'set' command
127.0.0.1:6379> set k1 hello
OK
127.0.0.1:6379> get k1
"hello"
127.0.0.1:6379> strlen k1 获取长度
(integer) 5
127.0.0.1:6379> append k1 ooxx
(integer) 9
127.0.0.1:6379> get k1
"helloooxx"
127.0.0.1:6379> set k3 99
OK
127.0.0.1:6379> incr k3 还可以做数字计算
(integer) 100
setbin
开辟字节,把左边index=1的位置设置为1
setbit k1 1 1
动态扩宽字节数量
统计1的个数
0~-1 所有字节的1
0~0 第一个字节上的1
逻辑运算
bintop or 结果key 要参与的key...
k1: 0100 0001 = @
k2: 0100 0010 = B
k1 and k2 : 0100 0000 = @ ???
k1 or k2 : 0100 0011 = C
场景
- 统计一年365天,用户登陆天数
每天是一个bit, 一个人就46个字节
- 京东,在过节时候只要用户登陆了就送礼物,双十一之前要被多少件礼物。(一共2E用户)
活跃用户数才是备货的参考。
假设20200101,用户2,8登陆了
20200102,用户8登陆了
那么活跃人数就是 这俩日期key的or运算
- 12306
list
双向链表.key指向链表头尾