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
    1. 不是原子性操作,不能保证所有命令执行成功。
    2. pipeline可以把不同的命令操作打包在一起,建议单次pipeline的命令个数在50到300之间

 

  • Set取交集

    sinter myset myset2

    sinterstore interkey myset myset2

    sdiff、sdiffstore、sunion、sunionstore

 

  • 事务命令

    MULTI、EXEC、DISCARD、WATCH、UNWATCH

 

  • RDB
    1. 相比于AOF机制,如果数据集很大,RDB的启动效率会更高
    2. 由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟

 

  • AOF
    1.  如果日志过大,Redis可以自动启用rewrite机制。即Redis以append模式不断的将修改数据写入到老的磁盘文件中,同时Redis还会创建一个新的文件用于记录此期间有哪些修改命令被执行。因此在进行rewrite切换时可以更好的保证数据安全性。
    2.  AOF在运行效率上往往会慢于RDB。总之,每秒同步策略的效率是比较高的
  • 如何修复坏损的AOF文件
    1. 将现有已经坏损的AOF文件额外拷贝出来一份。
    2. 执行"redis-check-aof --fix <filename>"命令来修复坏损的AOF文件。
    3. 用修复后的AOF文件重新启动Redis服务器。
  • Redis的数据备份
    1. 在Redis中我们可以通过copy的方式在线备份正在运行的Redis数据文件。这是因为RDB文件一旦被生成之后就不会再被修改。Redis每次都是将最新的数据dump到一个临时文件中,之后在利用rename函数原子性的将临时文件改名为原有的数据文件名。因此我们可以说,在任意时刻copy数据文件都是安全的和一致的。鉴于此,我们就可以通过创建cron job的方式定时备份Redis的数据文件,并将备份文件copy到安全的磁盘介质中。

 

  • 虚拟内存
    1. 在实际的应用中,大约只有10%的Keys属于相对比较常用的键,这样Redis就可以通过虚存将其余不常用的Keys和Values换出到磁盘上,而一旦这些被换出的Keys或Values需要被读取时,Redis则将其再次读回到主内存中。
    2. 我们可以将带有很多较小值的Keys合并为带有少量较大值的Keys。其中最主要的方法就是将原有的Key/Value模式改为基于Hash的模式,这样可以让很多原来的Keys成为Hash中的属性。
  • scan:增量迭代读取大对象,可以取代一些O(N)操作,避免redis长时间被单个slow query阻塞
    1. scan命令用于迭代当前database中的所有key,可以优化keys *pattern*操作
    2. sscan命令用于迭代set中的key中的元素,可以优化smembers操作。
    3. hscan命令用于迭代hash中的所有fields和对应的value,优化hgetall和hkeys操作。
    4. zscan命令用于迭代sorted set中的元素(member and score)。
posted @ 2017-03-27 09:57  感遇  阅读(230)  评论(0)    收藏  举报