Redis详解

1 什么是Redis?

Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能的非关系型(NoSQL)的键值对数据库

Redis是一个开源的,基于内存的数据结构存储服务器,被用作数据库、缓存、消息代理。它支持的数据结构类型有strings, hashes, lists, sets, sorted sets,bitmaps, hyperloglogs, geospatial, Stream。Redis有内置的复制,lua脚本,LRU(Least Recently Used最近最少使用)淘汰,事务,磁盘持久化,并提供高可用的Redis Sentinel哨兵和自动分区的Redis Cluster集群。
Redis可以存储键和9种不同类型的值之间的映射。Redis键的类型只能为字符串,value值常用的类型有5种:字符串列表集合有序集合散列表

Redis数据库与传统数据库不同的是Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过10万次读写操作,是已知性能最快的Key-Value DB。另外,Redis 也经常用来做分布式锁。除此之外,Redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。

2 为什么要使用缓存?为什么选择Redis缓存

2.1 缓存的作用

 

用缓存一般来说,就是为了提高用户交互的效率,缓存主要有两个用途:高性能高并发

高性能
假设有一个场景,一个请求过来,从数据库获取数据,耗时 1000ms。但是这个结果可能接下来几个小时都不会变了,或者变了也可以不用立即反馈给用户。那么这种数据就可以使用缓存,从数据库获取数据以后,写入缓存,下次再进行查询时,直接从缓存里读取数据,这样性能就可以大大提高。

就是说对于一些需要复杂操作耗时查出来的结果,且确定后面不怎么变化,但是有很多读请求,那么直接将查询出来的结果放在缓存中,后面直接走缓存,可以大大提高系统的吞吐量。

高并发
mysql 这么重的数据库,压根儿设计不是让你玩儿高并发的,虽然也可以玩儿,但是天然支持不好。mysql 单机支撑到 2000QPS 也开始容易报警了。

直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。所以要是你有个系统,高峰期一秒钟过来的请求有1万,那一个 mysql单机绝对会死掉。使用缓存,可以提高系统吞吐量。缓存是走内存的,内存天然就支撑高并发。

2.2 为什么选择Redis缓存

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

使用 redis 或memcached之类的称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。缺点是需要保持 redis 或 memcached服务的高可用,整个程序架构上较为复杂。

Redis缓存性能极好,缓存功能也简单,说白了就是 key-value 式操作,单机支撑的并发量轻松一秒几万十几万,支撑高并发。在分布式事务实现上也比较简单。另外,Redis的哨兵或者集群,都可以保证分布式环境下Redis服务的高可用性。

Redis支持PDB和AOF持久化方式,当服务故障时,可以快速恢复缓存的数据。

 

posted @ 2023-02-21 15:41  jiuchengi  阅读(73)  评论(0编辑  收藏  举报