redis manual
- setbit bitmap 99 1:标识n个事物的状态(0/1)。
- 数据结构优先采用hash:当hash中fields较少时,底层的物理存储使用ziplist压缩方式存储
- zset:每个元素有一个score值,其大小决定元素顺序。
- List、Hash、Set和Zset的元素个数不要超过5000个。
- del删除一个key,通常认为是O(1)操作。删除一个String类型的key为 O(1),而set、list、hash等都是O(N),N是存储的数据个数。
- MSET 1 str1 2 str2:多命令参数是原子性的,可以实现多个key的原子性操作。
- 使用pipeline:
- 不是原子性操作,不能保证所有命令执行成功。
- pipeline可以把不同的命令操作打包在一起,建议单次pipeline的命令个数在50到300之间
- Set取交集:
sinter myset myset2
sinterstore interkey myset myset2
sdiff、sdiffstore、sunion、sunionstore
- 事务命令
MULTI、EXEC、DISCARD、WATCH、UNWATCH
- RDB
- 相比于AOF机制,如果数据集很大,RDB的启动效率会更高
- 由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟
- AOF
- 如果日志过大,Redis可以自动启用rewrite机制。即Redis以append模式不断的将修改数据写入到老的磁盘文件中,同时Redis还会创建一个新的文件用于记录此期间有哪些修改命令被执行。因此在进行rewrite切换时可以更好的保证数据安全性。
- AOF在运行效率上往往会慢于RDB。总之,每秒同步策略的效率是比较高的
- 如何修复坏损的AOF文件:
- 将现有已经坏损的AOF文件额外拷贝出来一份。
- 执行"redis-check-aof --fix <filename>"命令来修复坏损的AOF文件。
- 用修复后的AOF文件重新启动Redis服务器。
- Redis的数据备份:
- 在Redis中我们可以通过copy的方式在线备份正在运行的Redis数据文件。这是因为RDB文件一旦被生成之后就不会再被修改。Redis每次都是将最新的数据dump到一个临时文件中,之后在利用rename函数原子性的将临时文件改名为原有的数据文件名。因此我们可以说,在任意时刻copy数据文件都是安全的和一致的。鉴于此,我们就可以通过创建cron job的方式定时备份Redis的数据文件,并将备份文件copy到安全的磁盘介质中。
- 虚拟内存
- 在实际的应用中,大约只有10%的Keys属于相对比较常用的键,这样Redis就可以通过虚存将其余不常用的Keys和Values换出到磁盘上,而一旦这些被换出的Keys或Values需要被读取时,Redis则将其再次读回到主内存中。
- 我们可以将带有很多较小值的Keys合并为带有少量较大值的Keys。其中最主要的方法就是将原有的Key/Value模式改为基于Hash的模式,这样可以让很多原来的Keys成为Hash中的属性。
- scan:增量迭代读取大对象,可以取代一些O(N)操作,避免redis长时间被单个slow query阻塞
- scan命令用于迭代当前database中的所有key,可以优化keys *pattern*操作
- sscan命令用于迭代set中的key中的元素,可以优化smembers操作。
- hscan命令用于迭代hash中的所有fields和对应的value,优化hgetall和hkeys操作。
- zscan命令用于迭代sorted set中的元素(member and score)。

浙公网安备 33010602011771号