Linux安装配置Redis

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux安装配置Redis相关的知识,希望对你有一定的参考价值。

一、Redis介绍

Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统。和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多,包括string、list、set、zset和hash。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作。在此基础上,Redis支持各种不同方式的排序。

和Memcache一样,Redis数据都是缓存在计算机内存中,不同的是,Memcache只能将数据缓存到内存中,无法自动定期写入硬盘,这就表示,一断电或重启,内存清空,数据丢失。所以Memcache的应用场景适用于缓存无需持久化的数据。而Redis不同的是它会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,实现数据的持久化。

Redis从它的许多竞争继承来的三个主要特点:

1.Redis数据库完全在内存中,使用磁盘仅用于持久性。

2.相比许多键值数据存储,Redis拥有一套较为丰富的数据类型。

3.Redis可以将数据复制到任意数量的从服务器。


Redis 优势

         异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录。

         支持丰富的数据类型:Redis支持最大多数开发人员已经知道像列表,集合,有序集合,散列数据类型。这使得它非常容易解决各种各样的问题,因为我们知道哪些问题是可以处理通过它的数据类型更好。

         操作都是原子性:所有Redis操作是原子的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值。

        多功能实用工具:Redis是一个多实用的工具,可以在多个用例如缓存,消息,队列使用(Redis原生支持发布/订阅),任何短暂的数据,应用程序,如Web应用程序会话,网页命中计数等。


二、Redis的安装

[[email protected] app]# ls
redis-3.2.8.tar.gz
[[email protected] app]# tar zxvf redis-3.2.8.tar.gz 
[[email protected] app]# cd redis-3.2.8
[[email protected] redis-3.2.8]# yum -y install gcc gcc-c++
[[email protected] redis-3.2.3]# make
Hint: It‘s a good idea to run ‘make test‘ ;)

make[1]: Leaving directory `/app/redis-3.2.3/src‘
[[email protected] redis-3.2.3]#

在执行完make之后,在最后的程序中会输出(t‘s a good idea to run ‘make test‘),它建议我们执行make test进行测试,那么接下来我们就输入make test,检查测试,是否出现问题,如出现如图所示:则说明测试没有问题:

[[email protected] redis-3.2.3]# cd src/
[[email protected] src]# make test
You need tcl 8.5 or newer in order to run the Redis test
make: *** [test] Error 1
[[email protected] src]# cd /app/
[[email protected] app]# wget 
[[email protected] app]# tar zxvf tcl8.6.1-src.tar.gz 
[[email protected] app]# cd tcl8.6.1/unix/
[[email protected] unix]# ./configure
[[email protected] unix]# make && make install
[[email protected] unix]# cd /app/redis-3.2.3/
[[email protected] redis-3.2.3]# make clean
[[email protected] redis-3.2.3]# make
[[email protected] redis-3.2.3]# cd src/
[[email protected] src]# make test
  215 seconds - integration/replication-3
  212 seconds - integration/replication-4
  98 seconds - unit/hyperloglog
  151 seconds - unit/obuf-limits

\o/ All tests passed without errors!

Cleanup: may take some time... OK
[[email protected] src]# make install

Hint: It‘s a good idea to run ‘make test‘ ;)

    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
[[email protected] src]#


三、redis的配置

 启动:

[[email protected] src]# redis-server ../redis.conf 
                _._                                                  
           _.-``__ ‘‘-._                                             
      _.-``    `.  `_.  ‘‘-._           Redis 3.2.3 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ‘‘-._                                   
 (    ‘      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|‘` _.-‘|     Port: 6379
 |    `-._   `._    /     _.-‘    |     PID: 35217
  `-._    `-._  `-./  _.-‘    _.-‘                                   
 |`-._`-._    `-.__.-‘    _.-‘_.-‘|                                  
 |    `-._`-._        _.-‘_.-‘    |           http://redis.io        
  `-._    `-._`-.__.-‘_.-‘    _.-‘                                   
 |`-._`-._    `-.__.-‘    _.-‘_.-‘|                                  
 |    `-._`-._        _.-‘_.-‘    |                                  
  `-._    `-._`-.__.-‘_.-‘    _.-‘                                   
      `-._    `-.__.-‘    _.-‘                                       
          `-._        _.-‘                                           
              `-.__.-‘                                               

35217:M 29 Mar 11:30:21.454 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
35217:M 29 Mar 11:30:21.454 # Server started, Redis version 3.2.3
35217:M 29 Mar 11:30:21.454 # 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.
35217:M 29 Mar 11:30:21.454 * The server is now ready to accept connections on port 6379
^C35217:signal-handler (1490758240) Received SIGINT scheduling shutdown...
35217:M 29 Mar 11:30:40.180 # User requested shutdown...
35217:M 29 Mar 11:30:40.180 * Saving the final RDB snapshot before exiting.
35217:M 29 Mar 11:30:40.191 * DB saved on disk
35217:M 29 Mar 11:30:40.191 * Removing the pid file.
35217:M 29 Mar 11:30:40.191 # Redis is now ready to exit, bye bye...
[[email protected] src]#

这里直接执行Redis-server 启动的Redis服务,是在前台直接运行的(效果如上图),也就是说,执行完该命令后,如果Lunix关闭当前会话,则Redis服务也随即关闭。正常情况下,启动Redis服务需要从后台启动,并且指定启动配置文件。 

编辑conf文件,将daemonize属性改为yes(表明需要在后台运行)

[[email protected] src]# vim ../redis.conf 
daemonize yes
[[email protected] src]# redis-server ../redis.conf 
[[email protected] src]# netstat -anotp|grep :6379
tcp        0      0 127.0.0.1:6379              0.0.0.0:*                   LISTEN      35415/redis-server  off (0.00/0/0)
[[email protected] src]# redis-cli shutdown   #停止redis服务
[[email protected] src]# netstat -anotp|grep :6379

配置

为了方便管理,将Redis文件中的conf配置文件和常用命令移动到统一文件中

[[email protected] app]# mkdir -p redis6379/{log,conf,data,bin}
[[email protected] src]# cp redis-server redis-benchmark redis-cli kreleasehdr.sh redis-check-aof /app/redis6379/bin/
[[email protected] src]# cp ../redis.conf /app/redis6379/conf/
[[email protected] src]# pwd
/app/redis-3.2.3/src
[[email protected] src]# cd /app/redis6379/bin/
[[email protected] bin]# redis-server ../conf/redis.conf 
[[email protected] bin]# netstat -antp|grep :6379
tcp        0      0 127.0.0.1:6379              0.0.0.0:*                   LISTEN      36334/redis-server  
[[email protected] bin]# cp /etc/sysctl.conf{,.bak}
[[email protected] bin]# vim /etc/sysctl.conf
vm.overcommit_memory = 1
[[email protected] bin]# sysctl -p

设置内存分配策略vm.overcommit_memory = 1 ;否则Redis脚本在重启或停止redis时,将会报错,并且不能自动在停止服务前同步数据到磁盘上

/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服务关闭后,缓存数据会自动dump到硬盘上,硬盘地址为redis.conf中的配置项dbfilename dump.rdb所设定


为了方便管理,将Redis配置成服务

[[email protected] conf]# cat /etc/rc.d/init.d/redis 
#!/bin/bash
#chkconfig: 2345 10 90
#description: Redis server is an open source, advanced key-value store.
# source function library
source /etc/rc.d/init.d/functions
port="6379"
pidfile="/var/run/redis_$port.pid"
lockfile="/var/lock/subsys/redis-server"
rootpath="/app/redis$port"
config="$rootpath/conf/redis.conf"
binpath="$rootpath/bin"
[ -r "$SYSCONFIG" ] && source "$SYSCONFIG"
reids_status(){
               status -p $pidfile redis-server
}
start() {
        if [ -e $pidfile ];then
            echo "Redis Server aleady running......"
            exit 1
        else
            echo -n "Starting Redis Server......"
            $binpath/redis-server $config
            value=$?
            [ $value -eq 0 ] && touch $lockfile && echo "OK"
            return $value
        fi
}
stop() {
       echo -n "Stop Redis Server......"
       killproc redis-server
#      $binpath/redis-cli save && $binpath/redis-cli shutdown
       value=$?
       [ $value -eq 0 ] && rm -rf $lockfile $pidfile 
       return $value
}
restart() {
          stop
          start
}
case "$1" in
start)
      start
;;
stop)
     stop
;;
restart)
        restart
;;
status)
       reids_status
;;
*)
  echo $"Usage: $0 {start|stop|restart|status}"
esac
[[email protected] conf]# chkconfig --add redis
[[email protected] conf]# chkconfig --level 2345 redis on
[[email protected] conf]# chmod +x /etc/rc.d/init.d/redis


三、redis的测试

[[email protected] src]# redis-cli  #redis-cli -a password 进入redis客户端(有密码状态)
127.0.0.1:6379> set justin "WeChat ID:ityunwei2017"  #向redis中插入键值对数据,键为justin,值为WeChat ID:ityunwei2017
OK
127.0.0.1:6379> get justin   #根据键取值
"WeChat ID:ityunwei2017"
127.0.0.1:6379> exists justin    #查看键是否存在
(integer) 1
127.0.0.1:6379> exists justin1
(integer) 0
127.0.0.1:6379> del justin    #删除当前key
(integer) 1
127.0.0.1:6379> exists justin
(integer) 0
127.0.0.1:6379> quit
[[email protected] src]# redis-benchmark -h 127.0.0.1 -p 6379 -n 10 -c 50

redis-benchmark -h 127.0.0.1 -p 6379 -n 10 -c 50    向redis服务器发送10个请求,每个请求附带50个并发客户端,-n 接请求数,-c 接并发数  


本文出自 “我本不是菜鸟” 博客,请务必保留此出处http://ityunwei2017.blog.51cto.com/7662323/1912128

以上是关于Linux安装配置Redis的主要内容,如果未能解决你的问题,请参考以下文章

linux安装好redis,怎么启动

linux安装好redis,怎么启动?

redis数据库在linux上的学习

Linux下安装配置redis详细教程,并配置哨兵模式

[Linux]Linux下redis的安装及配置.

linux安装配置Redis及Redis集群