redis:
一个开源的基于内存的轻量级键值数据库(单线程),数据类型string,list,hash,set,zset,hyperloglog。
通信过程:
1、客户端向服务器发送一个命令;
2、服务器接受该命令并将其放入执行队列(redis是单线程的执行模型);
3、命令被执行;
4、服务器将命令的执行结果返回给客户端。
位图:
由0和1组成的字符串string。0000100010000010,特定情况下可以节省占用内存。
可以使用SETBIT、GETBIT命令来处理。
键过期:
Keys的过期时间使用Unix时间戳存储,即使实例不可用,当前时间戳也不会停止。
主动过期:redis会每秒10次利用一个基于概率的算法进行主动删除,随机选取20个keys,删除所有已过期的keys,如果expired keys超过25%,继续选取20个keys。
被动过期:当客户端访问已过期的key时,redis会立即将它删除。
RDB:执行SAVE或BGSAVE时,过期键不会被保存在rdb文件中。
AOF:当key过期但未删除,会被正常记录到aof文件中,当过期key被释放,DEL也会被同步到aof文件中;执行 BGREWRITEAOF时 ,数据库键中过期的键不会被记录到aof文件中。
复制:为了保持一致性,当key被过期时,DEL将会随着AOF文字整合到所有slaves。slaves连接到master不会独立过期keys,当slave被选为master时能够独立地过期key,然后成为master。
管道:
在通信过程中的第2、3步是取决于redis服务器,第1、4步耗费的时间完全取决于服务器与客户端之间的网络延时;我们可以一次传输多个命令,用来减少服务端与客户端的通信过程;
cat pipeline.txt # 将命令写入一个文件中 set mykey myvalue sadd myset value1 value2 lpush mylist value1 value2 value3 get mykey scard myset
文件中的每一行必须以 结束,可以使用命令unix2dos实现,需要安装dos2unix工具。
unix2dos pipeline.txt # 格式处理 cat pipeline.txt | ./redis-cli --pipe # 通过管道发送命令
事务: