设为首页 收藏本站
查看: 1079|回复: 0

[经验分享] Redis的编译安装

[复制链接]

尚未签到

发表于 2018-11-6 13:14:44 | 显示全部楼层 |阅读模式
  介绍

  redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
编译安装
下载redis
############目前最新稳定版##########[root@redis ~]# wget http://download.redis.io/releases/redis-2.8.19.tar.gz解压缩redis
[root@redis ~]# tar xzf redis-2.8.19.tar.gz编译redis
  redis的编译非常简单,已经有现成的Makefile文件,直接运行make命令即可
[root@redis redis-2.8.19]# cd redis-2.8.19[root@redis redis-2.8.19]# make  make命令执行完成后,会在src目录下生成6个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-dump、redis-sentinel,它们的作用如下:
redis-server:             Redis服务器的daemon启动程序redis-cli:                Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作redis-benchmark:          Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能redis-check-aof:          更新日志检查redis-check-dump:         用于本地数据库检查redis-sentinel:           Redis实例的监控管理、通知和实例失效备援服务,是Redis集群的管理工具安装redis
[root@redis src]# make install配置redis的配置文件
[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下启动测试Redis服务器
#############启动Redis服务器############[root@redis redis-2.8.19]# redis-server /etc/redis.conf#############查看是否启动成功###########[root@redis redis-2.8.19]# ss -tanlp | grep redisLISTEN     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 637910.168.85.25:6379> set test helloOK10.168.85.25:6379> get test"hello"更改内核信息
#############查看日志信息###############[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日志显示有两个关于内核设置的警告信息!##############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重新启动Redis服务器
#######将缓存保存到硬盘上#####[root@redis ~]# redis-cli -h 10.168.85.25 -p 6379 BGSAVEBackground saving started#######关闭Redis#############[root@redis ~]# redis-cli -h 10.168.85.25 -p 6379 SHUTDOWN########启动Redis############[root@redis ~]# redis-server /etc/redis.conf编辑Redis启动脚本
[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/functionsname="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/redislockfile=/var/lock/subsys/redisstart() {    [ -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 2esacexit $?[root@redis ~]# chmod 700 /etc/init.d/redis[root@redis ~]# servcie redis restart附加信息
Redis无法编译安装报错处理?
###########make时错误信息#########[root@redis redis-2.8.19]# makecd src && make allmake[1]: Entering directory `/root/redis-2.8.19/src'    CC adlist.oIn file included from adlist.c:34:zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directoryzmalloc.h:55:2: error: #error "Newer version of jemalloc required"make[1]: *** [adlist.o] Error 1make[1]: Leaving directory `/root/redis-2.8.19/src'make: *** [all] Error 2############解决方法#############make MALLOC=libcvm.overcommit_memory参数解析
  如果内存情况比较紧张的话,需要设定内核参数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



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

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-631586-1-1.html 上篇帖子: php xampp redis扩展 下篇帖子: Redis利用持久化进行数据迁移
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表