`

Redis安装与配置

 
阅读更多

 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 PREFIX=/usr/local/redis install
  
    //安装完成后,会/usr/local/redis/bin/目录下生成5个可执行文件, 
    ls /usr/local/redis/bin/  
    redis-benchmark  redis-check-aof  redis-check-dump  redis-cli  redis-server  
    redis-server:Redis服务器的daemon启动程序  
    redis-cli:Redis命令行操作工具。  
    redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能  
        redis-benchmark -n 100000 -c 60
        向redis服务器发送100000个请求,每个请求附带60个并发客户端
    redis-check-dump: 检查file.rdb 文件  
    redis-check-aof:检查file.aof 文件
拷贝文件
mkdir /usr/local/redis/etc
cp redis.conf /usr/local/redis/etc  这个文件时redis启动的配置文件


3:修改配置
修改配置之前,请将redis.conf copy一份到/etc/目录下
    daemonize no
改成
    daemonize yes
这两个参数
    loglevel warning 
    logfile /var/log/redis.log 
取消注释
    syslog-enabled no #这个改成syslog-enabled yes
    syslog-facility local0
数据文件目录
    # The working directory.
    #
    # The DB will be written inside this directory, with the filename specified
    # above using the 'dbfilename' configuration directive.
    #
    # Also the Append Only File will be created inside this directory.
    #
    # Note that you must specify a directory here, not a file name.
    dir /var/db/redis
内存,连接数设置

    maxmemory 256000000
    maxclients 500

设置内存分配策略(可选,根据服务器的实际情况进行设置)
/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 

4:启动redis服务
    [root@Architect redis]# pwd
    /usr/local/redis
    [root@Architect redis-1.2.6]# bin/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

5:测试redis
    [root@Architect redis-1.2.6]# redis-cli
    redis> set name songbin
    OK
    redis> get name 
    "songbin"

6:关闭redis服务
    redis-cli shutdown

redis服务关闭后,缓存数据会自动dump到硬盘上,硬盘地址为redis.conf中的配置项dbfilename dump.rdb所设定
强制备份数据到磁盘,使用如下命令

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


7:启动 Redis 服务
src/redis-server或者src/redis-server redis.conf

src/redis-server redis.conf 1>log.log 2>errlog.log

1为标准输出,2为错误输出
将 Redis 作为 Linux 服务随机启动
vi /etc/rc.local, 加入代码:

/root/install/redis-2.4.9/src/redis-server

 

 


=========================redis.conf更多配置==========================
《 EOF
    #daemonize:是否以后台daemon方式运行
  
    daemonize yes
  
    #pidfile:pid文件位置
  
    pidfile /var/run/redis.pid
  
    #bind:监听的ip地址
  
    bind 10.0.100.70
  
    #port:监听的端口号
  
    port 6379
  
    #timeout:请求超时时间,单位秒
  
    timeout 120
  
    #loglevel:log信息级别,支持四个级别,debug,notice,verbose,warning
  
    loglevel warning
  
    #日志文件位置
  
    logfile /usr/local/redis/var/redis.log
  
    #databases:开启数据库的数量
  
    databases 16
  
    ##snapshoot
  
    #save * *:保存快照的频率,第一个*表示多长时间,第二个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
  
    #在900秒之内,redis至少发生1次修改则redis抓快照到磁盘
  
    save 900 1
  
    #在300秒之内,redis至少发生100次修改则redis抓快照到磁盘
  
    save 300 100
  
    #在60秒之内,redis至少发生10000次修改则redis抓快照到磁盘
  
    save 60 10000
  
    #rdbcompression:是否使用压缩
  
    rdbcompression yes
  
    #dbfilename:数据快照文件名(只是文件名,不包括目录)
  
    dbfilename dump.rdb
  
    #dir:数据快照的保存目录(这个是目录)
  
    dir /usr/local/redis/var
  
    ##aof
  
    #appendonly:是否开启appendonlylog,AOF是另一种持久化方式,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。
  
    appendonly no
  
    #appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)
  
    appendfsync everysec
  
    no-appendfsync-on-rewrite no
  
    auto-aof-rewrite-percentage 100
  
    auto-aof-rewrite-min-size 64mb
  
    ##slow log
  
    #如果操作时间大于0.001秒,记录slow log,这个log是记录在内存中的,可以用redis-cli slowlog get 命令查看
  
    slowlog-log-slower-than 10000
  
    #slow log 的最大长度
  
    slowlog-max-len 128
  
    ##virtual memory
  
    #是否使用虚拟内存
  
    vm-enabled no
  
    #swap文件,不同redis swap文件不能共享。而且生产环境下,不建议放在tmp目录。
  
    vm-swap-file /tmp/redis.swap
  
    #vm大小限制。0 不限制,建议60-80% 可用内存大小
  
    vm-max-memory 0
  
    #根据缓存内容大小调整,默认32字节
  
    vm-page-size 32
  
    #page数。每 8 page 会占用1字节内存
  
    vm-pages 134217728
  
    #m 最大io线程数。注意: 0 标志禁止使用vm(开关真多)
  
    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
  
    zset-max-ziplist-entries 128
  
    zset-max-ziplist-value 64
  
    activerehashing yes
  
    ##limit
  
    #最大使用内存单位<bytes>,默认情况下redis会占用可用的所有内存
  
    maxmemory 256000000
  
    #maxclients 最大连接数, 0 表示不限制
  
    maxclients 1024
  
    ##replication
  
    requirepass dongnan
  
    #slave
  
    #master的ip地址与端口号
  
    #slaveof 10.0.100.70 6379
  
    #设置slave到master的认证
  
    #masterauth dongnan
  
    #在master服务器挂掉或者同步失败时,从服务器是否继续提供服务
  
    slave-serve-stale-data yes
  
    EOF

===========================



客户端连接
src/redis-cli

停止redis服务:
src/redis-cli shutdown

增删改查:

keys *
取出当前匹配的所有key

> exists larry
(integer) 0

当前的key是否存在

del lv
删除当前key

expire
设置过期时间

> expire larry 10
(integer) 1

> move larry ad4
(integer) 1

移动larry键值对到ad4数据库

> persist lv
(integer) 1
移除当前key的过期时间

randomkey

随机返回一个key

rename
重命名key

type
返回值的数据类型

 type testlist
list


> ping
PONG

测试连接是否还在

>echo name

"larry"

打印

> select ad4databank
OK
数据库切换

> quit
退出连接

> dbsize
(integer) 12

当前数据库中key的数量

> info
服务器基本信息

monitor

实时转储收到的请求

config get
获取服务器的参数配置

flushdb
清空当前数据库

flushall
清除所有数据库

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics