Redis

一、Redis介绍

redis是种非关系型数据库,是以键值对形式来存储的,基于内存数据存储,被用作为 数据库 缓存 消息中间件。

特点:高性能key/value内存型数据库,支持丰富的数据类型,支持持久化,单线程、单进程。

二、Redis数据库的相关指令

1. 数据库操作命令

# 1.Redis中库说明
- 使用redis的默认配置器动redis服务后,默认会存在16个库,编号从0-15
- 可以使用select 库的编号 来选择一个redis的库

# 2.Redis中操作库的指令
- 清空当前的库  FLUSHDB
- 清空全部的库  FLUSHALL

# 3.redis客户端显示中文
-	./redis-cli  -p 7000 --raw

2. 操作key相关指令

# 1.DEL指令
- 语法 :  DEL key [key ...] 
- 作用 :  删除给定的一个或多个key 。不存在的key 会被忽略。
- 可用版本: >= 1.0.0
- 返回值: 被删除key 的数量。 

# 2.EXISTS指令
- 语法:  EXISTS key
- 作用:  检查给定key 是否存在。
- 可用版本: >= 1.0.0
- 返回值: 若key 存在,返回1 ,否则返回0。

# 3.EXPIRE
- 语法:  EXPIRE key seconds
- 作用:  为给定key 设置生存时间,当key 过期时(生存时间为0 ),它会被自动删除。
- 可用版本: >= 1.0.0
- 时间复杂度: O(1)
- 返回值:设置成功返回1 。

# 4.KEYS
- 语法 :  KEYS pattern
- 作用 :  查找所有符合给定模式pattern 的key 。
- 语法:
	KEYS * 匹配数据库中所有key 。
	KEYS h?llo 匹配hello ,hallo 和hxllo 等。
	KEYS h*llo 匹配hllo 和heeeeello 等。
	KEYS h[ae]llo 匹配hello 和hallo ,但不匹配hillo 。特殊符号用 "\" 隔开
- 可用版本: >= 1.0.0
- 返回值: 符合给定模式的key 列表。

# 5.TTL
- 语法 :   TTL key
- 作用 :   以秒为单位,返回给定key 的剩余生存时间(TTL, time to live)。
- 可用版本: >= 1.0.0
- 返回值:
	当key 不存在时,返回-2 。
	当key 存在但没有设置剩余生存时间时,返回-1 。
	否则,以秒为单位,返回key 的剩余生存时间。
- Note : 在Redis 2.8 以前,当key 不存在,或者key 没有设置剩余生存时间时,命令都返回-1 。

# 6.RENAME
- 语法 :  RENAME key newkey
- 作用 :  将key 改名为newkey 。当key 和newkey 相同,或者key 不存在时,返回一个错误。当newkey 已经存在时,RENAME 命令将覆盖旧值。
- 可用版本: >= 1.0.0
- 返回值: 改名成功时提示OK ,失败时候返回一个错误。

# 7.TYPE
- 语法 :  TYPE key
- 作用 :  返回key 所储存的值的类型。
- 可用版本: >= 1.0.0
- 返回值:
	none (key 不存在)
	string (字符串)
	list (列表)
	set (集合)
	zset (有序集)
	hash (哈希表)

三、redis的五种基本数据类型

String:

字符串,应用场景 验证码

命令说明语法
set设置一个key/valueset key value
get获取key的valueget key
setex设置key的存活时间setex key time value
setnx:key存在不做操作,不存在则添加setnx key value
incr:根据数值类型的+1操作incr key
List:

特点:元素有序,值可以重复 ,应用场景:商品列表

命令说明语法
lpush将某个值加入到一个key列表头部lpush 集合名 元素名
lpop返回并移除列表左边的第一个元素lpop 集合名
lrange获取某一个下标区间内的元素,从0开始lrange 集合名 0 结束索引
llen获取列表元素个数llen 集合名
llem删除重复元素lrem 集合名 删除的个数 元素名
Set:

特点:元素无序,值不可重复 ,应用场景:好友可能认识的人

命令说明语法
sadd为集合添加元素sadd 集合名 元素名
smembers显示集合中所有元素 无序smembers 集合名
scard返回集合中元素的个数scard 集合名
srem从集合中删除一个元素srem 集合名 元素名
sdiff差集sdiff 集合1 集合2
sinter交集sinter 集合1 集合2
ZSet:

特点:排序,值不可重复,应用场景:排行榜

命令说明语法
zadd添加一个有序集合元素ZADD KEY_NAME SCORE1 VALUE1
zcard返回集合的元素个数zcard 集合名
zrange(升序)zrevrange(降序)返回一个范围内的元素zrange 集合名 开始索引 结束索引
zrem移除某一个元素zrem 集合名
Hash:

特点:map机构 key value key 无序

命令说明语法
hset设置一个key/value对hset 集合名 key
hget获得一个key对应的valuehegt 集合名 key

四、持久化机制

Redis官方提供了两种不同的持久化方法来将数据存储到磁盘当中:

  • RDB 快照 将某一时候的数据添加到磁盘当中,是redis默认开启的持久化方式。

    快照生成方式 :

    ​ BGSAVE:客户端使用BGSAVE来创建一个快照时,当接收到客户端的BGSAVE命令时,redis会调用fork来创建一个子进程,然后让子进程负责将快照写入磁盘,父进程继续处理请求。

    ​ SAVE:客户端使用SAVE来创建一个快照,接收SAVE命令的redis服务器在快照创建完毕之前,不在响应任何其他的命令。

  • AOF只追加日志文件 将所有客户端执行的写命令记录到日志文件当中,需要手动开启。

    # 1.开启AOF持久化
    - a.修改 appendonly yes 开启持久化
    - b.修改 appendfilename "appendonly.aof" 指定生成文件名称
    
    # 2.everysec 【推荐】
    - 说明: 每秒执行一次同步显式的将多个写命令同步到磁盘
    - 解释: 为了兼顾数据安全和写入性能,用户可以考虑使用everysec选项,让redis每秒一次的频率对AOF文件进行同步;redis每秒同步一次AOF文件时性能和不使用任何持久化特性时的性能相差无几,而通过每秒同步一次AOF文件,redis可以保证,即使系统崩溃,用户最多丢失一秒之内产生的数据。
    

    当这个AOF的文件超过,设定的阈值,会进行一个AOF重写的操作,通过命令的方式进行重写一个AOF文件,替换原有的文件。

    五、主从复制

    ​ Redis主从复制,是常见的数据备份的操作,可以实现数据的冗余备份,读写分离等功能。Redis主从复制的原理是将一个Redis实例的数据复制到多个Redis实例上,其中一个实例作为主节点(master),剩余的作为从节点(Slave)。主节点负责接受写的操作,并将写的操作同步给从节点。从节点的话只能接收读的请求,不处理写请求从而保证了数据的一致性。

    六、哨兵机制

    ​ 哨兵机制是Redis高可用性的重要保证。当主节点发生故障的时候,哨兵机制可以自动 选举新的主节点,将原来的从节点提升为主节点,并重新建立新的主从复制关系。

    七、缓存常见的问题

    1. 缓存穿透:

    客户端请求的数据,在数据库和redis中都不存在,这样的缓存永远都不会生效,请求i最终都到了数据库上。

    解决方案:

    • 当在数据库查询的结果也不存在的时候,可以给redis返回一个null值,并设置TTL(过期时间)。
      在这里插入图片描述

    • 布隆过滤器
      在这里插入图片描述

    2. 缓存击穿

    • 热点Key问题,一个被高并发访问且业务复杂的key突然失效,无数的请求瞬间给数据库带来了巨大的冲击。

      解决办法:添加互斥锁,逻辑过期

      在这里插入图片描述

    3. 缓存雪崩

    • 同一时间内,大量的缓存key失效或者是redis宕机,造成大量的请求到达了数据库,带来巨大的压力。

      在这里插入图片描述

的请求瞬间给数据库带来了巨大的冲击。

解决办法:添加互斥锁,逻辑过期

[外链图片转存中...(img-Slzawymk-1719041855705)]

3. 缓存雪崩

  • 同一时间内,大量的缓存key失效或者是redis宕机,造成大量的请求到达了数据库,带来巨大的压力。

    [外链图片转存中…(img-Q3zgiU92-1719041855705)]

解决方案:给key设置随机的TTL,搭建集群防止宕机。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值