Redis 基础

这段时间学了Redis,我把网上的一些相关资料做了简单的汇总,记录在此,方便自己以后查阅以及供其他需要者参考

Redis是NoSQL(NoSQL = Not Only SQL),即非关系型数据库,主要指那些非关系型的、分布式的,且一般不保证ACID的数据存储系统,NoSQL提出了另一种理念,以键值来存储,且结构不稳定,每一个元组都可以有不一样的字段,使用这种方式,要获取用户的不同信息,不需要像关系型数据库中,需要进行多表查询,仅仅需要根据key来取出对应的value值即可。

Redis的数据存储在内存中,所以读写速度很快,Redis一般应用于缓存,分布式锁等场景。Redis中的数据一般以键值对的形式存储,有五种数据结构,同时还支持事务。

 

1.Redis安装

具体安装步骤可以看这篇文章,https://www.runoob.com/redis/redis-install.html 包括了在不同环境下的安装步骤。

安装完后,在window环境下,双击打开redis-server.exe文件,开启后会弹出窗口显示如下

然后双击redis-cli.exe文件,就可以开始使用了。(注意前面的redis-server窗口不要关闭)

通过set和get的方式存储和取出数据

 

2.Redis数据类型

Redis的数据以键值对的形式存储,键key为string类型

而值value有五种存储形式:

  • 字符串类型 string
  • 哈希类型 hash
  • 列表类型 list(允许重复元素)
  • 集合类型 set(不允许重复元素)
  • 有序集合类型 zset(sorted set 即有序集合,不允许重复元素)

Redis的常见操作可以看这篇https://blog.csdn.net/sly_7031/article/details/106545765?

 

3.Redis高性能

  • 用户访问传统的关系型数据库,速度会比较慢,因为是从硬盘上读取。Redis是纯内存数据库,是将访问的数据存储在缓存中,访问数据时就可以直接从缓存中获取,所以数据的存取速度快
  • Redis中的数据结构是专门进行设计的,数据结构简单,对数据操作也简单
  • 采用单线程,保证了每个操作的原子性,避免了不必要的上下文切换和竞争条件,不像多线程那样会有线程切换导致消耗CPU,也不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗,所以效率更高

 

4.Redis的问题

  • 缓存穿透:在同一时刻,有大量的并发请求访问数据库中不存在的信息,因为数据库中没有,所以缓存中也不会有,即既不会命中缓存,也不会命中数据库,导致这些请求都访问数据库,造成数据库压力过大
  • 缓存击穿:Redis中的数据是可以设置过期时间的,在某个时间点有大量的并发请求访问缓存中的一个Key,而恰好在这个时间点这个Key刚好过期,或者这个Key并不存在于缓存中,这时大量的请求就直接落到数据库上,没有经过缓存这一层
  • 缓存雪崩:缓存中的大量数据在同一时间过期,而后面的查询数据量巨大,导致后面的请求都直接落到数据库上,导致数据库压力过大而宕机

 

解决方案

  • 缓存穿透:使用布隆过滤器,具体实现可以看这篇https://baijiahao.baidu.com/s?id=1655304940308056733
  • 缓存击穿:给程序加读写锁,加锁并不需要额外的服务器开销,也不需要额外的资源消耗,仅仅是让线程串行而已,具体实现可以看这篇https://blog.csdn.net/qq_33220089/article/details/102754036
  • 缓存雪崩:设置随机过期时间,随机时间是指在原来的过期时间的基础上生成一个随机时间,这个随机时间比较小,然后两者进行相加;设置永久有效,将一部分常用的数据的过期时间设置成为永久有效

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值