现在的位置: 首页 > 综合 > 正文

Linux下redis安装部署

2018年05月26日 ⁄ 综合 ⁄ 共 17182字 ⁄ 字号 评论关闭

1、下载源代码

http://code.google.com/p/redis/downloads/list  

下载redis-1.2.6.tar.gz 将下载包拷贝到/usr/local/webserver/redis-1.2.6/下

或者http://redis.io/下载redis-2.4.15

2、安装

tar -zxvf redis-1.2.6.tar.gz  
cd redis-1.2.6  
make && make install

3、调整内存
如果内存情况比较紧张的话,需要设定内核参数:

echo 1 > /proc/sys/vm/overcommit_memory

这里说一下这个配置的含义:

/proc/sys/vm/overcommit_memory
该文件指定了内核针对内存分配的策略,其值可以是0、1、2。
0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2,表示内核允许分配超过所有物理内存和交换空间总和的内存
设置可选部分:拷贝文件

cp redis.conf /etc/  #这个文件时redis启动的配置文件

cp redis-benchmark redis-cli redis-server /usr/bin/  #这个倒是很有用,这样就不用再执行时加上./了,而且可以在任何地方执行

4、编辑redis.conf

daemonize yes #转为守护进程,否则启动时会每隔5秒输出一行监控信息  
save 60 1000 #减小改变次数,其实这个可以根据情况进行指定  
maxmemory 1024000000 #分配256M内存

5、服务管理
5.1 启动服务

redis-server redis.conf   #启动服务

5.2 存储值

redis-cli set name zhoufeng  redis-cli get name

5.3 关闭服务

redis-cli shutdown

5.3.1 如果端口变化可以指定端口:

redis-cli -p 6380 shutdown

5.3.2 这时内存中的数据会自动写入硬盘,文件地址是在redis.conf里配置的:

dbfilename dump.rdb

5.3.3 说明:数据备份可以通过定期备份该文件实现。
5.3.4 另外,从网上看到说redis不能将内存数据转存到硬盘上,这个问题我也遇到了,后来发现是用户权限的问题,最开始启动redis我使用的root用户,后来使用wap用户就发现

不能将数据写入硬盘,这是因为dump.rdb已经是root权限了,不知道说redis不能存储到硬盘的人是不是和我犯了同样的错误。
5.3.5 另外,我发现执行redis-benchmark命令时也会将内存数据写入硬盘。
5.3.6 redis-benchmark:检查当前机器的处理性能。

6、强制保存内存数据到硬盘

因为redis是异步写入磁盘的,如果要让内存中的数据马上写入硬盘可以执行如下命令:
redis-cli save 或者 redis-cli -p 6380 save(指定端口)
注意,以上部署操作需要具备一定的权限,比如复制和设定内核参数等。

7、同步机制
redis实现的同步机制相对简单,缺少同步机制常见的check point和校验机制。
在运行时,如果master -> slave同步请求转发被丢弃, slave将无法恢复该请求的相关信息,直到slave重启时从master全量加载数据时才能修复。因此,建议使用redis尽量利用其key/value和value支持多种类型的特性,存储一些相对不重要的数据。

以上文章摘自:

http://zhumeng8337797.blog.163.com/blog/static/100768914201121325626422/

http://www.oschina.net/question/12_18065

补充的部分:

Redis安装

Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务 器。

Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个appendonly file(aof)里面(这称为“全持久化模式”)。

一、下载最新版

wgethttp://redis.googlecode.com/files/redis-2.0.4.tar.gz

二、解压缩

tar redis-2.0.4.tar.gz

三、安装C/C++的编译组件(非必须)

apt-get install build-essential

四、编译

cd redis-2.0.4
make

make命令执行完成后,会在当前目录下生成本个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-stat,它们的作用如下:

redis-server:Redis服务器的daemon启动程序

redis-cli:Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作

redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能

redis-stat:Redis状态检测工具,可以检测Redis当前状态参数及延迟状况 

在后面会有这几个命令的说明,当然是从网上抄的。。。

五、修改配置文件

/etc/sysctl.conf

添加

vm.overcommit_memory=1

刷新配置使之生效

sysctl vm.overcommit_memory=1

补充介绍:

 **如果内存情况比较紧张的话,需要设定内核参数:
echo 1 > /proc/sys/vm/overcommit_memory

 内核参数说明如下:

overcommit_memory文件指定了内核针对内存分配的策略,其值可以是0、1、2。
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存

 **编辑redis.conf配置文件(/etc/redis.conf),按需求做出适当调整,比如:
daemonize yes #转为守护进程,否则启动时会每隔5秒输出一行监控信息
save 60 1000 #减小改变次数,其实这个可以根据情况进行指定
maxmemory 256000000 #分配256M内存

在我们成功安装Redis后,我们直接执行redis-server即可运行Redis,此时它是按照默认配置来运行的(默认配置甚至不是后台运行)。我们希望Redis按我们的要求运行,则我们需要修改配置文件,Redis的配置文件就是我们上面第二个cp操作的redis.conf文件,目前 它被我们拷贝到了/usr/local/redis/etc/目录下。修改它就可以配置我们的server了。如何修改?下面是redis.conf的主 要配置参数的意义:

daemonize:是否以后台daemon方式运行

pidfile:pid文件位置

port:监听的端口号

timeout:请求超时时间

loglevel:log信息级别

logfile:log文件位置

databases:开启数据库的数量

save * *:保存快照的频率,第一个*表示多长时间,第三个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。

rdbcompression:是否使用压缩

dbfilename:数据快照文件名(只是文件名,不包括目录)

dir:数据快照的保存目录(这个是目录)

appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。

appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)

下面是一个略做修改后的配置文件内容:

daemonize yes
pidfile /usr/local/redis/var/redis.pid
port 6379
timeout 300
loglevel debug
logfile /usr/local/redis/var/redis.log
databases 16
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /usr/local/redis/var/
appendonly no
appendfsync always
glueoutputbuf yes
shareobjects no
shareobjectspoolsize 1024

 

将上面内容写为redis.conf并保存到/usr/local/redis/etc/目录下

然后在命令行执行:

1

/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

即可在后台启动redis服务,这时你通过

1

telnet 127.0.0.1 6379

即可连接到你的redis服务。

六、启动服务并验证

启动服务器

./redis-server

$redis-server /etc/redis.conf  
查看是否成功启动
$ ps -ef | grep redis   

./redis-cli ping 
PONG

七、启动命令行客户端赋值取值 

redis-cli set mykey somevalue

./redis-cli get mykey

 八、添加到开机启动

vi /etc/rc.d/rc.local

redis-server /usr/local/redis/etc/redis.conf  

最后还要开放redis的端口,否则客户端无法连接。方法如下:

vi /etc/sysconfig/iptables #需要具备其修改权限

增加一行:

# redis
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -jACCEPT

保存后重启iptables:

service iptables restart (PATH中加入了/sbin/)或者 /etc/init.d/iptables restart

九.关闭服务

[wap@hanqunfeng redis-1.2.6]$ redis-cli shutdown  

 如果端口变化可以指定端口: redis-cli -p 6380 shutdown

这时内存中的数据会自动写入到硬盘,文件地址是在redis.conf里配置的:

dbfilename dump.rdb

说明:数据备份可以通过定期备份该文件实现。

另 外,从网上看到说redis不能将内存数据转存到硬盘上,这个问题我也遇到了,后来发现是用户权限的问题,最开始启动redis我使用的root用户,后来使用wap用户就发现不能将数据写入硬盘,这是因为dump.rdb已经是root权限了,不知道说redis不能存储到硬盘的人是不是和我犯了同样的 错误。

另外,我发现执行redis-benchmark命令时也会将内存数据写入硬盘。

redis-benchmark:检查当前机器的处理性能。

重启服务后再次取值,取值成功

[wap@hanqunfeng redis-1.2.6]$   

[wap@hanqunfeng redis-1.2.6]$ redis-server /etc/redis.conf   

New pid: 12797  

[wap@hanqunfeng redis-1.2.6]$ redis-cli get name  

value  

强制保存内存数据到硬盘

因为redis是异步写入磁盘的,如果要让内存中的数据马上写入硬盘可以执行如下命令:

redis-cli save 或者 redis-cli -p 6380 save(指定端口)

注意,以上部署操作需要具备一定的权限,比如复制和设定内核参数等。

ok,redis配置完成。

 

配置文件篇:

如果认为Redis是一个key value存储, 可以使用它来代替MySQL;如果认为它是一个可以持久化的cache, 可能只是用它保存一些频繁访问的临时数据(代替Memcached);除此之外,还可以把Redis当做一个轻量级的消息队列使用,因为它内置就支持list数据结构和PUB/SUB命令;还可以当做一个轻量级的分布式锁系统。Redis是REmote DIctionary Server的缩写,在Redis在官方网站的解释是:

Redis is an open source, advanced key-value store.   It is often referred to as a data structure server since keys   can contain strings, hashes, lists, sets and sorted sets.

本文将会详细介绍Redis的配置文件。

1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程

daemonize no

2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定

pidfile /var/run/redis.pid

3. 指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字

port 6379

4. 绑定的主机地址

bind 127.0.0.1

5.当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能

timeout 300

6. 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose

loglevel verbose

7. 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null

logfile stdout

8. 设置数据库的数量,默认数据库为0,可以使用SELECT <dbid>命令在连接上指定数据库id

databases 16

9. 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合

save <seconds> <changes>

Redis默认配置文件中提供了三个条件:

save 900 1  save 300 10  save 60 10000

分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。

10. 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大

rdbcompression yes

11. 指定本地数据库文件名,默认值为dump.rdb

dbfilename dump.rdb

12. 指定本地数据库存放目录

dir ./

13. 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步

slaveof <masterip> <masterport>

14. 当master服务设置了密码保护时,slav服务连接master的密码

masterauth <master-password>

15. 设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH <password>命令提供密码,默认关闭

requirepass foobared

16. 设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息

maxclients 128

17. 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区

maxmemory <bytes>

18. 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no

appendonly no

19. 指定更新日志文件名,默认为appendonly.aof

appendfilename appendonly.aof

20. 指定更新日志条件,共有3个可选值: 
no:表示等操作系统进行数据缓存同步到磁盘(快) 
always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全) 
everysec:表示每秒同步一次(折衷,默认值)

appendfsync everysec

21. 指定是否启用虚拟内存机制,默认值为no,简单的介绍一下,VM机制将数据分页存放,由Redis将访问量较少的页即冷数据swap到磁盘上,访问多的页面由磁盘自动换出到内存中(在后面的文章我会仔细分析Redis的VM机制)

vm-enabled no

22. 虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享

vm-swap-file /tmp/redis.swap

23. 将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的(Redis的索引数据就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0

vm-max-memory 0

24. Redis swap文件分成了很多的page,一个对象可以保存在多个page上面,但一个page上不能被多个对象共享,vm-page-size是要根据存储的数据大小来设定的,作者建议如果存储很多小对象,page大小最好设置为32或者64bytes;如果存储很大大对象,则可以使用更大的page,如果不确定,就使用默认值

vm-page-size 32

25. 设置swap文件中的page数量,由于页表(一种表示页面空闲或使用的bitmap)是在放在内存中的,,在磁盘上每8个pages将消耗1byte的内存。

vm-pages 134217728

26. 设置访问swap文件的线程数,最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的,可能会造成比较长时间的延迟。默认值为4

vm-max-threads 4

27. 设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启

glueoutputbuf yes

28. 指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法

hash-max-zipmap-entries 64  hash-max-zipmap-value 512

29. 指定是否激活重置哈希,默认为开启(后面在介绍Redis的哈希算法时具体介绍)

activerehashing yes

30. 指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件

include /path/to/local.conf

本文完整的介绍了Redis配置文件,希望对大家有用。

补充说明部分:

简述:  redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。


环境:CentOS 5.5  x64


下载安装:

  1. cd /root/tools   
  2. wget http://redis.googlecode.com/files/redis-2.4.2.tar.gz   
  3. tar zxvf redis-2.4.2.tar.gz   
  4. cd redis-2.4.2   
  5. make && make install   
  6. cp redis.conf  /etc/   
  7. cd    

修改配置文件:#vi /etc/redis.conf

  1. daemonize yes   
  2. pidfile /var/run/redis.pid   
  3. port 6379    
  4. #bind 127.0.0.1   
  5. timeout 600   
  6. loglevel notice   
  7. logfile /elain/logs/redis/redis.log    
  8. databases 16    
  9. save 900 1   
  10. save 300 10   
  11. save 60 10000   
  12. rdbcompression yes   
  13. dbfilename dump.rdb    
  14. dir /elain/data/redis/    
  15. # maxclients 128    
  16. appendonly yes   
  17. appendfilename appendonly.aof    
  18. # appendfsync always   
  19. appendfsync everysec   
  20. # appendfsync no    
  21. requirepass elain    
  22. no-appendfsync-on-rewrite no   
  23. auto-aof-rewrite-percentage 100   
  24. auto-aof-rewrite-min-size 64mb    
  25. slowlog-log-slower-than 10000    
  26. slowlog-max-len 1024    
  27. really-use-vm yes   
  28. vm-enabled yes   
  29. vm-swap-file /tmp/redis.swap   
  30. vm-max-memory 0   
  31. vm-page-size 32   
  32. vm-pages 134217728   
  33. vm-max-threads 4    
  34. hash-max-zipmap-entries 512   
  35. hash-max-zipmap-value 64    
  36. list-max-ziplist-entries 512   
  37. list-max-ziplist-value 64    
  38. set-max-intset-entries 512    
  39. zset-max-ziplist-entries 128   
  40. zset-max-ziplist-value 64    
  41. activerehashing yes    
  42. # include /path/to/local.conf   
  43. # include /path/to/other.conf   

启动:#redis-server /etc/redis.conf

开机加自启动:# echo "redis-server /etc/redis.conf" >> /etc/rc.local

测试:$redis-cli -a elain (注意端口:$redis-cli -p 8359)

查看状态信息:$redis-cli info

主从同步配置:

只需把/etc/redis.conf 复制到 从机上,主、从机上把127.0.0.1 IP 改成本机ip,然后在从机上的redis.conf 里添加以下几行,重启即可:

  1. slave-serve-stale-data yes   
  2. slaveof 主服务器IP 6379   
  3. masterauth <master-password>   

注:以上主从配置做了密码验证,也可不做验证,不用加masterauth 选项



附上启动脚本:

脚本用法:/etc/init.d/redis-server start|restart|stop

[python] view
plain
copy

  1. #!/bin/sh     
  2. #     
  3. # redis - this script starts and stops the redis-server daemon     
  4. #     
  5. # chkconfig:   - 85 15     
  6. # description:  Redis is a persistent key-value database     
  7. # processname: redis-server     
  8. # config:      /etc/redis.conf     
  9. # config:      /etc/sysconfig/redis     
  10. # pidfile:     /var/run/redis.pid     
  11.     
  12. # Source function library.     
  13. . /etc/rc.d/init.d/functions     
  14.     
  15. # Source networking configuration.     
  16. . /etc/sysconfig/network     
  17.     
  18. # Check that networking is up.     
  19. "$NETWORKING" = "no" ] && exit 0     
  20.     
  21. redis="/usr/local/bin/redis-server"     
  22. prog=$(basename $redis)     
  23.     
  24. REDIS_CONF_FILE="/etc/redis.conf"     
  25.     
  26. [ -f /etc/sysconfig/redis ] && . /etc/sysconfig/redis     
  27.     
  28. lockfile=/var/lock/subsys/redis     
  29.     
  30. start() {     
  31.     [ -x $redis ] || exit 5     
  32.     [ -f $REDIS_CONF_FILE ] || exit 6     
  33.     echo -n $"Starting $prog: "     
  34.     daemon $redis $REDIS_CONF_FILE     
  35.     retval=$?     
  36.     echo     
  37.     [ $retval -eq 0 ] && touch $lockfile     
  38.     return $retval     
  39. }     
  40.     
  41. stop() {     
  42.     echo -n $"Stopping $prog: "     
  43.     killproc $prog -QUIT     
  44.     retval=$?     
  45.     echo     
  46.     [ $retval -eq 0 ] && rm -f $lockfile     
  47.     return $retval     
  48. }     
  49.     
  50. restart() {     
  51.     stop     
  52.     start     
  53. }     
  54.     
  55. reload() {     
  56.     echo -n $"Reloading $prog: "     
  57.     killproc $redis -HUP     
  58.     RETVAL=$?     
  59.     echo     
  60. }     
  61.     
  62. force_reload() {     
  63.     restart     
  64. }     
  65.     
  66. rh_status() {     
  67.     status $prog     
  68. }     
  69.     
  70. rh_status_q() {     
  71.     rh_status >/dev/null 2>&1     
  72. }     
  73.     
  74. case "$1" in     
  75.     start)     
  76.         rh_status_q && exit 0     
  77.         $1     
  78.         ;;     
  79.     stop)     
  80.         rh_status_q || exit 0     
  81.         $1     
  82.         ;;     
  83.     restart|configtest)     
  84.         $1     
  85.         ;;     
  86.     reload)     
  87.         rh_status_q || exit 7     
  88.         $1     
  89.         ;;     
  90.     force-reload)     
  91.         force_reload     
  92.         ;;     
  93.     status)     
  94.         rh_status     
  95.         ;;     
  96.     condrestart|try-restart)     
  97.         rh_status_q || exit 0     
  98.         ;;     
  99.     *)     
  100.         echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"     
  101.         exit 2     
  102. esac   

redis官方文档:http://redis.io/documentation

redis官方操作命令全集:http://redis.io/commands

reids 各接口使用方法请参考官方文档


附录:

配置文件 redis.conf 详解


daemonize  yes                                  #是否以后台进程运行,默认为no

pidfile  /var/run/redis.pid                     #如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid

bind 127.0.0.1                                  #绑定主机IP,默认值为127.0.0.1(注释)

port   6379                                     #监听端口,默认为6379

timeout  300                                    #超时时间,默认为300(秒)

loglevel  notice                                #日志记slave-serve-stale-data yes:在master服务器挂掉或者同步失败时,从服务器是否继续提供服务。录等级,有4个可选值,debug,verbose(默认值),notice,warning

logfile   /var/log/redis.log                    #日志记录方式,默认值为stdout

databases  16                                   #可用数据库数,默认值为16,默认数据库为0

save 900 1                                      #900秒(15分钟)内至少有1个key被改变

save 300 10                                     #300秒(5分钟)内至少有300个key被改变

save 60 10000                                   #60秒内至少有10000个key被改变

rdbcompression yes                              #存储至本地数据库时是否压缩数据,默认为yes

dbfilename dump.rdb                             #本地数据库文件名,默认值为dump.rdb

dir ./                                          #本地数据库存放路径,默认值为 ./


slaveof 10.0.0.12 6379                          #当本机为从服务时,设置主服务的IP及端口(注释)

masterauth elain                                #当本机为从服务时,设置主服务的连接密码(注释)

slave-serve-stale-data yes                      #在master服务器挂掉或者同步失败时,从服务器是否继续提供服务。

requirepass elain                               #连接密码(注释)


maxclients 128                                  #最大客户端连接数,默认不限制(注释)

maxmemory <bytes>                               #设置最大内存,达到最大内存设置后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,任到达最大内存设置,将无法再进行写入操作。(注释)

appendonly no                                   #是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为no

appendfilename   appendonly.aof                 #更新日志文件名,默认值为appendonly.aof(注释)

appendfsync  everysec                           #更新日志条件,共有3个可选值。no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次(默认值)。


really-use-vm yes

vm-enabled  yes                                 #是否使用虚拟内存,默认值为no

vm-swap-file /tmp/redis.swap                    #虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享

vm-max-memory 0                                 #vm大小限制。0:不限制,建议60-80% 可用内存大小。

vm-page-size 32                                 #根据缓存内容大小调整,默认32字节。

vm-pages 134217728                              #page数。每 8 page,会占用1字节内存。

vm-page-size                                    #vm-pages 等于 swap 文件大小

vm-max-threads 4                                #vm 最大io线程数。注意: 0 标志禁止使用vm 

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

本文出自 “elain的技术博客” 博客,请务必保留此出处http://elain.blog.51cto.com/3339379/705846

补充的知识:

redis作为NoSQL数据库的一种应用,响应速度和命中率上还是比较高效的。项目中需要用集中式可横向扩展的缓存框架,做了一点调研,即便redis、memcached存在效率上的差异(具体比较参考http://timyang.net/data/mcdb-tt-redis/),但其实都能满足目前项目的需求;但是redis还是比较风骚的,支持链表和集合操作,支持正则表达式查找key,目前项目缓存的结果大多是链表,如果链表新增或者修改数据的话,redis就体现出了极大的优势(memcached只能重新加载链表,redis可以对链表新增或者修改)

1:下载redis
下载地址 http://code.google.com/p/redis/downloads/list
推荐下载redis-1.2.6.tar.gz,之前这个版本同事已经有成功安装运行的经验,redis-2.0.4.tar.gz 这个版本我安装后无法操作缓存数据,具体原因后续再说

2:安装redis
下载后解压 tar zxvf redis-1.2.6.tar.gz 到任意目录,例如/usr/local/redis-1.2.6

解压后,进入redis目录
    cd /usr/local/redis-1.2.6  
    make  

拷贝文件
cp redis.conf    /etc/ 这个文件时redis启动的配置文件
cp redis-benchmark redis-cli redis-server   /usr/bin/  #这个倒是很有用,这样就不用再执行时加上./了,而且可以在任何地方执行


设置内存分配策略(可选,根据服务器的实际情况进行设置)
/proc/sys/vm/overcommit_memory
可选值:0、1、2。
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存

值得注意的一点是,redis在dump数据的时候,会fork出一个子进程,理论上child进程所占用的内存和parent是一样的,比如parent占用的内存为8G,这个时候也要同样分配8G的内存给child,如果内存无法负担,往往会造成redis服务器的down机或者IO负载过高,效率下降。所以这里比较优化的内存分配策略应该设置为
1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何)


开启redis端口,修改防火墙配置文件
    vi /etc/sysconfig/iptables  

加入端口配置
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT  

重新加载规则
    service iptables restart   


3:启动redis服务

[root@Architect redis-1.2.6]# pwd  

/usr/local/redis-1.2.6  

[root@Architect redis-1.2.6]# redis-server   /etc/redis.conf  
查看进程,确认redis已经启动

[root@Architect redis-1.2.6]# ps -ef | grep redis  

root       401 29222  0 18:06 pts/3    00:00:00 grep redis  
root     29258     1  0 16:23 ?        00:00:00 redis-server /etc/redis.conf  

如果这里启动redis服务失败,一般情况下是因为redis.conf文件有问题,建议检查或找个可用的配置文件进行覆盖,避免少走弯路,这里建议,

修改redis.conf,设置redis进程为后台守护进程
 # By default Redis does not run as a daemon. Use 'yes' if you need it.  
 # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.  
  daemonize yes  

4:测试redis
 [root@Architect redis-1.2.6]# redis-cli  (注意端口:redis-cli -p  8359)
 redis> set name songbin  
 OK  
 redis> get name   
 "songbin"  

5:关闭redis服务
 #redis-cli shutdown 

redis服务关闭后,缓存数据会自动dump到硬盘上,硬盘地址为redis.conf中的配置项dbfilename dump.rdb所设定

强制备份数据到磁盘,使用如下命令

#redis-cli save 或者 redis-cli -p 6380 save(指定端口)


抱歉!评论已关闭.