Loading... <p style="font-family:sans-serif;font-size:16px"> <strong><span style="font-family:宋体;font-size:21px">介绍</span></strong> </p> <p> <span><span style="line-height:24px"> </span></span><span style="font-family:微软雅黑, sans-serif;font-size:13px"> redis</span><span style="font-family:微软雅黑, sans-serif;font-size:13px">是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。</span> </p> <h2 style="font-family:sans-serif"> <strong><span style="font-family:宋体">编译安装</span></strong><br /> </h2> <h3 style="font-family:sans-serif"> <span style="font-family:微软雅黑, sans-serif">下载redis</span><br /> </h3> <pre class="brush:bash;toolbar:false">############目前最新稳定版########## [root@redis ~]# wget http://download.redis.io/releases/redis-2.8.19.tar.gz </pre> <h3 style="font-family:sans-serif"> <span style="font-family:微软雅黑, sans-serif">解压缩redis</span><br /> </h3> <pre class="brush:bash;toolbar:false;">[root@redis ~]# tar xzf redis-2.8.19.tar.gz </pre> <h3 style="font-family:sans-serif"> 编译<span style="font-family:Arial, sans-serif">redis</span><br /> </h3> <p style="font-family:sans-serif;font-size:16px"> <span style="font-family:微软雅黑, sans-serif;font-size:13px">redis</span><span style="font-family:微软雅黑, sans-serif;font-size:13px">的编译非常简单,已经有现成的Makefile文件,直接运行make命令即可</span> </p> <pre class="brush:bash;toolbar:false">[root@redis redis-2.8.19]# cd redis-2.8.19 [root@redis redis-2.8.19]# make </pre> <p style="font-family:sans-serif;font-size:16px"> <span style="font-family:微软雅黑, sans-serif;font-size:13px">make</span><span style="font-family:微软雅黑, sans-serif;font-size:13px">命令执行完成后,会在src目录下生成6个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-dump、redis-sentinel,它们的作用如下:</span> </p> <pre class="brush:bash;toolbar:false;">redis-server: Redis服务器的daemon启动程序 redis-cli: Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作 redis-benchmark: Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能 redis-check-aof: 更新日志检查 redis-check-dump: 用于本地数据库检查 redis-sentinel: Redis实例的监控管理、通知和实例失效备援服务,是Redis集群的管理工具 </pre> <h3 style="font-family:sans-serif"> <span style="font-family:微软雅黑, sans-serif">安装redis</span><br /> </h3> <pre class="brush:bash;toolbar:false;">[root@redis src]# make install </pre> <h3 style="font-family:sans-serif"> 配置<span style="font-family:Arial, sans-serif">redis</span>的配置文件<br /> </h3> <pre class="brush:bash;toolbar:false">[root@redis redis-2.8.19]# cp redis.conf /etc/ ##########编辑Redis配置文件################### [root@redis redis-2.8.19]# vim /etc/redis.conf daemonize yes #37行 #是否以后台daemon方式运行,默认不是后台运行 pidfile /var/run/redis/redis.pid #41行 #redis的PID文件路径 bind 10.168.85.25 #64行 #绑定主机IP,默认值为127.0.0.1,我们是跨机器运行,所以需要更改 logfile /var/log/redis/redis.log #104行 #定义log文件位置,模式log信息定向到stdout,输出到/dev/null save 60 1000 #145行 #重新定义快照的频率 dir /usr/local/rdbfile #188行 #本地数据库存放路径,默认为./,编译安装默认存在在/usr/local/bin下 </pre> <h3 style="font-family:sans-serif"> 启动测试<span style="font-family:Arial, sans-serif">Redis</span>服务器<br /> </h3> <pre class="brush:bash;toolbar:false">#############启动Redis服务器############ [root@redis redis-2.8.19]# redis-server /etc/redis.conf #############查看是否启动成功########### [root@redis redis-2.8.19]# ss -tanlp | grep redis LISTEN 0 128 10.168.85.25:6379 *:* users:(("redis-server",17379,4)) #############测试Redis################## [root@redis redis-2.8.19]# redis-cli -h 10.168.85.25 -p 6379 10.168.85.25:6379> set test hello OK 10.168.85.25:6379> get test "hello" </pre> <h3 style="font-family:sans-serif"> 更改内核信息<br /> </h3> <pre class="brush:bash;toolbar:false">#############查看日志信息############### [root@redis redis-2.8.19]# tail -f /var/log/redis/redis.log [5033] 04 Jan 15:47:05.378 # Server started, Redis version 2.8.19 [5033] 04 Jan 15:47:05.379 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. [5033] 04 Jan 15:47:05.379 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. [5033] 04 Jan 15:47:05.380 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. [5033] 04 Jan 15:47:05.380 * DB loaded from disk: 0.000 seconds [5033] 04 Jan 15:47:05.380 * The server is now ready to accept connections on port 6379 </pre> <pre class="brush:bash;toolbar:false">日志显示有两个关于内核设置的警告信息! ##############sysctl文件############### [root@redis ~]# echo "vm.overcommit_memory=1" >> /etc/sysctl.conf [root@redis ~]# sysctl -p #############kerbel#################### [root@redis ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled </pre> <h3 style="font-family:sans-serif"> 重新启动<span style="font-family:Arial, sans-serif">Redis</span>服务器<br /> </h3> <pre class="brush:bash;toolbar:false;">#######将缓存保存到硬盘上##### [root@redis ~]# redis-cli -h 10.168.85.25 -p 6379 BGSAVE Background saving started #######关闭Redis############# [root@redis ~]# redis-cli -h 10.168.85.25 -p 6379 SHUTDOWN ########启动Redis############ [root@redis ~]# redis-server /etc/redis.conf </pre> <h3 style="font-family:sans-serif"> 编辑<span style="font-family:Arial, sans-serif">Redis</span>启动脚本<br /> </h3> <pre class="brush:bash;toolbar:false">[root@redis ~]# vi /etc/init.d/redis #!/bin/sh # # redis init file for starting up the redis daemon # # chkconfig: - 20 80 # description: Starts and stops the redis daemon. # Source function library. . /etc/rc.d/init.d/functions name="redis-server" exec="/usr/local/bin/$name" # 指定redis-server命令的位置(whereis redis-server) pidfile="/var/run/redis/redis.pid" # 指定redis的pid文件路径(和配置文件里保持一致) REDIS_CONFIG="/etc/redis.conf" # 指定redis的配置文件路径 [ -e /etc/sysconfig/redis ] && . /etc/sysconfig/redis lockfile=/var/lock/subsys/redis start() { [ -f $REDIS_CONFIG ] || exit 6 [ -x $exec ] || exit 5 echo -n $"Starting $name: " daemon --user ${REDIS_USER-redis} "$exec $REDIS_CONFIG" retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $name: " killproc -p $pidfile $name retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { stop start } reload() { false } rh_status() { status -p $pidfile $name } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 restart ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart}" exit 2 esac exit $? [root@redis ~]# chmod 700 /etc/init.d/redis [root@redis ~]# servcie redis restart </pre> <h2 style="font-family:sans-serif"> <strong><span style="font-family:宋体">附加信息</span></strong><br /> </h2> <h3 style="font-family:sans-serif"> <span style="font-family:Arial, sans-serif">Redis</span>无法编译安装报错处理?<br /> </h3> <pre class="brush:bash;toolbar:false">###########make时错误信息######### [root@redis redis-2.8.19]# make cd src && make all make[1]: Entering directory `/root/redis-2.8.19/src' CC adlist.o In file included from adlist.c:34: zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory zmalloc.h:55:2: error: #error "Newer version of jemalloc required" make[1]: *** [adlist.o] Error 1 make[1]: Leaving directory `/root/redis-2.8.19/src' make: *** [all] Error 2 ############解决方法############# make MALLOC=libc </pre> <h3 style="font-family:sans-serif"> <span style="font-family:Arial, sans-serif">vm.overcommit_memory</span>参数解析<br /> </h3> <pre class="brush:bash;toolbar:false">如果内存情况比较紧张的话,需要设定内核参数overcommit_memory,指定内核针对内存分配的策略,其值可以是0、1、2。 0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。 2,表示内核允许分配超过所有物理内存和交换空间总和的内存Redis在dump数据的时候,会fork出一个子进程,理论上child进程所占用的内存和parent是一样的,比如parent占用的内存为 8G,这个时候也要同样分配8G的内存给child, 如果内存无法负担,往往会造成redis服务器的down机或者IO负载过高,效率下降。所以这里比较优化的内存分配策略应该设置为 1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何)。 设置方式有两种,需确定当前用户的权限活使用root用户修改: 1:重设文件echo 1 > /proc/sys/vm/overcommit_memory(默认为0) 2:echo "vm.overcommit_memory=1" >> /etc/sysctl.conf && sysctl -p </pre> <p style="font-family:sans-serif;font-size:16px"> <span style="font-size:14px"><span style="font-family:微软雅黑, sans-serif"></span></span> </p> <p style="font-family:sans-serif;font-size:16px"> <span style="font-size:14px"><span style="font-family:微软雅黑, sans-serif"></span></span> </p> <h3 id="Redis利用持久化迁移数据-Redis–BGSAVE" style="font-family:sans-serif"> <span style="font-family:Arial, sans-serif">BGSAVE参数解析</span><br /> </h3> <p style="font-family:sans-serif;font-size:16px"> <span style="font-size:14px"><span style="font-family:微软雅黑, sans-serif"></span></span> </p> <div class="line number1 index0 alt2" style="font-family:sans-serif;font-size:16px"> <span style="font-size:14px;font-family:微软雅黑, sans-serif"></span> </div> <div class="line number7 index6 alt2" style="font-family:sans-serif;font-size:16px"> <pre class="brush:bash;toolbar:false">在后台异步(Asynchronously)保存当前数据库的数据到磁盘。 BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。 客户端可以通过 LASTSAVE 命令查看相关信息,判断 BGSAVE 命令是否执行成功。 请移步 持久化文档 查看更多相关细节。 可用版本:>= 1.0.0时间复杂度:O(N), N 为要保存到数据库中的 key 的数量。返回值:反馈信息。 redis> BGSAVE Background saving started </pre> <div> </div> <p> <span style="font-size:14px;font-family:微软雅黑, sans-serif"></span> </p> </div> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信