存储数据结构 操作命令
String set,get,decr,incr,mget
List lpush,rpush,lpop,rpop,lrange
Hash hget,hset,hgetall
Set sadd,spop,smembers,sunion
Sort set zadd,zrange,zrem,zcard
淘汰机制:
回答:
1、从设置过期的里面淘汰最近最久未使用的
2、从设置过期的里面淘汰即将过期的
3、从设置过期的里面随机淘汰
4、从全部里面淘汰最近最久没使用的(主要是这个)
5、从全部里面随机淘汰。
6、不淘汰(当有数据添加时,内存又不足,就会报错)
持久化机制:
RDB:对数据进行快照,就是将当前数据进行一边快照,保存到硬盘上。我们可以去设置这个快照规则,可以去配置 save 1 30 意思就是30s以内,如果又一次修改就会触发快照。
dump.rdb 文件,这个文件存储的是数据集。是当前数据的一个快照。
save: 首先阻塞redis服务器,然后去执行当前的save命令,这段时间redis不能执行其他命令,等save命令执行完之后,再开始redis服务器
bgsave:redis服务器会fork一个子进程去执行bgsave命令,当前线程仍然可以执行执行其他命令
每一次快照,rbd文件都会被替换。这个过程应该就是主线程去做的。(对,这样可以保证数据不一致问题就是替换这个过程还有别的命令过来,造成数据不一致)
AOF : 追加的方式,实质将写命令进行一个append,追加到最后。所以AOF里面存的都是写操作命令。文件要比RDB大。
重写: 当aof文件文件已经存不下了。那就会启用重写机制,重写机制如下:
lpush 1 ;lpush2 ; lpush3 ; lpush4 ;
改成lpush 1,2,3,4
这样就缩减了文件的大小。
************画重点额。
AOF同样也是创建子进程去重写AOF文件的。但是这样就会出现一个问题。
当子进程重写AOF的时候,父进程这个接受client的改命令操作,这个时候将会到时重写前后的命令不一样。怎么办?
这个时候会新出一个AOF缓冲区,当redis创建了子进程之后,然后所接受的client发出写操作命令就会被记录到AOF缓冲区里面。