《环境部署》之Linux下的Redis分布式缓存

一、介绍

Redis是什么?
Redis 是一款依据BSD开源协议发行的高性能的,基于内存的Key-Value存储系统。它通常被称为数据结构服务器。
支持的数据结构
字符串(String), 哈希(Hashes),列表(Lists),集合(Sets),有序集合(sorted sets),位图(bitmaps),超文本日志(hyperloglogs)

二、安装&启动

下载安装包 redis-4.0.10.tar.gz
tar -zxvf redis-4.0.10.tar.gz
cd redis-4.0.10
make
启动:src/redis-server redis.conf
注意:redis的默认启动方式不是后台运行的,我们可以通过修改配置文件改变启动的一些参数
image

三、数据类型
3.1 Redis 的 Key
Redis 的 Key是二进制安全的,所有的二进制序列都可以作为key值,空字符串也可以。

3.1.1使用规则&建议
1.key的长度不要太长,占内存,查找消耗大
2.key的命名规则要规范,利于开发,利于阅读

3.1.2 key相关命令
1.查看所有的key
keys *
2.判断key是否存在
exists key 例如:exists key_test;如果 key_test存在,则返回1,不存在返回0
3.删除key
del key 例如: del key_test;如果删除成功,则返回1,删除失败返回0,key不存在,返回0
4.查看key对应的数据类型
type key 例如:type key_test;返回数据类型:string,list,set等
5.查看key剩余时间
TTL key 例如:TTL key_test; 返回剩余时间,单位为秒。如果没有设置key的失效时间,则返回-1,如果key不存在,返回-2
6.设置key的过期时间
expire key 时间(单位秒)例如:expire key_test 60;如果设置成功,返回1;设置失败返回0
7.设置key为永久的
persist key 例如:persist key_test 如果成功,返回1,失败返回0

3.2 字符串(String)
字符串结构是redis最简单的一种类型,使用set get可以操作string

3.2.1相关操作命令
1.get
获取对应的key的值,例如:get key_test,如果key_test存在,则返回key_test对应的值
2.set
设置key的值,例如:set key_test test。成功返回1,失败返回0
3.setnx
设置新的key的值,如果key存在,则设置失败,返回0;如果key不存在,设置成功,返回1
4.mset
批量设置值,例如:mset key_test1 test1 key_test2 test2
5.mget
批量获取值,例如:mgt key_test1 key_test2

3.3 列表(list)
redis的列表是基于链表实现的,这样添加和删除数据的时候非常迅速,但是基于下标索引查询的时候则会慢很多,如果需要通过下标索引查询,需要使用sorted set

3.3.1相关操作命令
1.LPUSH
在列表左端插入数据,可以同时插入多个数据。lpush key [value],如果不存在这个key,则创建这个key,并设置值。
例如:原先有key_list,值为[00,11].执行lpush key_list 33 44 55后,key_list对应的值为:[55,44,33,00,11]
2.RPUSH
在列表右端插入数据,同lpush类似
3.LRANGE
从左端开始查列表里的数据,命令:lrange key start stop 其中,start为起始坐标,stop为结束坐标
例如:Key_list的值为[55,44,33,00,11],lrange key_list 0 2 返回的结果为[55,44,33]
4.LPOP
从key最左端取出list的一个数据,并返回数据值。
命令:lpop key
例如:Key_list的值为[55,44,33,00,11],lpop key_list 返回55.key_list的值变为[44,33,00,11]
5.RPOP
从key最右端取出list的一个数据,并返回数据值。
使用,参考lpop

命令参考:http://doc.redisfans.com/index.html

四、持久化机制
4.1 Redis提供的持久化机制
1.RDB持久化
该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘
2.AOF持久化
该机制将以日志的形式,记录服务器所处理的每个操作,在redis服务器启动之初,会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的
3.无持久化
可以禁用Reids持久化功能

4.2 RDB机制的优势和劣势
4.2.1优势
1.一旦采用该方式,那么整个redis数据库将只包含一个文件,方便文件备份。
2.对于灾难恢复而言,RDB是非常不错的选择,因为我们可以轻松的将一个单独的文件压缩后再转移到其他地方
3.性能最大化。对于redis服务进程而言,在开始持久化时,它唯一需要做的只是fork出子进程,之后再由子进程完成这些持久化工作,这样就可以极大的避免服务进程执行IO操作
4.相比于AOF机制,如果数据集很大,RDB的启动效率会更高

4.2.2劣势
1.如果你想保证数据的可靠性,最大限度的避免数据丢失,那么RDB不是一个好的选择。因为系统一旦在定时持久化之前出现宕机,此前没有来得及写入磁盘的数据都将丢失
2.由于RDB通过fork子进程来协作完成数据持久化,当数据集大时,会导致整个服务器停止服务器几百毫秒,甚至是1秒

4.3 AOF机制的优势和劣势
4.3.1 优势
1.该机制可以带来更高的数据安全性,即数据持久性。redis提供了3种内存和磁盘数据同步的策略,即每秒同步,每修改同步以及不同步。
每秒同步是异步完成的,效率很高,所差的是一旦系统出现宕机现象,那么这一秒之内的修改将丢失。
每修改同步,可以视为同步持久化。即每次发生的数据变化都会立即记录到磁盘,效率较低。
2.由于该机制对日志文件的写入操作采用的append模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已存在的内容。redis-check-aof工具可以帮助我们解决数据一致性问题
3.如果日志过大,redis可以自动启用rewrite机制,即redis以append模式不断的将修改数据写入到老的磁盘文件中,同时redis还会创建一个新的文件,用于记录此期间有哪些修改命令被执行,因此在进行rewrite切换时可以更好的保障数据安全性
4.AOF包含一个格式清晰,易于理解的日志文件用于记录所有的修改操作

4.3.2 劣势
1.对于相同数量的数据集而言,AOF文件通常要大于RDB文件
2.根据同步策略不同,AOF在运行效率上往往慢于RDB,总之,每秒同步策略的效率是比较高的,同步禁用策略的效率和RDB一样

4.4 配置
4.4.1RDB持久化配置

  • Save the DB on disk:保存数据库到磁盘

  • save <秒> <更新>

  • 如果指定的秒数和数据库写操作次数都满足了就将数据库保存。

  • 下面是保存操作的实例:

  • 900秒(15分钟)内至少1个key值改变(则进行数据库保存–持久化)

  • 300秒(5分钟)内至少10个key值改变(则进行数据库保存–持久化)

  • 60秒(1分钟)内至少10000个key值改变(则进行数据库保存–持久化)

  • 注释:注释掉“save”这一行配置项就可以让保存数据库功能失效。

  • 你也可以通过增加一个只有一个空字符串的配置项(如下面的实例)来去掉前面的“save”配置。

  • save " "
    save 900 1
    save 300 10
    save 60 10000

在默认情况下,如果RDB快照持久化操作被激活(至少一个条件被激活)并且持久化操作失败,Redis则会停止接受更新操作。
-这样会让用户了解到数据没有被正确的存储到磁盘上。否则没人会注意到这个问题,可能会造成灾难。

-如果后台存储(持久化)操作进程再次工作,Redis会自动允许更新操作。

-然而,如果你已经恰当的配置了对Redis服务器的监视和备份,你也许想关掉这项功能。
-如此一来即使后台保存操作出错,redis也仍然可以继续像平常一样工作。
stop-writes-on-bgsave-error yes

-是否在导出.rdb数据库文件的时候采用LZF压缩字符串和对象?
-默认情况下总是设置成‘yes’, 他看起来是一把双刃剑。
-如果你想在存储的子进程中节省一些CPU就设置成’no’,
-但是这样如果你的kye/value是可压缩的,你的到处数据接就会很大。
rdbcompression yes

-从版本RDB版本5开始,一个CRC64的校验就被放在了文件末尾。
-这会让格式更加耐攻击,但是当存储或者加载rbd文件的时候会有一个10%左右的性能下降,
-所以,为了达到性能的最大化,你可以关掉这个配置项。

-没有校验的RDB文件会有一个0校验位,来告诉加载代码跳过校验检查。
rdbchecksum yes

  • 导出数据库的文件名称
    dbfilename dump.rdb

  • 工作目录

  • 导出的数据库会被写入这个目录,文件名就是上面’dbfilename’配置项指定的文件名。

  • 只增的文件也会在这个目录创建(这句话没看明白)

  • 注意你一定要在这个配置一个工作目录,而不是文件名称。
    dir /opt/redis-2.6.10/data
    4.4.2 AOF持久化配置
    ------------------------------ APPEND ONLY MODE -------------------------------

  • 是否开启AOF,默认关闭(no)
    appendonly yes

  • 指定 AOF 文件名
    appendfilename appendonly.aof

  • Redis支持三种不同的刷写模式:

  • appendfsync always -每次收到写命令就立即强制写入磁盘,是最有保证的完全的持久化,但速度也是最慢的,一般不推荐使用。
    appendfsync everysec -每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,是受推荐的方式。

  • appendfsync no -完全依赖OS的写入,一般为30秒左右一次,性能最好但是持久化最没有保证,不被推荐。

-在日志重写时,不进行命令追加操作,而只是将其放在缓冲区里,避免与命令的追加造成DISK IO上的冲突。
-设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no
no-appendfsync-on-rewrite no

-当前AOF文件大小是上次日志重写得到AOF文件大小的二倍时,自动启动新的日志重写过程。
auto-aof-rewrite-percentage 100

-当前AOF文件启动新的日志重写过程的最小值,避免刚刚启动Reids时由于文件尺寸较小导致频繁的重写。
auto-aof-rewrite-min-size 64mb
五 、Redis-cluster安装部署文档
注:redis集群最少要6个端口

5.1 安装
redis安装同单机安装
ruby安装
yum -y install ruby ruby-devel rubygems rpm-build

5.2 配置
A机器:
-mkdir redis_cluster
-cd redis_cluster
-mkdir 6000 6001 6002
-cp /usr/local/redis-4.0.10/redis.conf /usr/local/redis-4.0.10/redis_cluster/6000/
-cp /usr/local/redis-4.0.10/redis.conf /usr/local/redis-4.0.10/redis_cluster/6001/
-cp /usr/local/redis-4.0.10/redis.conf /usr/local/redis-4.0.10/redis_cluster/6002/
-vi /usr/local/redis-4.0.10/redis_cluster/6000/redis.conf
设置以下参数:

port 6000
daemonize yes
pidfile /var/run/redis_6000.pid
cluster-enabled yes
cluster-config-file nodes-6000.conf
A机器配置参考redis.conf
redis集群配置.zip

B机器:
-mkdir redis_cluster
-cd redis_cluster
-mkdir 6003 6004 6005
-cp /usr/local/redis-4.0.10/redis.conf /usr/local/redis-4.0.10/redis_cluster/6003/
-cp /usr/local/redis-4.0.10/redis.conf /usr/local/redis-4.0.10/redis_cluster/6004/
-cp /usr/local/redis-4.0.10/redis.conf /usr/local/redis-4.0.10/redis_cluster/6005/
-vi /usr/local/redis-4.0.10/redis_cluster/6003/redis.conf

port 6000
daemonize yes
pidfile /var/run/redis_6003.pid
cluster-enabled yes
cluster-config-file nodes-6003.conf
启动命令
nohup /usr/local/bin/redis-server /usr/local/redis-4.0.10/redis_cluster/6000/redis.conf &
nohup /usr/local/bin/redis-server /usr/local/redis-4.0.10/redis_cluster/6001/redis.conf &
nohup /usr/local/bin/redis-server /usr/local/redis-4.0.10/redis_cluster/6002/redis.conf &
nohup /usr/local/bin/redis-server /usr/local/redis-4.0.10/redis_cluster/6003/redis.conf &
nohup /usr/local/bin/redis-server /usr/local/redis-4.0.10/redis_cluster/6004/redis.conf &
nohup /usr/local/bin/redis-server /usr/local/redis-4.0.10/redis_cluster/6005/redis.conf &
启动成功

创建集群命令
gem install redis
cd /usr/local/redis-4.0.10/src/
./redis-trib.rb create --replicas 1 XXX.XXX.XXX.XXX:6000 XXX.XXX.XXX.XXX:6001 XXX.XXX.XXX.XXX:6002 XXX.XXX.XXX.XXX:6003 XXX.XXX.XXX.XXX:6004 XXX.XXX.XXX.XXX:6005
创建成功截图:
image

验证
cd /usr/local/redis-4.0.10/src
redis-cli -h XXX.XXX.XXX.XXX -c -p 6000
set testkey002 testvalue002
exit
redis-cli -h XXX.XXX.XXX.XXX -c -p 6001
get testkey002
exit
redis-cli -h XXX.XXX.XXX.XXX -c -p 6003
get testkey002
exit

转自公司技术论坛

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值