Redis学习之路(1)----初识Redis

一、什么是Redis

Redis官网上的介绍是这样的:

Redis is an open source (BSD licensed), in-memory data structure
store, used as a database, cache and message broker. It supports data
structures such as strings, hashes, lists, sets, sorted sets with
range queries, bitmaps, hyperloglogs, geospatial indexes with radius
queries and streams. Redis has built-in replication, Lua scripting,
LRU eviction, transactions and different levels of on-disk
persistence, and provides high availability via Redis Sentinel and
automatic partitioning with Redis Cluster.
翻译过来大概是:
Redis是一个开源(BSD许可),内存中的数据结构存储,用作数据库、缓存和消息代理。它支持字符串、散列、列表、集合、带范围查询的排序集合、位图、超loglogs、带半径查询和流的地理空间索引等数据结构。Redis具有内置的复制、Lua脚本、LRU退出、事务和不同级别的磁盘持久性,并通过Redis
Sentinel和Redis集群自动分区提供高可用性

上面罗列了许多高大上的名词,也许刚开始看有点蒙,但没关系,不懂的先放一边,我们先从简单的入手,
查看官网的介绍和网上的资料我们可以知道:
1、Redis 是一个开源的、基于内存的数据结构存储,可用作于缓存、数据库、消息中间件。
2、Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射(类似map的key-value键值对)。
3、键的类型只能为String,值支持五种数据类型:字符串(String)、列表(list)、集合(set)、散列表(hash)、有序集合(sort set)。
4、Redis 还支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性能等等。

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

二、Redis的优势

(1)从性能上来看
假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在数缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可!
在这里插入图片描述
在碰到需要执行耗时特别久,且结果不频繁变动的SQL,也特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。

(2)从高并发上看
在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问数据库。
在这里插入图片描述

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

前面说过,Redis是一种类似map的key-value键值对的结构,那么为什么不用map来做缓存呢?原因是因为:

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

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

四、redis 和 memcached 的区别

对于 redis 和 memcached 我总结了下面四点。现在公司一般都是用 redis 来实现缓存,而且 redis 自身也越来越强大了!

1、redis支持更丰富的数据类型(支持更复杂的应用场景):Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。memcache支持简单的数据类型,String。

2、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而Memecache把数据全部存在内存之中。

3、集群模式:memcached没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;但是 redis 目前是原生支持 cluster 模式的

4、Memcached是多线程,非阻塞IO复用的网络模型;Redis使用单线程的多路 IO 复用模型。

参考

Redis官网
https://github.com/Snailclimb/JavaGuide/blob/master/数据存储/Redis/Redis.md

猜你喜欢

转载自blog.csdn.net/Felix_ar/article/details/84825942