JavaWeb-SpringBoot-Redis基础


一、概述

Redis是一个基于内存的key-value结构数据库。

  • 基于内存存储,读写性能高
  • 适合存储热点数据(热点商品、资讯、新闻)

二、下载安装

Redis-Windows 百度网盘
Redis客户端管理工具-Window 百度网盘
Redis-Linux 百度网盘

Redsi是绿色版的,解压即可使用。

三、启动停止

鼠标点击启动

在这里插入图片描述

命令行启动

// 服务端
redis-server.exe redis.windows.conf

// 客户端
redis-cli.exe -h localhost -p 6379 -a 密码

Redis设置密码:修改redis.windows.conf

在这里插入图片描述在这里插入图片描述

四、常用数据类型

Redis存储是的key-value结构的数据,其中key是字符串类型,而value有常用的五种数据类型:

  • 字符串 String
  • 哈希 Hash
  • 列表 List
  • 集合 Set
  • 有序集合 Zset

在这里插入图片描述

五、常用命令

5.1 字符串操作

命令说明案例
SET key value设置指定key的值set name zhangsan
GET key获取指定key的值get name
SETEX key seconds value设置指定key的值,并将key的过期时间设置为seconds秒setex code 30 abc123
SETNX key value只有在key不存在时设置key的值setnx name lisi
DEL key[key1 key2]删除多个键del username age sex

5.2 哈希操作

Redis hash是一个String类型的 field和value的 映射表,hash特别适合用于存储对象

在这里插入图片描述

命令说明案例
HSET key field value将哈希表key中的字段field的值设置为valuehset user username li
HGET key field获取存储在哈希表中指定字段的值hget user username
HDEL key field删除存储在哈希表中的指定字段hdel user password
HKEYS key获取哈希表中所有字段hkeys user
HVALS key获取哈希表中所有的值hvals user

5.3 列表操作

Redis列表是简单的字符串列表,按照插入顺序排序。

在这里插入图片描述

命令说明案例
LPUSH key value1[value2]将一个或多个值插入到列表的头部【按照插入顺序降序排序】lpush names zhangsan lisi wangwu
LRANGE key start stop获取列表指定范围内的元素【先插入的数据在后面】lrange names 0 -1【查询列表的全部数据】
lrange names 0 1【查询列表的指定顺序】
RPOP key移除并获取列表最后一个元素rpop names
LLEN key获取列表长度llen names

5.4 集合操作

Redis set是String类型的无序集合。集合成员是唯一的,集合中不能出现重复的元素。

在这里插入图片描述

命令说明案例
SADD key member1 member2向集合中增加一个或多个元素sadd name1 zhangsan lisi wangwu
SMEMBERS key返回集合中的所有元素smembers name1
SCARD key获取集合的元素数scard name1
SINTER key1 key2返回给定所有集合的交集sinter name1 name2
SUNION key1 key2返回给定所有集合的并集sunion name1 name2
SREM key member1 member2删除集合中一个或多个成员srem name1 zhangsan lisi

5.5 有序集合操作

Redis有序集合是String类型元素的集合,且不允许有重复的元素每个元素都会关联一个Double类型的分数.

在这里插入图片描述

命令说明案例
ZADD key score1 member1 score2 member2向有序集合添加一个或多个元素【按照分数升序排序】zadd age 1.0 22 2.0 25
ZRANGE key start stop withscores通过索引区间返回有序集合中指定区间内的元素zrange age 0 -1 withscores
ZINCRBY key increment member有序集合中对指定成员的分数加上增加 incrementzincrby age 2 18
ZREM key member1 member2移除有序集合中的一个或多个成员zrem age 22

5.6 通用命令

命令说明案例
KEYS pattern查询所有复合给定模式(pattern)的keykeys * 返回所有的key
keys set* 返回以set开头的所有key
EXISTS key检查给定key是否存在:0 不存在 1 存在exists name
TYPE key返回key所存储的值的类型type name
DEL key该命令用于在key存在时删除keydel name

六、Redis缓存穿透、击穿和雪崩

6.1 Redis缓存穿透

Redis缓存穿透是一个在Redis缓存应用中可能出现的问题,当大量的数据在缓存和数据库中都查询不出来的时候,这些请求会直接的去访问数据库,导致数据库在短时间内承受大量的请求,从而导致数据库崩溃或者是性能下降的现象。

6.1.1 出现的原因

当一个不存在的数据被大量请求,由于该数据在缓存中不存在,因此每次请求都会去访问数据库,从而导致数据库崩溃或者是性能下降。
这种情况通常由于恶意攻击、缓存设置不当或者业务逻辑漏洞引起的。

6.1.2 解决方案

6.1.2.1 缓存空对象:缓存空对象并设置一定的过期时间。
  • 用户发送请求,首先查询缓存,如果存在数据则直接返回结果,如果不存在数据则查询数据库。
  • 当数据库查询到数据存入缓存中并返回结果,如果不存在数据则将NULL存入缓存中并设置过期时间。

在这里插入图片描述

优点:实现简单
缺点:

  • 耗费内存。Redis中缓存大量的空值不仅会浪费宝贵的内存,而且如果攻击者持续使用随机键进行攻击,这种策略就会失效,在这种情况下,不仅数据库可能崩溃,Redis服务也可能因为内存耗尽出现拒接写的操作。
  • 数据不一致。虽然在缓存中我们设定了较短的过期时间,但是可能出现数据库实时数据应景更新但是缓存没有过期,还是返回NULL的情况。
6.1.2.2 布隆过滤器

布隆过滤器提供一种高效的概率型检测机制,用于判断一个元素是否可能存在于一个集合内。当布隆过滤器断言某个键(KEY)不存在时,这个结论是绝对可靠的,但是它认为这个键存在时,只是表示有很高的可能性存在,尽管有一定的误判几率,但是可以有效的解决缓存穿透的问题。

  • 用户发送请求,首先会经过布隆过滤器,判断KEY是否存在,如果不存在则直接返回结果,如果存在则查询缓存
  • 如果缓存中存在数据,则直接返回结果,如果不存在则查询数据库。
  • 如果数据库中存在数据,则将KEY写入布隆过滤器,并将数据写入缓存中,将结果返回,如果不存在则直接返回结果。

在这里插入图片描述

优点:内存占用小,布隆过滤器不存储具体的值,只存储数据的哈希值,因此相比存储真实数据,占用的内存要少。
缺点:

  • 存在一定的误判情况。
  • 数据不一致。通常情况下,数据库更新数据之后,要将KEY存储到布隆过滤器中,但是如果这中间出现了网络中断就是出现数据的不一致。
6.1.2.3 其他方式
  • 热点数据缓存:将经常查询的数据进行缓存,并设置一个较长的过期时间。
  • 异步加载缓存:多个请求只有一个请求加载数据,其余请求去缓存中提取。
  • 限流和防刷极值:控制请求的频率。

6.1.3 总结

Redis缓存穿透是一个需要重视的问题,它可能对数据库造成过大的压力,影响系统的稳定性和性能,通过以上方式可以有效地减少缓存穿透的发生,从而提高系统的稳定性和性能,同时还需要根据业务场景选择合适的解决方案。

6.2 Redis缓存击穿

缓存击穿发生在高并发的系统中,当平凡访问的热点数据在缓存中过期了,这是恰好有大量的并发请求需要访问这个数据。由于缓存中的数据已经失效,这些并发请求就会转发到数据库上

  • 24
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Monly21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值