数据库操作
select 数据库编号
dbsize 获取当前数据库键值对数量
flushdb 清空当前数据库
save 将数据库保存至磁盘
bgsave 将数据异步保存至磁盘
lastsave 获取最后一次成功保存的unix时间
通用数据库操作
keys 格式 查看符合格式的key , * 为通配符
exist key1[ key2 ... ] 查看是否存在一至多个指定的key
type key 按key查看value的数据类型
del key1 [ key2... ] 按key删除一至多个键值对
rename key1 [ key2... ] 重命名key1,如果key2已经存在其值会被覆盖
move key 数据库编号 按key将一个键值对移动到指定数据库
cope key1 key2 将key1的值拷贝给key2
一、字符串操作
set key value 添加/修改一个键值对
get key 按key获取value
mset key1 value1 [ key2 value2 ... ] 添加/修改一至多个键值对
mget key1 [ key2 ... ] 按key获取一至多个value
append key value 在原有value后追加内容
strlen key 查看字符串长度
getrange key startindex endindex 获取范围时[ startindex,endindex ]的子串
set key value nx 仅在key不存在时,添加一个键值对setnx key value
set key value xx 仅在key 已存在时,修改一个键值对
set key value getgetset key value 修改一个键值对并返回原值,原值不存在则返回nil
msetnx key1 value1 [ key2 value2 ... ] 批量版setnx
如果字符串的内容是整数
incr key 按key 创建值为1的value,或使value增长(increase)1
incrby key 数值 按key使value增长 (increase)给定数值
decr key 按key使value减小1
decrby key 数值 按key使value减小给定数值
临时值键对
以下支持各种数据类型
expire key 秒数 设定一个生存时间
ttl key 查看生存时间的剩余秒数
pexpire key 毫秒版 pexpire
pttl key 毫秒版 ttl
persist key 持久化(取消生存时间)
二、散列表
hset key field value 添加或者修改hash类型key的field的值
hget key field 获取一个hash类型key的field的值
hmset 批量添加多个hash类型key的field的值
hmget 批量获取多个hash类型key的field的值
hgetall 获取一个hash类型的key中的所有的field和value
hkeys 获取一个hash类型的key中的所有的field
hincrby 让一个hash类型key的字段值自增并指定步长hsetnx 添加一个hash类型的key的field值,前提是这个field不存在,
否则不执行
三、列表(List)
LPUSH key value1 value2 ...:将一个或多个值插入到列表的头部。
RPUSH key value1 value2 ...:将一个或多个值插入到列表的尾部。
**LPOP key :**移除并返回列表的第一个元素。
RPOP key:移除并返回列表的最后一个元素。
LRANGE key start stop:获取列表指定范围内的元素。
LINDEX key index:获取列表中指定索引的元素。
LLEN key:获取列表的长度。
LTRIM key start stop:对列表进行修剪,只保留指定范围内的元素。
四、集合(Set)
SADD key member1 member2 ...:向集合添加一个或多个成员。
SREM key member:移除集合中的一个或多个成员。
SPOP key:随机移除并返回集合中的一个成员。
SISMEMBER key member:检查成员是否是集合的成员。
SCARD key:获取集合的成员数。
SMEMBERS key:获取集合的所有成员。
SDIFF key1 key2 ...:返回一个或多个集合的差集。
SINTER key1 key2 ...:返回一个或多个集合的交集。
SUNION key1 key2 ...:返回一个或多个集合的并集。
五、有序集合(Sorted Set)
ZADD key score1 member1 score2 member2 ...:向有序集合添加一个或多个成员,或更
新已存在成员的分数。
ZREM key member:移除有序集合中的一个或多个成员。
ZRANGE key start stop [WITHSCORES]:获取有序集合中指定分数范围的成
员。
ZREVRANGE key start stop [WITHSCORES]:获取有序集合中指定分数范围的成员,
分数从高到低排序。
ZRANK key member:获取成员在有序集合中的排名。
ZSCORE key member:获取成员的分数。
ZCARD key:获取有序集合的成员数。
ZCOUNT key min max:获取有序集合中指定分数范围内的成员数。
ZRANGEBYSCORE key min max [WITHSCORES]:获取有序集合中指定分数范围内的成员。
六、缓存击穿、缓存穿透、缓存雪崩产生原因以及常用解决方法
(一)缓存击穿
1.原因
某些热点key 到达了过期的时间点,此时刚好有大量的并发请求需要查询这个key,从而导致并发请求直接打到了数据库,这就是缓存击穿
2.解决方案
(1)提前将热门数据放入Redis缓存
(2)对热门key进行监控
(3)对不同级别的key设置不同的缓存时间
(4)设置分布式锁
(二)缓存穿透
1.原因
由恶意攻击导致,黑客通过伪造非法的id,查询数据库中不存在的key,导致经过Redis缓存时:判断key 不存在,则直接查DB,最终导致所有请求全部达到了DB中,造成缓存穿透
2.解决方案
(1)缓存一个特定的值,代表数据库中不存在,如空值
(2)使用Redis布隆过滤器:如果不存在那就一定不存在,如果存在则不一定存在
(3)设置有规律的id,如果不满足规则条件则拦截
(三)缓存雪崩
原因1
大量key 同时过期,导致所有请求全部打到DB中
解决方案1
(1)缓存时间最好不要设置一样,可以上下波动一个阈值
(2)服务降级
原因2
缓存中间件直接宕机
解决方案2
(1)限流
(2)熔断
(3)建立高可用缓存集群