1、什么是Redis?
Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件。官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。能够存储的value类型比较丰富,也被称为结构化的NoSql(Not Only SQL)数据库。不仅仅是SQL,泛指非关系型数据库。NoSql数据库并不取代关系型数据库,而是关系型数据库的补充。
2、Redis的数据类型
Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:
-
字符串 string:普通字符串,Redis中最简单的数据类型
-
哈希 hash:也叫散列,类似于Java中的HashMap结构,特别适合用于存储对象
-
列表 list:按照插入顺序存储,可以有重复元素,类似于Java中的LinkedList
-
集合 set:无序集合,没有重复元素,类似于Java中的HashSet
-
有序集合 sorted set / zset:集合中每个元素会关联一个分数(score),根据分数升序排序,没有重复元素
3、关于Rdis的一些概念
3.1 缓存
当面对频繁的数据库查询操作时,使用Redis缓存可以显著减少对数据库的访问频率。当大量的用户同时进行数据库操作时,数据库服务器可能无法处理大量查询请求,导致响应时间延长甚至服务器崩溃。这时候就需要使用Redis进行缓存。
3.2 热点数据
所谓热点数据就是被频繁访问数据。我们要怎么处理热点数据呢?举个例子:当用户第一次对这组数据进行了查询操作,就将这组数据进行缓存,在这组数据没有被更改的前提下用户进行了第二次查询,此时会先去缓存中查询,查到了就不需要去执行sql查询了,缓存的数据可以直接返回给用户,避免了对原始数据源的访问。通过热点数据存储在缓存中,从而大大提高了访问速度。
3.3缓存数据存储
缓存系统一般会将热点数据存储在内存中。相比于磁盘或者数据库等其他存储介质,内存具有更快的读写速度,可以更快地提供数据。
3.4 Redis缓存更新策略:
缓存其实就是数据源的一个副本,为了保证访问到的数据是正确的就要保持缓存和数据源的一致性。
-
过期时间策略(TTL): 为每条缓存设置一个固定的生存时间(TTL),生存时间结束后,缓存数据将被当作过期数据从缓存中删除。在访问过期的缓存时,会从原始数据源重新加载数据并更新缓存。缺点就是如果过期的key太多,删除这些key会占用大量的CPU资源去处理过期的数据,从而影响性能。
-
最近最少使用(LRU): 根据最近访问的频率来决定淘汰哪些数据,就是最近最少使用的数据被淘汰。这种策略通常会维护一个访问历史记录或者计数器,以确定哪些数据是最近最少使用的。LRU 策略比较适用于数据访问模式比较稳定的场景。LRU 算法在 Redis 中是默认的淘汰策略。
-
最不经常使用(LFU): Redis 从版本 4.0 开始支持 LFU 淘汰策略。根据数据被访问的频率来淘汰最不经常使用的数据。LFU 策略通常会维护一个访问频率计数器,以确定哪些数据是最不经常使用的。LFU 策略相比于 LRU 策略更加关注数据的访问频率。
-
手动刷新策略: 手动刷新就是由开发人员自己根据不同的业务场景来使用不同的刷新策略。