下载安装
wget http://download.redis.io/releases/redis-3.0.3.tar.gz tar xzf redis-3.0.3.tar.gz cd redis-3.0.3 make make install cp redis.conf /etc/ echo vm.overcommit_memory=1 >> /etc/sysctl.conf sysctl vm.overcommit_memory=1
vm.overcommit_memory
0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2,表示内核允许分配超过所有物理内存和交换空间总和的内存
配置redis
vi /etc/redis.conf daemonize yes(使进程在后台运行) appendonly yes(持久化支持)
更多配置如下:
#是否后台运行 daemonize yes #pid文件保存路径 pidfile /usr/redis/run/redis_6379.pid #端口号 port 6379 #接收来自于哪个个ip地址的请求,如果不设置,将处理所有请求 bind 127.0.0.1 #超时,单位为秒 timeout 300 #log日志级别分为4级,debug,verbose,notice,warning,生产环境一般开启notice loglevel notice #log日志位置,不设置,默认打印命令行终端 logfile stdout #数据库个数,默认使用0数据库 datebase 16 #设置redis进行数据库镜像的频率,单位为秒,意思为当900秒之内有1个key发生变化时,进行镜像备份 save 900 1 save 300 10 save 60 10000 #进行镜像备份是否压缩 rdbcomPRession yes #镜像备份文件名 dbfilename dump.rdb #数据库镜像存放位置 dir /usr/redis/var/ #设置该数据库是否为其他数据库的从数据库 slaveof yes #设置同时链接的客户端数量 maxclients 12800 #是否默认备份数据库镜像到磁盘 appendonly no #设置对appendonly.aof同步的频率,always表示每次读写都进行,everysec表示只对写进行累积,每秒同步一次 appendfsync everysec #是否开启虚拟内存 vm-enabled no vm-swap-file /tmp/redis.swap vm-max-memory 0 vm-page 134217728 vm-page-size 32 vm-max-threads 4 hash-max-zipmap-entries 512 hash-max-zipmap-value 64 list-max-ziplist-entries 512 list-max-ziplist-value 64 set-max-intset-entries 512 activerehashing yes
启动/测试:
启动 ./src/redis-server /etc/redis.conf & 测试 ./src/redis-cli 127.0.0.1:6379> set 11 22 OK 127.0.0.1:6379> get 11 "22" 127.0.0.1:6379> quit
持久化说明:
redis支持两种持久化方式,一种是 Snapshotting(快照)也是默认方式,另一种是Append-only file(缩写aof)的方式。
快照是默认的持久化方式。这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。可以通过配置设置自动做快照持久 化的方式。我们可以配置redis在n秒内如果超过m个key被修改就自动做快照,下面是默认的快照保存配置
save 900 1 #900秒内如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内容如超过10个key被修改,则发起快照保存
save 60 10000
另外由于快照方式是在一定间隔时间做一次的,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。如果应用要求不能丢失任何修改的话,可以采用aof持久化方式
aof 比快照方式有更好的持久化性,是由于在使用aof持久化方式时,redis会将每一个收到的写命令都通过write函数追加到文件中(默认是 appendonly.aof)。当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。当然由于os会在内核中缓存 write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改。不过我们可以通过配置文件告诉redis我们想要 通过fsync函数强制os写入到磁盘的时机。有三种方式如下(默认是:每秒fsync一次)
appendonly yes //启用aof持久化方式
# appendfsync always //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
appendfsync everysec //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐
# appendfsync no //完全依赖os,性能最好,持久化没保证