Redis知识点

数据库操作

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 get

getset 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)建立高可用缓存集群

相关推荐
搬码后生仔21 分钟前
SQLite 是一个轻量级的嵌入式数据库,不需要安装服务器,直接使用文件即可。
数据库·sqlite
码农君莫笑23 分钟前
Blazor项目中使用EF读写 SQLite 数据库
linux·数据库·sqlite·c#·.netcore·人机交互·visual studio
江上挽风&sty25 分钟前
【Django篇】--动手实践Django基础知识
数据库·django·sqlite
向阳121828 分钟前
mybatis 动态 SQL
数据库·sql·mybatis
胡图蛋.30 分钟前
什么是事务
数据库
小黄人软件32 分钟前
20241220流水的日报 mysql的between可以用于字符串 sql 所有老日期的,保留最新日期
数据库·sql·mysql
张声录137 分钟前
【ETCD】【实操篇(三)】【ETCDCTL】如何向集群中写入数据
数据库·chrome·etcd
无为之士43 分钟前
Linux自动备份Mysql数据库
linux·数据库·mysql
小汤猿人类1 小时前
open Feign 连接池(性能提升)
数据库
呆呆小雅1 小时前
C#关键字volatile
java·redis·c#