redis

持久化级别 redis提供如下四中持久化方案: 完全不持久化,纯内存操作。比如做缓存服务器时。 RDB持久化,配置时间间隔,异步持久化。默认的持久化方案。 AOF持久化,所有操作都是记录到日志文件,保证所有数据都被记录。 在redis重启时,会使用AOF重建数据集。 结合使用RDB和AOF的持久化方案.重启时会使用AOF重建。 RDB优缺点 优点: 结构紧凑的文件,相当与系统的实时快照,很适合做数据库备份和灾难恢复。 性能优秀,服务线程不需要处理i/o. 大数据集上重启很快。不需要重建 缺点: 间隔性同步到磁盘,导致有可能会丢失部分数据。 fork有可能堵塞导致暂不可用. AOF优缺点 优点: 更加稳定,可以设置为 不同步/每秒同步/完全同步. redis可以rewrite过大的AOF log. 保存了所有操作,可以从误操作中回复数据库。 缺点: 所需的文件通常比RDB更大 查询性能相对比RDB更差。 有很稀有的bug存在,RDB没有此类bug. 如何使用 如果想要更强的数据一致性,则应该组合使用AOF和RDB 如果可以容忍少量的数据丢失,可以只使用RDB. 不推荐只是AOF.
Jan 8, 2016
1 min read
介绍一些redis部署时的注意事项 注意事项 建议使用linux部署。 sysctl vm.overcommit_memory=1 或者 vm.overcommit_memory = 1 (/etc/sysctl.conf) echo never > /sys/kernel/mm/transparent_hugepage/enabled 设置一个和内存一样大或更大的swap分区,不然redis有可能在内存不足时被系统杀死。 设置一个明确的maxmemory. 这样redis会在内存到限后抛出错误,而不会falling. 在写比较重的场景下需要有大约2倍于normal的内存。这些是来在内存中保留那些需要被写回磁盘的数据. 配置supervisor类工具时,设置 daemonize no 开启slave特性时,即便不使用持久化特性,redis也会perform RDB save. 除非使用实验性的diskless-sync. 开启slave特性时,要确保要么打开master节点的保存特性,要么关闭master节点的自动重启。 注意开发redis安全相关配置. require-pass/rewrite-command/bind-ip aws注意事项 使用HWS实例,不要使用pv实例 不要使用太老的实例。 m3 good than m1 redis在EBS的持久话需要注意,EBS可能会太慢。 你可能想尝试diskless-sync. 如果replication-sync有问题的话。 redis升级或重启建议 TODO
Jan 8, 2016
1 min read
概述 redis并不是单纯的缓存服务器,而是被设计为一个数据结构服务器。为服务提供有用高效的数据类型. redis中主要包含如下数据类型: 字符串,二进制安全。 列表list, 链表实现。不是array. 集合set, 值不可重复. 排序集合ordered-set. 同时存储一个value和一个score. score用于排序. 字典hash, 类似python的字典和ruby的hash,但是field-key/field-value只能是字符串. bit-array或bitmaps. HyperLogLogs, 概率行数据结构. TODO 不同数据结构可以根据需要解决不同的任务集。 类型具体说明 redis-key redis-key只能是字符串,并且是2进制安全。 空字符串也能做为key. 太长的key不被推荐,compare性能不好. 太短的key不好,可读性不好 u1000flw => user:1000:followers 对键做良好的管理,引入命名空间和键前缀等概念. user:1000, comment:1234.replys 最大长度512MB, 不会成为限制。 exists判断key是否存在, del用于删除key, keys用于列出keys.type获取key类型. ttl/expire用于获取和设置过期时间. persist移除key的过期设置。pttl/pexpire返回/设置millsecond级别的过期时间. redis-string 最简单的数据结构,应该也是最常用的数据结构(缓存). 通过get/set设置和换取 set在没有key时会创建key,在key存在时做update.同时可以制定second/millsecond级别的过期时间. 可以支持incr/incrby/decr/decrby,把字符串作为数字执行原子性的+/-.底层使用的是同一个命令。 getset获取key的old-value, 同时设置为最新的value. mset/mget一次对多个key做操作. redis-list 列表, 链表实现, 在列表中间插入/移除元素的复杂度为O(1), 查找元素的复杂度为O(N). 大多数操作都支持左右两个方向, lpush/rpush. l->list前缀/r->reverse-order 两个方向的push/pop可以作为队列/栈使用. lrange用于获取列表内容.常用的场景:
Jan 8, 2016
1 min read