读完这篇文章,你就知道为什么生产环境大多数要用redis数据库!
概述
简单来说 Redis 就是一个数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的,所以存写速度非常快,因此 Redis 被广泛应用于缓存方向。
另外,Redis 也经常用来做分布式锁。Redis 提供了多种数据类型来支持不同的业务场景。
除此之外,Redis 支持事务 、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。
下面小编主要从以下几个方面来解读 Redis:
- 为什么要用 Redis / 为什么要用缓存
- 为什么要用 Redis 而不用 map/guava 做缓存
- Redis 和 Memcached 的区别
为什么要用 Redis / 为什么要用缓存?
这里我们主要从“高性能”和“高并发”这两点来看待这个问题。
高性能
假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。
将该用户访问的数据存在缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。
操作缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变了之后,同步改变缓存中相应的数据即可!
高并发
直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。
为什么要用 Redis 而不用 map/guava 做缓存
缓存分为本地缓存和分布式缓存。以 Java 为例,使用自带的 map 或者 guava 实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着 JVM 的销毁而结束。
并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。
使用 Redis 或 Memcached 之类的称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。
缺点是需要保持 Redis 或 Memcached 服务的高可用,整个程序架构上较为复杂。
Redis 和 Memcached 的区别
现在公司一般都是用redis来实现缓存了,为什么比较少用memcached呢?
Redis 和 Memcached 的区别:
- Redis 支持更丰富的数据类型(支持更复杂的应用场景):Redis 不仅仅支持简单的 K/V 类型的数据,同时还提供 list、set、zset、hash 等数据结构的存储。Memcache 支持简单的数据类型 String。
- Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而 Memecache 把数据全部存在内存之中。
- 集群模式:Memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;但是 Redis 目前是原生支持 Cluster 模式的。
- Memcached 是多线程,非阻塞 IO 复用的网络模型;Redis 使用单线程的多路 IO 复用模型。
来自网络上的一张对比图,这里分享给大家:
小编记得在最近的数据库排行榜,redis还是在前十名,这个本身就很说明问题了,真心推荐大家用redis来做缓存,也可以做集群。
PS:后期会分享更多底层的内容,感兴趣的朋友可以点下关注哦~