reids

一:reids的基础知识

1.启动redis: ./reids.server /xx/xx/redis.conf

2.检测reids是否启动成功: ./reids.cli -p 6379 (6379为redis的默认端口号)

输入Ping恢复pong表示成功。

3.redis默认是16个库,select x (x表示索引 0-15)命令切换数据库

库的索引从0开始,select 1表示切换到第二个库。

redis的库数量可以在reids.conf文件中修改定义:如下图

4.dbsize命令查看当前数据库的key的数量,keys * 查询当前库所有的数据, keys k?查询当前库所有以k开头的数据

5.flushdb:清空当前库数据,flushall:清空全部库数据

二.redis的五大数据类型

  1. redis String (字符串)
  2. redis Hash (哈希)
  3. redis list (列表)
  4. redis set (集合)
  5. redis zset (sorted set:有序集合)

2.常见的redis数据类型操作命令:http://redisdoc.com/

三.redis数据类型的常用命令

Redis键(key) :

keys *

exists key的名字判断某个key是否存在(1/0)

move key db –> 丛当前库中移除指定的k到指定的库中: move k2 2 (把当前库中的k2移除到第3个数据库中)

expire key 秒钟:为给定的key设置过期时间

ttl key 查看还有多少秒过期,-1表示永不过期、-2表示已过期

type key 查看你的Key是什么类型

Redis 字符串(String) :

set/get/del/append/strlen append k2 123 //在 k2后面最近123

Incr/decr/incrby/decrby,一定要是数字才能进行加减

getrange/setrange 取范围内的值/设置范围内的值: getrange k2 0 2/setrange k2 0 xxx

setex(set with expire) :setex k2 10 k2 //设置k2十秒后过期删除

setnx(set if not exist):setnx k2 123 //判断k2是存在,不存在则设置它的值为123

mset/mget/msetnx :设置/获取多个值/多个不存在:mset k1 v2 k2 v2 /mget k1 k2/msetnx k1 v1 k2 v2

getset(先get再set)

Redis列表(List):

lpush/rpush/lrange

lpop/rpop出站。(从前面开始【正顺】/从后面开始【反顺】)

lindex,按照索引下标获取元素(从上到下) lindex list01 1

llen 长度

lrem list删除n个value : lrem list01 1 3 (就是删除集合中的1个3)

ltrim list 开始index 接收index,截取指定范围的值然后赋值给key (就是截取集合中1-3索引的值):list=1234 ,ltrim list 1 3 结果为:234

rpoplpush 源列表 目的列表

lset key index value : 对集合指定的索引赋值

linsert key before/after 值1 值2 把某个值插入到某个Key的前面或者后面

Redis集合(Set)

sadd/smembers/sismember

scard ,获取集合里面有多少个元素

srem key value 删除集合中的元素

srandmember key 某个整数(随机出几个数):srandmember set 3,在set这个集合中随机去除3个数据

spop key 随机出栈 (比如:spop set01 即从set01中随便“移除”一个值出来)

smove key1 key2 ,作用是将key1里面的某个‘移除值赋值’给key2

sdiff:差集、sinter:交集、sunion:并集

Redis哈希(Hash)

kv模式不变,但是v是一个键值对

hset/hget/hmget/hgetall/hdel : hset user id 11:设置user里面的id为11

hlen

hexists key 在key里面是否存在某个值的key (1/0)

hkeys/hvals 单独获取hash里面的Key或value : hkeys user

hincrby/hincybyfloat

hsetnx : hsetnx user id 11(判断user里面是否存在id,存在则不出返回0,否则新增id 11,返回1)

Redis有序集合(zset)

在set基础上加了一个score值,之前set是 k1 v1 v2 v3

现在zset是 k1 score1 v1 score2 v2

zadd/zrange/zrange withscores

zrangebyscore key 开始score 结束score

“(“表示不包含,limit表示从第几个开始取值,取多少个

zrem key ,某score下对应的value值,作用是删除元素

zcard 获取长度

zcount key score 区间, 获取区间大小

zrank key values :获取下标值

zscore key : 对应值获取对应分数(通过v 获取 score)

zrevrank key values 值 :作用是逆序获取下标值

zrevrange:作用是反转zset里面的,比如: 13 –》31

zrevangebyscore key 和zrangebyscore 相反:zrevangebyscore key 90 60 ,zrangebyscore key 60 90

四:redis配置文件介绍

INCLUDES:可以通过includes包含,redis.conf可以作为总闸,包含其他

GENERAL:

SNAPSHOTTING:

save : 保存快照,数据保存至dump.rdb文件中

stop-writes-on-bgsave-error yes(默认yes)(stop-writes-on-bgsave-error:如果保存错误那么前台停止写)

如果配置成no,表示你不在乎数据的一致性或者有其他手段发现和控制

rdbcompression yes:对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话redis将采用laf算法进行压缩。如果你不想消耗cpu来进行压缩的话,可以设置为No

rdbchecksum yes : 在存储快照后,还可以让redis使用crc64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以设置为no

dbfilename dump.rdb : 备份文件的名称默认为:dumo.rdb

dir ./ :文件目录

五:redis的持久化

1:rdb(Redis DataBase)

官方介绍:

在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的**Snapshot**快照,

​ 它恢复时是将快照文件直接读到内存里。

是什么:

​ Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中。

​ 待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。

​ 整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能

​ 如果需要进行大规模的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比

​ AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。

Fork:

​ 作用是复制一个与当前进程一样的进程。新进程的所有数据、数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程

Redis保存的文件:

​ dump.rdb

配置位置:

​ 配置文件中的:Snapshot

含义:

三种行为触发一个就执行保存操作:

  1. 900秒内(15分钟),如果至少更换了一个key

  2. 300秒内(5分钟),如果至少10个key发生变化

  3. 60秒内,发生10000个key更改

    禁用RDB策略释放:save “”

    在执行shutdow命令是会立马生产快照dump.rdb文件

    flushall命令也会产生dump.rdb,但里面是空的无意义

    save:save时只管保存快照,其他不管,全部阻塞

    bfsave:redis会在后台异步进行快照操作,快照同时还可以响应客户端请求

    可以通过lastsave命令获取最后一次成功执行快照的时间

假如有些数据非常重要更改后要求立马备份,那么就直接执行save,如图:

如何停止:

动态所有停止RDB保存规则的方法:redis-lic config set save “”

2:aof (Append Only File)

appendonly no 默认为no,开启为Yes

appendfilename “appendonly.aof” aop数据存储数据文件名

aop三个属性

no: 不要fsync,只要让操作系统在需要的时候刷新数据就行了。更快。(不同步,设置数据时自行设置更新)
always: fsync after every write to the append only log. Slow, Safest.(每次写入仅追加日志后fsync。慢点,最安全。)
everysec: fsync only one time every second. Compromise.(每秒钟只同步一次)

默认为:appendfsync everysec

aof的重写功能:

auto-aof-rewrite-percentage 100 (默认是文件的一倍:100)
auto-aof-rewrite-min-size 64mb (默认文件大小)

— 即:当appendonly.aof文件的内容大于64的一倍时,进行重写。(压缩)

六:redis的主从复制:(一主二从,主写从读)

REPLICATION

配置规则:配从不配主

replicaof masterip masterport – masterid:主redis的地址,masterport:主redis的端口

masterauth master-password – 如果主机有设置密码,那么这个地方一定要写上主机的密码

配置后启动reids服务查看如下

role:master 表主服务器,slave表从服务器

connected_slaves:1 表示有1个从服务器连接

等等信息

七:哨兵模式:

为什么要哨兵模式:

​ 简单理解即主从模式会存在主从宕机问题,这个时候就需要程序自己去发现然后去选举新的主服务。

reids安装目录中有个:

sentinel.conf文件这个就是配置哨兵模式的文件

port 26379 为默认端口

protected-mode no 这个参数请和redis.conf配置保持一致

bind 127.0.0.1这个参数请和redis.conf配置保持一致

daemonize no 这个设置为yes 即开启后台运行开启

logfile “xx.log” 这个为哨兵日志文件配置

dir /tmp 为文件存储地址 默认为:/tmp

sentinel monitor master-name ip redis-port quorum

​ master-name :为主机名称 一般为:mymaster

​ ip :为主机ip地址

​ redis-port: 为主机端口

​ quorum :选举投票数,即有多少票通过则表示认定主机宕机,然后开始选举新的主机

sentinel monitor mymaster 127.0.0.1 6379 2

sentinel auth-pass master-name password

​ 若主机有密码则设置此项没有则不用设置,若设置那么主从的密码一定要一致

sentinel down-after-milliseconds master-name milliseconds

sentinel down-after-milliseconds mymaster 30000

主机在30s内无法访问,则认定为宕机。

sentinel parallel-syncs master-name numreplicas

**sentinel parallel-syncs mymaster 1

主从转移要有多少个主副本,这里设置为1,数量越多耗时越长。

sentinel failover-timeout master-name milliseconds

**sentinel failover-timeout mymaster 180000

指定故障转移超时(毫秒)默认是3分钟

从服务的配置和主服务器配置一样,但port 要改。且端口一定要开放