1, Redis是一种面向“KV”键值对的类型数据的分布式Nosql数据库系统。特点是高性能,持久存储,适应高并发的应用场景。
2,支持vlaue的数据类型
value类型 | 操作命令 | 特点 |
String | set/get | |
自增数字 | incr/incr by/decr/decr by | |
列表 | lpush/rpush/lrange | |
集合 | sadd/smembers/sismember/sinter/sunion | 支持交集/并集 |
hash | hset/hget/ | |
有序集合 | zadd/zrange/zrevrange/zrangebyscore/zremrangebyscore | |
3, 持久化方式之一:快照-snapshot
save 900 1: 900秒后至少有1次修改,redis将自动产生快照
save 300 10: 300秒后至少有10次修改,redis将会自动产生快照
save 60 10000: 60秒若有超过10000次的key修改,redis也将产生快照
产生快照的方式:
一,redis fork出子进程处理快照,父进程继续处理client请求。由于os的写时复制的策略,父子进程享有相同的物理页面。当父进程处理写请求时,os会为父进程修改的页面创建副本,而不是写共享的页面。
二,当子进程将快照写入临时文件完毕之后,redis用临时文件替换掉原来的快照文件,然后退出。
三,也可以通过save或者bgsave操作来生成快照,但是save操作时在主线程中保存的,由于redis是一个主线程处理所有client请求,这种方式会阻塞所有client请求,所以不推荐使用。
4,持久化方式之二:Append Only file
appendonly yes //启用aof持久化方式
appendfsync always //每次收到写命令就立即强制写磁盘,最慢的,但是能保证完全持久化,不推荐使用
appendfsync everysec //每秒钟强制持久化一次,在性能和持久化方面做了很好的折中,推荐
appendfsync no //完全依赖os,性能最好,持久化没保证
为了压缩aof文件内容,redis提供了bgrewriteaof命令,收到此命令redis将会使用与快照类似的方式将内存中的数据以命令的方式保存到临时文件中,最后替换原来的文件。
5,内存不够怎么处理
maxmemory <bytes> //redis最大使用的内存字节数
volatile-lru //首先淘汰设置了过期时间的kv对
allkeys-lru //完全更具LRU算法过期所有key
volatile-random //随机淘汰设置了过期时间的kv对
allkeys-random //随机淘汰所有的key
volatile-ttl //按照ttl淘汰最近的kv对
noeviction //不淘汰,当有写操作时返回错误
参考: http://www.yiihsia.com/2011/04/%E5%AF%B9redis%E6%95%B0%E6%8D%AE%E6%8C%81%E4%B9%85%E5%8C%96%E7%9A%84%E4%B8%80%E4%BA%9B%E6%83%B3%E6%B3%95/