redis

  • Post author:
  • Post category:其他


流程:

redis读取——>mysql数据库进行储存起来

前端读取——>redis储存的缓存数据库

心得:

0、redis相当于key-value存储系统,储存数据库的东西

1、redis就是相当于第二个数据库;

2、redis先读取完数据库的内容后储存进缓存区,然后前端就可以不用让后端查询一次数据库了,直接后端查询redis缓存层数据库就行了

3、查询rendis数据库,比查询mysql数据库快很多 ;

4、key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率;

5、key也不要太短,太短的话,key的可读性会降低;

6、在一个项目中,key最好使用统一的命名模式,例如user:10000:passwd

7、单线程



一、redis的优点

1、异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录。

2、支持丰富的数据类型:Redis支持Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。这使得它非常容易解决各种各样的问题,因为我们知道哪些问题是可以处理通过它的数据类型更好。

3、操作都是原子性:所有Redis操作是原子的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值。

4、多功能实用工具:Redis是一个多实用的工具,可以在多个用例如缓存,消息,队列使用(Redis原生支持发布/订阅),任何短暂的数据,应用程序,如Web应用程序会话,网页命中计数等。



二、redis的缺点

(一)、缓存和数据库双写一致性问题

(二)、缓存雪崩问题

(三)、缓存击穿问题

(四)、缓存的并发竞争问题



三、redis的数据类型(大概五种)

(一)String

这个其实没啥好说的,最常规的set/get操作,value可以是String也可以是数字。一般做一些复杂的计数功能的缓存。

(二)hash

这里value存放的是结构化的对象,比较方便的就是操作其中的某个字段。博主在做单点登录的时候,就是用这种数据结构存储用户信息,以cookieId作为key,设置30分钟为缓存过期时间,能很好的模拟出类似session的效果。

(三)list

使用List的数据结构,可以做简单的消息队列的功能。另外还有一个就是,可以利用lrange命令,做基于redis的分页功能,性能极佳,用户体验好。本人还用一个场景,很合适—取行情信息。就也是个生产者和消费者的场景。LIST可以很好的完成排队,先进先出的原则。

(四)set

因为set堆放的是一堆不重复值的集合。所以可以做全局去重的功能。为什么不用JVM自带的Set进行去重?因为我们的系统一般都是集群部署,使用JVM自带的Set,比较麻烦,难道为了一个做一个全局去重,再起一个公共服务,太麻烦了。

另外,就是利用交集、并集、差集等操作,可以计算共同喜好,全部的喜好,自己独有的喜好等功能。

(五)sorted set

sorted set多了一个权重参数score,集合中的元素能够按score进行排列。可以做排行榜应用,取TOP N操作。



缓存穿透、缓存击穿和缓存雪崩。


1、缓存穿透


缓存穿透是指查询某一个缓存中不存在,持久层中也不存在的数据,由于持久曾中没有,所以查询为空,如果不做一些保障的话,一般我们不会将一个空值存入缓存。如一个没有的值,你一直的去请求他,对数据库造成了一个压力。以为当一个查询到一个空值的话,就会去查询数据库的,缓存中查不到,每次你去数据库里查,也查不到。在高并发下,不断的请求这个数据,就会存在数据库崩溃的危险,这叫缓存穿透。

解决方法:

1、当他查数据库的时候可以返回一个空值到缓存中,每当他请求缓存就一个空值,表明没有,同时根据实际情况设置一个合适的过期时间。


2、缓存击穿


缓存击穿指的是,某一个热点key在它过期的时候,被高并发访问,此时因为缓存已经过期,所以直接查询持久层,如果请求量很大,就可能会导致持久层崩溃,这叫缓存击穿。就如一个过期的key值,经过高并发的访问,缓存中查不到,每次你去数据库里查,也查不到,就造成了这一个击穿的效果了。

解决方法:

1.设置热点key永不过期


3、缓存雪崩


缓存雪崩直白的说,缓存层大批量数据过期和空,大批查询都落到了数据库中,数据库承受不了这么多数据的请求,造成数据库崩了或者宕机。

解决方法(方法很多中,我的可能也是有问题的,大家看着来,这只是个人分享):

1、缓存数据的过期时间设置随机,防止造成大方面的请求一起到数据库中。

2、把一些主要数据设置无过期。



版权声明:本文为weixin_45620487原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。