Redis常见问题
命令
安装
redis官网地址:http://www.redis.io/
1、下载源码,解压缩后编译源码。
$ wget http://download.redis.io/releases/redis-2.8.3.tar.gz $ tar xzf redis-2.8.3.tar.gz $ cd redis-2.8.3 $ make
2、编译完成后,在Src目录下,有四个可执行文件redis-server、redis-benchmark、redis-cli和redis.conf。然后拷贝到一个目录下。
mkdir /usr/redis cp redis-server /usr/redis cp redis-benchmark /usr/redis cp redis-cli /usr/redis cp redis.conf /usr/redis cd /usr/redis
3、启动Redis服务。
$ redis-server redis.conf
4、然后用客户端测试一下是否启动成功。
$ redis-cli redis> set foo bar OK redis> get foo "bar"
demon方式启动, 修改redis.conf中的 daemonize:#是否以后台daemon方式运行 =》yes
redis-server
配置
daemonize是否以后台进程运行,默认为no
pidfile如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid
bind绑定主机IP,默认值为127.0.0.1(注释)
port 监听端口,默认为6379
timeout超时时间,默认为300(秒)
loglevel日志记录等级,有4个可选值,debug,verbose(默认值),notice,warning
logfile日志记录方式,默认值为stdout
databases可用数据库数,默认值为16,默认数据库为0
save<seconds><changes>指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。这个可以多个条件配合,比如默认配置文件中的设置,就设置了三个条件。
save 900 1 900秒(15分钟)内至少有1个key被改变
save 300 10 300秒(5分钟)内至少有300个key被改变
save 60 10000 60秒内至少有10000个key被改变
rdbcompression存储至本地数据库时是否压缩数据,默认为yes
dbfilename本地数据库文件名,默认值为dump.rdb
dir 本地数据库存放路径,默认值为./
slaveof<masterip><masterport>当本机为从服务时,设置主服务的IP及端口(注释)
masterauth<master-password>当本机为从服务时,设置主服务的连接密码(注释)
requirepass连接密码(注释)
maxclients最大客户端连接数,默认不限制(注释)
maxmemory<bytes>设置最大内存,达到最大内存设置后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,任到达最大内存设置,将无法再进行写入操作。(注释)
appendonly是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为no
appendfilename更新日志文件名,默认值为appendonly.aof(注释)
appendfsync更新日志条件,共有3个可选值。no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次(默认值)。
vm-enabled是否使用虚拟内存,默认值为no
vm-swap-file虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享
vm-max-memory将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的(Redis的索引数据就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0。
应用场景
最大的redis集群,新浪redis集群揭秘:http://www.linuxeden.com/html/itnews/20131010/144377.html
原理、源码、设计思想
一. 文章索引
A. 单机原理
1. redis 单线程分析:http://www.zhihu.com/question/19764056 ,主要说了redis使用epoll
2. 单机多核: http://ask.chinaunix.net/question/688
3. Jepsen:测试PostgreSQL、Redis、MongoDB...: http://www.linuxeden.com/html/news/20131218/146570.html, 主要说了redis的分区分裂测试
4. 高级课程: http://www.chinahadoop.cn/course/115
B. HA、读写分离与集群
1. 理想化的reids集群 :http://www.linuxeden.com/html/news/20131209/146211.html, 主要说了一致性hash , 以及工业化的redis集群需求
2. 盛大创新院: redis replication : http://in.sdo.com/?p=1187
3. 盛大创新院, redis 集群方案 : http://in.sdo.com/?p=1714
4. Redis 多机特性及实现原理:http://pan.baidu.com/s/1y8pWy
二. 重点列表
1. Replication : 最终一致性, rep由slave发起,模式与 hadoop namenode模式一致,采取版本快照(namenode中是文件+内存,这里是内存)+ 后续更新命令的形式同步,可以预计的是,初次rep的时候快照文件很大,对网络和slave的压力较大。写快照和读快照的时候,master和slave都为非阻塞模型。
2. 尽量使用2.8以上版本,同步过程不会阻塞。
3. 如果容忍最终一致性,1主-写,N从-读 的模式可以满足读需求, SORT等耗时操作放在从上。
3. sentiel:Redis的哨兵,类似zookeeper, 为了HA而弄得东西,监控各master、slave,万一主 挂了就,就从N个从里面挑一个来做主,然后其他N-1同步这个新的主
4. Redis 是CP系统。C是最终一致性。
Redis 的 脑分裂问题:http://www.linuxeden.com/html/news/20131218/146570.html