Redis 简介

一、什么是Redis

简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。

二、为什么要用 redis/为什么要用缓存

主要从“高性能”和“高并发”这两点来看待这个问题。

高性能:

假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可!

面试详解---Redis必问(一)

高并发:

直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。

面试详解---Redis必问(一)

三、redis 和 memcached 的区别

Memcached
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统,基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。

  1. redis支持更丰富的数据类型(支持更复杂的应用场景):Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。memcache支持简单的数据类型,String。
  2. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而Memecache把数据全部存在内存之中。
  3. 集群模式:memcached没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;但是 redis 目前是原生支持 cluster 模式的.
  4. Memcached是多线程,非阻塞IO复用的网络模型;Redis使用单线程的多路 IO 复用模型。

来自网络上的一张图,这里分享给大家!

面试详解---Redis必问(一)

四、为什么要用 redis 而不用 map/guava 做缓存?

缓存分为本地缓存和分布式缓存两种类型。
以 Java 为例,使用自带的 map 或者 guava 实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着 jvm 的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。

使用 Redis 或 Memcached 之类的称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。

缺点是需要保持 Redis 或 Memcached服务的高可用,整个程序架构上较为复杂。

Redis Map
Redis 可以用几十 G 内存来做缓存 Map 不行,一般 JVM 也就分几个 G 数据就够大了而且JVM 内存太大很容易挂掉的
Redis 的缓存有着集群模式、持久化等更多特性 Map 是内存对象,程序一重启数据就没了
Redis 可以实现分布式的缓存,有丰富工具管理缓存数据 Map 只能存在创建它的程序里,本地缓存也不方面查看及修改
Redis 可以处理每秒百万级的并发,是专业的缓存服务,有丰富的 API Map 只是一个普通的对象
Redis 缓存有过期机制,redis 是 C 写的,稳定性和性能更好 Map 不行,一般 JVM 也就分几个 G 数据就够大了

在结合场景来说
redis可以独立部署,这样网站代码更新后redis缓存的数据还在,本地内存每次网站更新重启项目都会释放掉,并且数据存到redis,多个项目间可以共享缓存数据,如果是本地内存是无法跨项目共享的。redis提供的有很多数据结构,方便操作,比如 hash set list sort-set等,在某些场景下操作起来比map方便。

五、 Redis 为什么是单线程的

官方FAQ表示,因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了(毕竟采用多线程会有很多麻烦!)Redis利用队列技术将并发访问变为串行访问
1)绝大部分请求是纯粹的内存操作(非常快速)2)采用单线程,避免了不必要的上下文切换和竞争条件
3)非阻塞IO优点:

相关文章:

  • 2021-09-16
  • 2021-12-28
  • 2022-12-23
  • 2021-07-11
  • 2022-12-23
  • 2021-02-07
  • 2021-11-10
  • 2021-11-05
猜你喜欢
  • 2022-12-23
  • 2021-07-01
  • 2022-03-04
  • 2021-12-05
  • 2021-11-12
  • 2021-06-03
相关资源
相似解决方案