redis安装使用

前言

redis是一个高性能的key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)list(链表)set(集合)zset(sorted set --有序集合)hash(哈希类型)。这些数据类型都支持push/popadd/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了PythonRubyErlangPHP客户端,使用很方便。

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。从盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

文档目的

供运维人员了解学习简单的redis操作,个人如果想要深入了解redis,可自行深入学习了解。

状态及类型

下载redis安装包redis-2.8.8.tar.gz

3.1 编译安装

cd /usr/local/src/

tar zxvf redis-2.8.8.tar.gz

cd redis-2.8.8

make PREFIX=/home/rediscmcc install

在安装redis成功后,你将可以在/home/rediscmcc看到一个bin的目录,里面包括了以下文件:

 redis-benchmark  redis-check-aof  redis-check-dump  redis-cli  redis-server

文件解释:

文件

功能

redis-benchmark

Redis性能测试工具,测试redis在你的系统及配置下的读写性能

redis-check-aof

更新日志检查

redis-check-dump

检查本地数据库文件

redis-cli

Redis命令行操作工具。也可以用telnet根据其纯文本协议来操作

redis-server

Redis服务器的daemon启动程序

 

3.2 设置配置文件参数

创建接下来要使用的目录:

Cd /home/rediscmcc

mkdir data

mkdir logdir

mkdir config

cp redis.conf /home/rediscmcc/config/  Copy一份配置文件

cd /home/rediscmcc/config/

vi redis.conf  设置配置文件中参数

修改一下配置

daemonize yes

 

pidfile /home/rediscmcc/data/redis.pid

 

port 6379

 

logfile "/home/rediscmcc/logdir/redis.log"

 

dbfilename dump.rdb

 

dir /home/rediscmcc/data

 

# maxmemory <bytes>

# maxmemory-policy volatile-lru

注:配置文件中名词解释见下文附件。

3.3 简单运行redis

./redis-server /home/rediscmcc/config/redis.conf 

3.4 查看redis服务是否启动成功,端口6379

netstat -tlunp

3.5 测试使用redis

Redis客户端指定端口进入redis

./redis-cli -p 6379

可以使用set getquit等简单命令测试是否可以正常使用

关闭redis

Redis-cli shutdown

关闭指定端口的redis-server

Redis-lic -p 6379 shutdown

redis做成一个服务

注:此处可做可不做。当两个redis数据库在同一台服务器上运行时,容易造成混淆现象。

4.0.1 复制脚本到/etc/rc.d/init.d目录

按以上步骤安装Redis时,其服务脚本位于:

/usr/local/src/redis-2.8.8/utils/redis_init_script

必须将其复制到/etc/rc.d/init.d的目录下:

cp /usr/local/src/redis/utils/redis_init_script /etc/rc.d/init.d/redis

以下将redis_init_script复制到/etc/rc.d/init.d/,同时易名为redis
如果这时,我们直接注册服务:

chkconfig --add redis

将报以下错误:

引用redis服务不支持chkconfig,为此我们需要更改redis的脚本。

4.0.2 更改redis的服务脚本 

#vim /etc/rc.d/init.d/redis

看到以下的文件内容: 

#!/bin/bash

#chkconfig:  2345 90 10

# description:  Redis is a persistent key-value database

# Simple Redis init.d script conceived to work on Linux systems

# as it does use of the /proc filesystem.

 

REDISPORT=6379

EXEC=/home/rediscmcc/bin/redis-server

CLIEXEC=/home/rediscmcc/bin/redis-cli

 

PIDFILE=/home/rediscmcc/data/redis_${REDISPORT}.pid

CONF="/home/rediscmcc/config/${REDISPORT}.conf"

 

case "$1" in

    start)

        if [ -f $PIDFILE ]

        then

                echo "$PIDFILE exists, process is already running or crashed"

        else

                echo "Starting Redis server..."

                $EXEC $CONF &

        fi

        ;;

    stop)

        if [ ! -f $PIDFILE ]

        then

                echo "$PIDFILE does not exist, process is not running"

        else

                PID=$(cat $PIDFILE)

                echo "Stopping ..."

                $CLIEXEC -p $REDISPORT shutdown

                while [ -x /proc/${PID} ]

                do

                    echo "Waiting for Redis to shutdown ..."

                    sleep 1

                done

                echo "Redis stopped"

        fi

        ;;

    *)

        echo "Please use start or stop as first argument"

        ;;

esac

 

 

再次执行

chkconfig --add redis 

chkconfig --list redis 查看

redis           0:off   1:off   2:on    3:on    4:on    5:on    6:off

以上redis文件中所修改地方的解释:

#chkconfig:  2345 90 10 添加注册redis,冒号后边有空格

# description:  Redis is a persistent key-value database

上边的这行信息必须添加,不添加执行不成功,原因暂时不知道。

设置EXECCLIEXECPIDFILECONF参数对应的路径,一定要和前边安装时设定的路径保持一致。

 $EXEC $CONF & 后台运行

4.1 服务启动方式启动redis

[root@localhost init.d]# service redis start

Starting Redis server...

[4223] 08 May 17:30:04.706 # Fatal error, can't open config file '/home/rediscmcc/config/6379.conf'

启动过程中找不到6379.conf文件

解决方法:

Copy redis配置文件到config目录下

先备份config下的redis.conf文件

Cp /home/rediscmcc/config/redis.conf /home/rediscmcc/config/redis.conf.bak

Mv /home/rediscmcc/config/redis.conf /home/rediscmcc/config/6379.conf

修改6379.conf配置文件中信息,保持和/etc/re.d/init.d/redis中文件设置保持一致

只需要修改以下配置

pidfile /home/rediscmcc/data/redis_6379.pid

 

启动redis程序

# service redis start

Starting Redis server...

[root@localhost src]# service redis stop

Stopping ...

Redis stopped

Redis主从复制

5.1 原理:

Reids的主从复制功能很强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构。

5.2 Redis主从复制的特点

1.master可以有多个slave

2.除了多个slave连到相同的master外,slave也可以连接其他slave形成图状结构

3.主从复制不会阻塞master。也就是说当一个或多个slavemaster进行初次同步数据时,master可以继续处理client发来的请求。相反slave在初次同步数据时则会阻塞不能处理client的请求。

4.主从复制可以用来提高系统的可伸缩性,我们可以用多个slave 专门用于client的读请求,比如sort操作可以使用slave来处理。也可以用来做简单的数据冗余

5.可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化。

5.3 redis主从复制过程

当设置好slave服务器后,slave会建立和master的连接,然后发送sync命令。无论是第一次同步建立的连接还是连接断开后的重新连 接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存起来。后台进程完成写文件 后,master就发送文件给slaveslave将文件保存到磁盘上,然后加载到内存恢复数据库快照到slave上。接着master就会把缓存的命 令转发给slave。而且后续master收到的写命令都会通过开始建立的连接发送给slave。从masterslave的同步数据的命令和从 client发送的命令使用相同的协议格式。当masterslave的连接断开时slave可以自动重新建立连接。如果master同时收到多个 slave发来的同步连接命令,只会使用启动一个进程来写数据库镜像,然后发送给所有slave

5.4 Redis主从复制配置

5.5 主从配置方式

主:10.15.62.115  端口:6379   目录名:redisma

从:10.15.62.115 端口:16379  目录名:redissa

主从配置区别如下:

< pidfile /home/redisma/data/redis.pid

> pidfile /home/redissa/data/redis.pid

 

< port 6379

> port 16379

 

< logfile "/home/redisma/logdir/6379.log"

> logfile "/home/redissa/logdir/16379.log"

 

< dir /home/redisma/data

> dir /home/redissa/data

 

< # slaveof <masterip> <masterport>

> slaveof 10.15.62.238 6379

 

分别启动主从redis测试数据同步

redis

[root@localhost redisma]# bin/redis-cli -p 6379

      127.0.0.1:6379> set name abc

      OK

      127.0.0.1:6379> get name

      "abc"

      127.0.0.1:6379>

 

redis

      [root@localhost redissa]# bin/redis-cli -p 16379

      127.0.0.1:16379> get name

      "abc"

      127.0.0.1:16379>

 

默认是读写分离的

在从redis

     [root@localhost redisma]# bin/redis-cli -p 16379

     127.0.0.1:16379> set name 123

     (error) READONLY You can't write against a read only slave.

 

 

5.6 主从切换

模拟主redis停止工作,切换到从redis(从redis默认为只读)

停止主redis

[root@localhost redisma]# bin/redis-cli -n 6379 shutdown

[root@localhost redisma]# bin/redis-cli -p 6379

Could not connect to Redis at 127.0.0.1:6379: Connection refused

not connected>

 

将从redis设成主redis

[root@localhost redissa]# bin/redis-cli -p 16379 slaveof NO ONE

OK

 

测试从redis是否切换从主redis

[root@localhost redissa]# bin/redis-cli -p 16379

127.0.0.1:16379> set name 123

OK

127.0.0.1:16379> get name

"123"

127.0.0.1:16379>

 

原来的主redis恢复正常了,要重新切换回去

1) 将现在的主redis的数据进行保存

[root@localhost redissa]# bin/redis-cli -p 16379

127.0.0.1:6380> get name

"abc"

127.0.0.1:6380> set name 123

OK

127.0.0.1:6380> get name

"123"

127.0.0.1:6380> save

OK

127.0.0.1:6380> get name

"123"

127.0.0.1:6380>  

 

2) 将现在的主redis根目录下dump.rdb文件拷贝覆盖到原来主redis的根目录

3) 启动原来的主redis

4) 在现在的主redis中切换

[root@localhost redisssa]# bin/redis-cli -p 16379 slaveof 10.15.62.238 6379

OK

附件(配置文件名词解释)

1、默认不是以守护进程的方式运行,修改此配置项,使用yes是以后台daemon方式运行

daemonize yes redis

2、当redis以守护进程运行时,默认会生产pid文件,指定pidfile文件路径;

pidfile /home/rediscmcc/data/redis.pid 

3redis监听端口;

port 6379 

 4、指定log日志文件和数据库文件存放目录路径

logfile "/home/rediscmcc/logdir/redis.log"

指定数据库文件存放目录;

dir /home/rediscmcc/data 

4. 绑定的主机地址

bind 127.0.0.1

5.请求超时时间,如果指定为0,表示关闭该功能

timeout 300

6. 指定日志记录级别,Redis总共支持四个级别:debugverbosenoticewarning,默认为verbose

loglevel verbose

7. 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null

logfile stdout

8. 设置数据库的数量,默认数据库为0,可以使用SELECT <dbid>命令在连接上指定数据库id

databases 16

9. 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合

save <seconds> <changes>

Redis默认配置文件中提供了三个条件:

save 900 1

save 300 10

save 60 10000

分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。

10. 指定存储至本地数据库时是否压缩数据,默认为yesRedis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大

rdbcompression yes

11. 指定本地数据库文件名,默认值为dump.rdb

dbfilename dump.rdb

12. 指定本地数据库存放目录

dir ./

13. 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步

slaveof <masterip> <masterport>

14. master服务设置了密码保护时,slav服务连接master的密码

masterauth <master-password>

15. 设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH <password>命令提供密码,默认关闭

requirepass foobared

16. 设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息

maxclients 128

17. 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap

maxmemory <bytes>

18. 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no

appendonly no

19. 指定更新日志文件名,默认为appendonly.aof

appendfilename appendonly.aof

20. 指定更新日志条件,共有3个可选值: 

no:表示等操作系统进行数据缓存同步到磁盘(快) 

always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)

everysec:表示每秒同步一次(折衷,默认值)

appendfsync everysec

21. 指定是否启用虚拟内存机制,默认值为no,简单的介绍一下,VM机制将数据分页存放,由Redis将访问量较少的页即冷数据swap到磁盘上,访问多的页面由磁盘自动换出到内存中(在后面的文章我会仔细分析RedisVM机制)

vm-enabled no

22. 虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享

vm-swap-file /tmp/redis.swap

23. 将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的(Redis的索引数据 就是keys),也就是说,vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0

vm-max-memory 0

24. Redis swap文件分成了很多的page,一个对象可以保存在多个page上面,但一个page上不能被多个对象共享,vm-page-size是要根据存储的 数据大小来设定的,作者建议如果存储很多小对象,page大小最好设置为32或者64bytes;如果存储很大大对象,则可以使用更大的page,如果不 确定,就使用默认值

vm-page-size 32

25. 设置swap文件中的page数量,由于页表(一种表示页面空闲或使用的bitmap)是在放在内存中的,,在磁盘上每8pages将消耗1byte的内存。

vm-pages 134217728

26. 设置访问swap文件的线程数,最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的,可能会造成比较长时间的延迟。默认值为4

 

vm-max-threads 4

27. 设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启

glueoutputbuf yes

28. 指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法

hash-max-zipmap-entries 64

hash-max-zipmap-value 512

29. 指定是否激活重置哈希,默认为开启(后面在介绍Redis的哈希算法时具体介绍)

activerehashing yes

30. 指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件

include /path/to/local.conf

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值