redies 学习笔记

1:  redis解压完成之后直接执行make命令; 可选步骤: make test  测试编译情况
(可能出现: need tcl  >8.4这种情况, yum install tcl)
可能会出现缺少依赖包:
yum install cpp
yum install binutils
yum install glibc
yum install glibc-kernheaders
yum install glibc-common
yum install glibc-devel
yum install gcc
yum install make
--------------------- 
如果报致命错误:
make MALLOC=libc

2 安装到指定的目录,比如 /usr/local/redis
make  PREFIX=/usr/local/redis install
注: PREFIX要大写

3: make install之后,得到如下几个文件
redis-benchmark  性能测试工具
redis-check-aof  日志文件检测工(比如断电造成日志损坏,可以检测并修复)
redis-check-dump  快照文件检测工具,效果类上
redis-cli  客户端
redis-server 服务端
 
4: 复制配置文件
Cp /path/redis.conf /usr/local/redis

5: 启动与连接
/path/to/redis/bin/redis-server  ./path/to/conf-file
例:[root@localhost redis]# ./bin/redis-server ./redis.conf 

6: 让redis以后台进程的形式运行
编辑conf配置文件,修改如下内容;
daemonize yes

8.:启动客户端
   ./bin/redis-cli
  

###redies 常用的命令

get key	 	获取key的值
set key pl	给key赋值(会覆盖原有的值)
del key		删除key
exists key	判断key是否存在
flushdb 	清空存储区

* ? [] 通配符
rename key newkey 	将key改名为newkey(已存在的会被覆盖)
renamenx key newkey 同上(已存在的改名失败)

select 1	查看1号空间
move key 1	将key移动到1空间

ttl key			查看key 过期时间(-1:永久   -2:不存在)
expire key 100	设置key的有效时间(秒)
persist key 	设置key时间永久有效

mset key1 value1 key2 value2 ke3 value3 设置多个值
mget key1 key2 key1	设置多个值
--------------------------------
字符串操作
set key pl ex 10	(赋值,并设置有效时间)
set key pl xx		给已经存在的key赋值
set key pl nx		给不存在的key赋值
append key value	追加值
getrang key 1 4  	获取指定范围的值
getset key value 	读取key的值,并设置新的值
incr key			加1
decr key			减一
incrby key 3		加3
incrbyfloat key 1.5 浮点型增加
setbit key 2 1 		将大写字母变为小写
setbit key 2 0 		大写变为小写
场景:
存储json 信息; 计数器
-----------------------------------------
链表操作
rpush key value		链表右侧赋值
lpush key value 	链表左侧赋值
lrange key start stop 返回链表中的元素(0-1)返回全部
ltrim key start stop  删除链表的值
lpop key 			  弹出值
lrem key count value  删除count个值为value的0
llen key			  返回链表的长度
linsert key before index value 在指定位置插入value
rpoplpush key1 key2   key1弹出,key2 加入
brpop key time 		  弹出(没值时等待)
场景: 可以实现消息队列功能 lpush+brpop
---------------------------------------------------------
集合 操作
sadd key val1 val2 va3		集合添加
semembers	key 			查看集合
srem sex val1				删除集合下的值
spop key 					随机弹出个val
srandmember key 			返回集合中一个元素
sismember key value 		判断value 是否在key 集合中
scard key 					判断集合中有多少个元素
smove key1 key2 value 		将value从key1移动到key2
sinter key1 key2 key3		交集
sunion key1 key2 key3		并集
sdiff key1 key2				差集
sinterstore saveKey key1 key2 key3 交集并保存
场景: 
sadd 加标签
spop/srandmember  随机数
sadd+sinter  社交共同好友
---------------------------------------------------------
redies 事务
multi 		事务开始
---
---
exec		事务结束
discard		撤销
watch key   监视key,如果key有变,事务取消
unwatch 	取消监视

发布与订阅
publish news 'today is sunshine'  	信息发布
subscribe news 			消息订阅
psubscrible news 		通配符

动态修改信息
config set XXX true
config get XXX

退出客户端
quit

redies 持久化配置

redies 持久化配置——快照

save 900 1       900内,有1条写入,则产生快照 
save 300 1000    如果300秒内有1000次写入,则产生快照
save 60 10000    如果60秒内有10000次写入,则产生快照
(这3个选项都屏蔽,则rdb禁用)

stop-writes-on-bgsave-error yes  后台备份进程出错时,主进程停不停止写入?
rdbcompression yes     导出的rdb文件是否压缩
Rdbchecksum   yes 	   导入rbd恢复时数据时,要不要检验rdb的完整性
dbfilename dump.rdb    导出来的rdb文件名
dir ./  			   rdb的放置路径

rdb 方式保存数据, 没有达到保存条件时,会发生数据的丢失。

redies 持久化配置——aof

appendonly no # 是否打开 aof日志功能

appendfsync always   # 每1个命令,都立即同步到aof. 安全,速度慢
appendfsync everysec # 折衷方案,每秒写1次
appendfsync no      # 写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof. 同步频率低,速度快,

no-appendfsync-on-rewrite  yes: # 正在导出rdb快照的过程中,要不要停止同步aof
auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时,重写
auto-aof-rewrite-min-size 64mb #aof文件,至少超过64M时,重写

注: 在dump rdb过程中,aof如果停止同步,会不会丢失?
答: 不会,所有的操作缓存在内存的队列里, dump完成后,统一操作.

注: aof重写是指什么?
答: aof重写是指把内存中的数据,逆化成命令,写入到.aof日志里.
以解决 aof日志过大的问题.

问: 如果rdb文件,和aof文件都存在,优先用谁来恢复数据?
答: aof

问: 2种是否可以同时用?
答: 可以,而且推荐这么做

问: 恢复时rdb和aof哪个恢复的快
答: rdb快,因为其是数据的内存映射,直接载入到内存,而aof是命令,需要逐条执行

主从复制

我们将一台Redis服务器作主库(Matser),其他三台作为从库(Slave),主库只负责写数据,每次有数据更新都将更新的数据同步到它所有的从库,而从库只负责读数据。这样一来,就有了两个好处:

读写分离,不仅可以提高服务器的负载能力,并且可以根据读请求的规模自由增加或者减少从库的数量,棒极了;
数据被复制成了了好几份,就算有一台机器出现故障,也可以使用其他机器的数据快速恢复。

slaveof IP PORT

这里写图片描述

sentinel redis 监控

1、 运行时修改master-slave

1> 命令该服务不做其他redis服务的slave
	命令: slaveof on none 
	
2> 动态配置, 修改其slave-read-only 

3> 命令该服务为 masterA
	命令: slaveof ip port

2、 sentinel.config 配置

1. sentinel监听端口,默认是26379,可以修改。
port 26379

2.sentinel monitor <master-name> <ip> <redis-port> <quorum>
告诉sentinel去监听地址为ip:port的一个master,这里的master-name可以自定义,quorum是一个数字,指明当有多少个sentinel认为一个master失效时,master才算真正失效。master-name只能包含英文字母,数字,和“.-_”这三个字符需要注意的是master-ip 要写真实的ip地址而不要用回环地址(127.0.0.1)。
配置示例:
sentinel monitor mymaster 192.168.0.5 6379 2

3.sentinel auth-pass <master-name> <password>
设置连接master和slave时的密码,注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同。
配置示例:
sentinel auth-pass mymaster 0123passw0rd

4.sentinel down-after-milliseconds <master-name> <milliseconds> 
这个配置项指定了需要多少失效时间,一个master才会被这个sentinel主观地认为是不可用的。 单位是毫秒,默认为30秒
配置示例:
sentinel down-after-milliseconds mymaster 30000

5.sentinel parallel-syncs <master-name> <numslaves> 
这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
配置示例:
sentinel parallel-syncs mymaster 1

6. sentinel failover-timeout <master-name> <milliseconds>
failover-timeout 可以用在以下这些方面: 
      1. 同一个sentinel对同一个master两次failover之间的间隔时间。
      2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
      3.当想要取消一个正在进行的failover所需要的时间。  
      4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了。
配置示例:
sentinel failover-timeout mymaster1 20000

7.sentinel的notification-script和reconfig-script是用来配置当某一事件发生时所需要执行的脚本,可以通过脚本来通知管理员,例如当系统运行不正常时发邮件通知相关人员。对于脚本的运行结果有以下规则:
	若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10
	若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。
	如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。
	一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行。
1).sentinel notification-script <master-name> <script-path> 
通知型脚本:当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本,这时这个脚本应该通过邮件,SMS等方式去通知系统管理员关于系统不正常运行的信息。调用该脚本时,将传给脚本两个参数,一个是事件的类型,一个是事件的描述。如果sentinel.conf配置文件中配置了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则sentinel无法正常启动成功。
  配置示例:
 sentinel notification-script mymaster /var/redis/notify.sh
2).sentinel client-reconfig-script <master-name> <script-path>
 当一个master由于failover而发生改变时,这个脚本将会被调用,通知相关的客户端关于master地址已经发生改变的信息。以下参数将会在调用脚本时传给脚本:
       <master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>
目前<state>总是“failover”, <role>是“leader”或者“observer”中的一个。 参数 from-ip, from-port, to-ip, to-port是用来和旧的master和新的master(即旧的slave)通信的。这个脚本应该是通用的,能被多次调用,不是针对性的。
   配置示例:
   sentinel client-reconfig-script mymaster /var/redis/reconfig.sh

redis.config 中通过配置 slave-priority 100 来设置优先级, 数字越小优先级越高

Redis 集群模式

安装

wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz

wget http://rubygems.org/downloads/redis-3.3.0.gem

遇到的错误:

make报错:
cd src && make all
make[1]: Entering directory /usr/local/redis-5.0.0/src' CC adlist.o In file included from adlist.c:34:0: zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory #include <jemalloc/jemalloc.h> ^ compilation terminated. make[1]: *** [adlist.o] Error 1 make[1]: Leaving directory/usr/local/redis-5.0.0/src’
make: *** [all] Error 2
解决办法:
编辑src/.make-settings里的OPT,改为OPT=-O2 -march=x86-64

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章