第三章(考点:3.3-3.7 数据类型与操作(会写会熟练使用) 消息订阅 持久化 主从复制 运维和哨兵怎么配,作用)
一.通用命令
- 设置set key value 查询 keys key(*)
支持模糊查询 *任意多个字符;[]括号内某个字符;?单个字符 - randomkey 随机key
- exists key判断是否存在
- type key 返回类型
- del key
- rename key newname
- select dbnum 切换到指定的数据库(默认0号)
- move key db 将当前数据库的key移到指定数据库
- ttl key 查询key的生命周期(-2即是不存在)s单位,pttl毫秒
- expire key 设置key的生命周期,s单位,pexpire毫秒
- persist key 设置key永久有效
二.STRING
- mset key value key value一次性设置多个键值
- mget key key key 一次性返回多个key的值
- setrange set key offset value2 把key的value的第offset位置换位value2
- append key value 将value追加到key的value的末尾
- getrange key start end 字符串截取
- getset key value 将给定keyu的值设置为value并返回key的旧值
- strlen key 获取字符串长度
- incr key 数字加1 decr key 数字减1
- incrby key num 数字加n decrby key num 数字减n
- setbit key offser value 设置offset对应二进制位的值
- getbit key offset 获取值的二进制表示
- bittop operation destkey key对字符串key进行位元运算,结果保存至destkey,其中operation是位元操作符
三.LIST
- lpush,rpush list value,将值插入列表的头部/尾部,返回当前列表长度
- lrange list start end 获取列表指定闭区间内的元素
- lpop/rpop list 删除并返回列表的头/尾元素
- lrem list count value 删除指定count个数的与value值相等的元素(count=0删除所有,<0从表尾开始搜索)
- ltrim list start end 修建闭区间的元素重新赋值给list
- lindex list index 获取列表中下标为index的元素
- list list index value 设置下标index的元素值为value
- llen list 统计列表的长度
- linsert list before/after pivot value 将value插入列表pivot前/后
- rpoplpush list1 list2 弹出list1中的尾元素并插入list2的头部
- blpop/brpop list timeout 指定时间内删除列表的头/尾元素
四.SET(无序集合,不存在重复元素)
- sadd set member 将元素添加到set
- smembsers set 查看所有元素
- srem set member 删除元素
- spop set count 随机删除set中的count个数元素
- srandmember set 随机返回一个元素
- sismember set member 判断member是否在set中
- scard set 获取set元素数量
- smove set1 set2 member 将set1中的member元素移动到set2
- sinter sunion sdiff set1,set2 对给定集合求交集/并集/差集,返回最终集合
- sinterstore,sunionstore,sdiffstore result set1,set2 和上类似,保存结果到result
五.ZSET(有序集合,不存在重复元素,每个集合元素都要double类型的分数,根据分数进行排序)
- zadd zset score member 将member元素和score插入zset,注意score在member前 如 zadd zset 1 jack 2 tom
- zrange zset start end [withscores] 返回指定区间内的值,可以携带score
- zrangebyscore zset min max[withscores] 返回zset中score介于min和max之间的元素(闭区间)
- zrank zset member 获取zset中member的排名(score从小到大)
- zrevrank zset member 获取排名(从大到小) 排名最前0
- zremrangebyscore zset min max 删除zset中score介于min和max之间元素,返回被删除元素数量
- zremrangebyrank zset start stop 删除排名在start和stop闭区间内的元素,返回被删除元素数量
- zrem zset member 删除元素
- zcard zset 获取元素数量
- zcount zset min max 获取score在min和max之间的元素数量
- zinterstore/zunionstore/ result zset1 zset2计算给定集合的交集、并集
六.HASH(哈希表)
- hset hash field value 将哈希表hash中的filed的值设为value
- hgetall hash 获取所有field和value
- hmset hash field value 将域值对设置到哈希表中
- hget hash field 获取hash中field的值
- hmget hash field 返回包含指定域的关联值的表,顺序和参数顺序一致
- hdel hash fidld 删除指定域
- heln hash 统计域数量
- hexists hash field 判断field是否存在
- hincrby hash field value 在key中field的值增加整形值value
如 hincrby hash age 10 年龄加10 - hincrby float 同上,增加浮点值
- hkeys hash 获取所有field
- hvals hash 获取所有值
七.Redis事务
-
事务:本质是一组命令的集合,事务中的所有命令都会序列化,按顺序执行不会被其他命令插入
-
事务的ACID特性(原子性、一致性、独立性、持久性)
-
MULTI命令开启事务:用于标记事务的开始
-
EXEC命令:完成事务,执行
-
DISCARD:失败,取消事务
-
悲观锁:每次取数据时都给数据加锁,阻塞别人拿数据;数据记录很多时并发差,一致性好;常用于数据备份、格式化
-
乐观锁:每次更新后提交时检查数据是否最新,不是就放弃更新;吞吐量高,并发性好;常用于多读应用
-
事务的watch命令 watch key key1 监听事务的键值是否发生变化,都没有被修改,事务才能执行成功;执行了exec或discard后会自动取消watch监控
-
Unwatch 取消所有watch命令对键的监视
-
事务过程
-
redis是部分支持事务或支持简单事务,不完全满足原子性特征
八.redis消息订阅
- 消息订阅发布模式是一种常用的设计模式,角色包含主题、订阅者、发布者
- 发布者与订阅者具有一对多的关系,之间存在依赖性,订阅者必须订阅主题后才能接收到发布者发布的信息
- publish channel message 发布者将消息发送给指定频道,返回接收到消息的客户端的数量
- subscribe channel 客户端订阅消息频道
- unsubscribe channel 取消订阅指定频道
- psubscribe pattern 工具指定模式订阅所有符合pattern的频道,如h?llo h*llo
九.RDB持久化
- 持久化:采用某种方式将数据从内存保存到硬盘中,使得服务器重启之后可以工具硬盘保存的数据进行恢复
- RDB持久化:根据指定的规则“定时”将内存中的数据保存到硬盘中;每隔N分钟或N次写操作后,自动将内存中的所有数据生成副本,经过压缩存储在硬盘目录
- 优点:文件体积小,适用于进行数据库数据备份;恢复数据时的速度块;并行性好
- 缺点:两个RDB保存点间如果发生断电会损失期间写入的数据;数据量庞大时操作耗时、影响服务器性能;RDB文件存在兼容问题
- 适用场景:可以接收短时间的数据丢失,RDB对Redis的性能更有利;RDB文件小、恢复块,灾难恢复(有快速恢复要求的)常用RDB文件
十.AOF持久化
- AOF持久化:保存服务器执行的所有写操作命令到单独的日志文件中;服务器重启时,通过加载日志文件中的命令执行并恢复数据;实时性更好
- AOF重写:将内存中的数据逆化成命令写入AOF日志;重写会丢弃过期的数据和无效的命令
- 服务器启动后会优先使用AOF文件进行恢复数据库(而不是RDB)
- RDB数据恢复的速度快,因为其是数据的内存映射,直接载入内存即可
- 优点:安全性好、兼容性好
- 缺点:AOF文件体积会逐渐变大,导致加载速度慢,影响数据库状态的恢复速度,性能快速下降;数据恢复速度慢于RDB文件恢复数据的速度
- 选择:建议同时使用AOF和RDB,最大限度保证数据的持久性和安全性
十一.Redis集群配置和主从复制
- Redis集群作用:主从备份,防止主机宕机造成数据丢失;读写分离,减轻主节点压力;任务分离,如从服务器分担备份工作与计算工作
- 集群星型结构:一主多从,中心化较为严重,主机宕机后修改的slave数量也多
- 集群线型结构:从服务器也有自己的从服务器,master宕机后切换主从关系简单
- Redis主从复制:slave对master进行复制,master中数据更新后自动同步到从服务器上,其中master以写为主,slave以读为主
- 全量同步:slave初始化阶段,将master所有数据都复制一份
增量同步:master执行命令就从slave发送相同写命令,slave接收并执行
Redis策略:无论如何,先尝试增量同步,如不成功再进行全量同步 - 主从复制缺陷:master同步到slave有一定延迟,系统繁忙时延迟更严重;每次slave断开再连接master都要重新同步,如果多台slave同时启动困难IO剧增
十二.Redis运维和哨兵模式
- time命令:获取当前服务器的时间
- dbsize:统计当前数据库中键的数量
- bgrewriteaof:执行AOF文件重写操作
- save:保存RDB数据到磁盘
- bgsave:异步方式将快照数据保存到当前数据库的磁盘中
- lastsave:获取最近一次redis成功将数据保存到磁盘上的时间
- flushall:清空所有数据库所有键
- flushdb:清空当前数据库所有键
- info:查看redis服务器的各种信息
- config get:获取redis服务器的配置参数
- config set:修改redis服务器的配置
- shutdown:关闭服务器
- 哨兵模式:由一个或多个哨兵组成的哨兵系统
监控:监控服务器是否发生故障
通知:master发生故障时,立即发送通知
自动故障转移:根据优先级从slave选举出一台新的master,代替继续处理命令及完成相关工作