https://github.com/redisson
Redis常用数据结构:
String、List、Hash、set、sortedset
Redis数据持久化:
一、RDB【对内存中的数据库状态进行快照】建议开启:fork出一个子进程( 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程),所有持久化工作都由子进程完成,Redis会定期保存数据快照至一个rbd文件中,并在启动时自动加载rdb文件,恢复之前保存的数成[通过save指令 默认900秒1次,300秒10次,60秒10000次]
RDB的优点:
①对性能影响最小。如前文所述,Redis在保存RDB快照时会fork出子进程进行,几乎不影响Redis处理客户端请求的效率。
②每次快照会生成一个完整的数据快照文件,所以可以辅以其他手段保存多个时间点的快照(例如把每天0点的快照备份至其他存储媒介中),作为非常可靠的灾难恢复手段。
③使用RDB文件进行数据恢复比使用AOF要快很多。
RDB的缺点:
①快照是定期生成的,所以在Redis crash时或多或少会丢失一部分数据。
②如果数据集非常大且CPU不够强(比如单核CPU),Redis在fork子进程时可能会消耗相对较长的时间(长至1秒),影响这期间的客户端请求。
二、 AOF redis将每个写请求写入到日志中,在redis重启时,会把AOF写操作的顺序执行一遍,确保数据恢复到最新
AOF的优点:
①最安全,在启用appendfsync always时,任何已写入的数据都不会丢失,使用在启用appendfsync everysec也至多只会丢失1秒的数据。
AOF文件在发生断电等问题时也不会损坏,即使出现了某条日志只写入了一半的情况,也可以使用redis-check-aof工具轻松修复。
②AOF文件易读,可修改,在进行了某些错误的数据清除操作后,只要AOF文件没有rewrite,就可以把③AOF文件备份出来,把错误的命令删除,然后恢复数据。
AOF的缺点:
①AOF文件通常比RDB文件更大
②性能消耗比RDB高
③数据恢复速度比RDB慢
三、Redis内存设置
在内存占用达到了maxmemory后,再向Redis写入数据时,Redis会:
①根据配置的数据淘汰策略尝试淘汰数据,释放空间
②如果没有数据可以淘汰,或者没有配置数据淘汰策略,那么Redis会对所有写请求返回错误,但读请求仍然可以正常执行
【注意在为Redis设置maxmemory时,如果采用了Redis的主从同步,主节点向从节点同步数据时,会占用掉一部分内存空间,如果maxmemory过于接近主机的可用内存,导致数据同步时内存不足。所以设置的maxmemory不要过于接近主机可用的内存,留出一部分预留用作主从同步。
四、缓存淘汰策略
数据淘汰机制
Redis提供了5种数据淘汰策略:
volatile-lru:使用LRU算法进行数据淘汰(淘汰上次使用时间最早的,且使用次数最少的key),只淘汰设定了有效期的key
allkeys-lru:使用LRU算法进行数据淘汰,所有的key都可以被淘汰
volatile-random:随机淘汰数据,只淘汰设定了有效期的key
allkeys-random:随机淘汰数据,所有的key都可以被淘汰
volatile-ttl:淘汰剩余有效期最短的key