= redis简单调研 =
== 简介 ==
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string、list、set、zset和hash。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
参考:http://redis.io/documentation
拥有丰富的客户端API,如c,java,ruby,python,c++,c#等等
参考:http://redis.io/clients
适用的场合:
1. 需要精准设定过期时间的应用;
2. 实时系统;
3. Pub/sub构建实时消息系统;
4. 缓存;
5. ……
实际应用案例:
1. sina微博;
2. Twitter;
3. 淘宝秒杀;
4. ……
== 快速入门 ==
安装redis:
1. 下载:http://www.redis.io/download
2. 解压:tar zxvf redis-2.6.16.tar.gz
3. 编译:make
4. 运行:./src/redis-server ./src/redis-cli
配置redis:
1. 两种方法指定配置参数
* 在配置文件redis.conf中配置
* 在启动redis-server是指定
2. 运行过程中也可以修改配置
通过命令:CONFIG SET 和 CONFIG GET
参考:http://redis.io/topics/config
redis数据类型
1. Strings
2. Lists
3. Sets
4. ZSets
5. Hashes
参考:http://redis.io/topics/data-types
== Redis特性 ==
=== 安全性 ===
参考:http://redis.io/topics/security
1. 网络安全设置
可以对ip地址进行bind,只接受来自此ip的请求;
2. 设置访问密码
* 密码明文配置在redis.conf中,要保证此文件安全;
* 密码要足够可靠,redis client可以高速尝试密码;
3. 禁用命令或者重命名命令
保证一些敏感命令不被其他客户使用
=== 主从复制 ===
参考:http://redis.io/topics/replication
1. 特点
* 使用异步复制;
* Master可以拥有多个slave;
* Slave可以接受其他slave的复制请求;
* 主从复制不会阻塞master;
* 在slave上也是非阻塞;
* slave是只读的;
2. 缺点
每次断开重建连接之后都得进行全量同步,增量同步不支持;
3. 配置
slave <masterip> <masterport>
=== 事务控制 ===
参考:http://redis.io/topics/transactions
1. 命令基础
MULTI, EXEC, DISCARD, WATCH
2. 简单机制
当client发出multi命令后,进入事务上下文状态,后续命令并不立即执行,先放入一个队列中,当接收到exec命令后,按顺序执行队列中的所有命令,然后将所有命令的运行结果返回打包给client。
3. 不足
事务中的一个命令执行失败并不回滚其他命令。
=== 持久化机制 ===
参考: