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服务
[iyunv@Architect redis]# pwd
/usr/local/redis
[iyunv@Architect redis-1.2.6]# bin/redis-server /etc/redis.conf
查看进程,确认redis已经启动
[iyunv@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
[iyunv@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
清除所有数据库
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com