一: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的五大数据类型
- redis String (字符串)
- redis Hash (哈希)
- redis list (列表)
- redis set (集合)
- 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
含义:
三种行为触发一个就执行保存操作:
900秒内(15分钟),如果至少更换了一个key
300秒内(5分钟),如果至少10个key发生变化
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 要改。且端口一定要开放