简介
Redis简单来说就是一个NoSQL数据库,不过与传统数据库不同的是redis将数据存储在内存中,读写速度非常快,因而redis被广泛应用于缓存
方向。另外,redis也经常用来做分布式锁
。同时,Redis也提供了多种数据类型来支持不同的业务场景。除此之外,Redis也支持事务
、持久化
、LUA脚本
、LRU驱动事件
、多种集群解决方案
等。
为什么要用 redis /为什么要用缓存
使用redis解决了什么问题?
用户第一次访问数据库中的某些数据时,这个过程可能会比较慢。
如何解决的?有什么好处呢?
【高性能】使用redis可以将用户第一次访问的数据存储在缓存中,这样用户再次访问这些数据的时候就可以直接从缓存中获取,操作缓存就是直接操作内存,所以速度比较快。如果数据库中的数据发生改变,同步改变缓存中相应的数据即可!
【高并发】直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。
为什么要用 redis 而不用 map/guava 做缓存?
缓存分为本地缓存
和分布式缓存
。
以 Java 为例,使用自带的 map 或者 guava 实现的是本地缓存
,最主要的特点是轻量以及快速,生命周期随着 jvm 的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。
使用 redis 或 memcached 之类的称为分布式缓存
,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。缺点是需要保持 redis 或 memcached服务的高可用,整个程序架构上较为复杂。
redis 和 memcached 的区别
- redis 拥有更丰富的数据类型,可以支持更复杂的应用场景,redis 不仅支持简单的k/v类型的数据,同时还提供了list、set、zset、hash等类型的数据;memcached只支持简单的字符串类型的数据;
- redis 支持数据的本地持久化,可以将内存中的数据保存在本地磁盘中,重启的时候可以再次加载进行使用;memcached 不支持数据的本地持久化,数据全部保存在内存中;
- redis 原生支持集群模式;memcached需要依靠客户端实现往集群中分片写入数据来支持集群模式;
- redis 使用单线程的多路 IO 复用模型;memcached是多线程,非阻塞IO复用的网络模型。