介绍

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 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"

更改内核信息

#############查看日志信息###############
[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 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

编辑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/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

附加信息

Redis无法编译安装报错处理?

###########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

vm.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

转载于:https://blog.51cto.com/pangge/1599048

Redis的编译安装相关推荐

  1. php redis 扩展 编译安装,Linux 下 PHP 扩展 redis 编译安装

    Linux环境为 CentOS6.5 64位 安装redis 比较简单,也没什么说的,看官网就行,链接:http://redis.io/download 主要看底部的东西. 安装好 redis 好之后 ...

  2. php 加载redise_php环境篇:redis服务编译安装

    安装前准备 yum install gcc yum install gcc-c++ mkdir -p /data/pkg cd /data/pkg 下载源码包以及解压 wget http://down ...

  3. Redis 编译安装 基础命令 服务优化 持久化

    Redis Redis 基础 编译安装 Redis(来吧!展示!!) 基础命令!! Redis 数据持久化 RBD 配置文件展示 AOF 配置文件展示 Redis 性能管理 内存碎片率 内存使用率 回 ...

  4. 最新版本Redis:Redis 7.0 安装使用,编译安装Redis,Redis使用场景-2022年最新Redis图解安装

    最新版本Redis:Redis 7.0 安装使用,编译安装Redis,Redis使用场景. 本章主要目标: 1.Redis介绍 2.下载Redis,编译安装Redis 3.启动Redis使用 4.Re ...

  5. Redis集群安装及配置步骤

    运行环境:CentOS 7(版本号:1503) Redis版本:3.0.5 参考文档:① http://www.redis.cn/topics/cluster-tutorial.html ② http ...

  6. Redis缓存的安装及基本数据类型命令的使用

    Redis基础   Redis 是一个开源的.遵循 BSD 协议的.基于内存的而且目前比较流行的键值数据库(key-value database),是一个非关系型数据库, redis 提供将内存通过网 ...

  7. Redis数据库简介与(CentOS 7)编译安装

    Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言 ...

  8. 编译安装 redis 2.2.14

    编译安装 redis 2.2.14 首先下载#redis   wget http://redis.googlecode.com/files/redis-2.2.14.tar.gz 接着 #tar -z ...

  9. redis的源码编译安装+发布订阅+RDB持久化

    redis的源码编译安装+发布订阅+RDB持久化 转载于:https://www.cnblogs.com/zwq-/p/10420455.html

最新文章

  1. 华北计算机研究无人机,飞马D200无人机在华北某环境地调项目中的应用案例
  2. SAP UB类型的STO能自动创建交货单?
  3. calcBackProject函数(搜索小物体的位置)
  4. 【NLP】NER数据标注中的标签一致性验证
  5. Spring源码解析-applicationContext.xml加载和bean的注册
  6. 解析JavaScript中的字符串类型与字符编码支持
  7. Android 无法查看外部依赖jar的源码的问题
  8. RabbitMQ 整合 Spring AMQP 实战
  9. 八、Linux系统日志管理
  10. 接口和抽象类的区别(转载)
  11. IE、FF CSS 兼容性、兼容浏览器的技巧 2
  12. 在命令行英雄的浏览器大战中,JavaScript令人惊讶地崛起
  13. Prefuse及相关数据结构可视化工具
  14. 中西医结合儿科疾病 100249
  15. matlab的double和single类型
  16. 电脑主板线路连接图解_主板接线图解
  17. 程序员值得提升的沟通小技巧!
  18. 大话西游java正版_大话西游手游
  19. 深度清理C盘空间,让你的C盘多出20G
  20. linux查看端口pvid,关于PVID的几个疑问

热门文章

  1. ups容量计算和配置方法_UPS电路设计的空开、电缆及电池如何配置,计算依据是什么...
  2. RDB和AOF速度测试
  3. csdn怎么快速转载别人的文章
  4. linux双网卡端口聚合,Linux双网卡聚合改造
  5. 二分(三分)+快速幂
  6. 从一个字符串中删除另一个字符串中出现过的字符
  7. 二进制逻辑运算符有关练习题
  8. aspnetcore源码学习(一)
  9. Jmeter测试普通java类说明
  10. 给定有权无向图的邻接矩阵如下,求其最小生成树的总权重,代码。