Redis学习笔记(持续更新)

技术支持:Linux基本命令、常用数据结构、Java

Redis简介

Redis是一种开源、基于键值对的存储服务系统,是高性能Key-Value服务器,支持多种数据结构,有丰富的功能,高可用分布式支持。

Redis的键值可以包括字符串(string)类型,同时它还包括哈希(hash)、列表(list)、集合(set)和 有序集合(sorted set)等数据类型。 对于这些数据类型,你可以执行原子操作。例如:对字符串进行附加操作(append);递增哈希中的值;向列表中增加元素;计算集合的交集、并集与差集等。

为了获得优异的性能,Redis采用了内存中(in-memory)数据集(dataset)的方式。同时,Redis支持数据的持久化,你可以每隔一段时间将数据集转存到磁盘上(snapshot),或者在日志尾部追加每一条操作命令(append only file,aof)。

Redis同样支持主从复制(master-slave replication),并且具有非常快速的非阻塞首次同步( non-blocking first synchronization)、网络断开自动重连等功能。同时Redis还具有其它一些特性,其中包括简单的事物支持、发布订阅 ( pub/sub)、管道(pipeline)和虚拟内存(vm)等 。

Redis具有丰富的客户端,支持现阶段流行的大多数编程语言。

 

为什么使用Redis

在项目中使用redis,主要是从两个角度去考虑:性能和并发。当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis。因此,这个问题主要从性能和并发两个角度去答。

1、性能

如下图所示,我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。

Redis学习笔记(持续更新)

2、并发

在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问数据库。

 

PS:借鉴此篇博客https://blog.****.net/hjm4702192/article/details/80518856

 

Redis支持的数据类型

Redis一共支持五种数据类:string(字符串),hash(哈希),list(列表),set(集合)和zset(sorted set有序集合)。

string(字符串):是Redis的最基本的数据类型,一个键对应一个值,需要注意是一个键值最大存储512MB。

使用场景:最常规的set/get操作,value可以是String也可以是数字。一般做一些复杂的计数功能的缓存。

Redis学习笔记(持续更新)

 hash(哈希):redis hash是一个键值对的集合,是一个string类型的field和value的映射表,适合用于存储对象

使用场景:这里value存放的是结构化的对象,比较方便的就是操作其中的某个字段。在做单点登录的时候,就是用这种数据结构存储用户信息,以cookieId作为key,设置30分钟为缓存过期时间,能很好的模拟出类似session的效果。

Redis学习笔记(持续更新)

list(列表):是redis简单的字符串列表,它按插入顺序排序

使用场景:使用List的数据结构,可以做简单的消息队列的功能。另外还有一个就是,可以利用lrange命令,做基于redis的分页功能,性能极佳,用户体验好。还可以用一个场景,很合适---取行情信息。就也是个生产者和消费者的场景。list可以很好的完成排队,先进先出的原则。

Redis学习笔记(持续更新)

set(集合):是字符串类型的无序集合,也不可重复

使用场景:因为set堆放的是一堆不重复值的集合。所以可以做全局去重的功能。为什么不用JVM自带的Set进行去重?因为我们的系统一般都是集群部署,使用JVM自带的Set,比较麻烦,难道为了一个做一个全局去重,再起一个公共服务,太麻烦了。另外,就是利用交集、并集、差集等操作,可以计算共同喜好,全部的喜好,自己独有的喜好等功能。

Redis学习笔记(持续更新)

zset(sorted set有序集合):是string类型的有序集合,也不可重复

有序集合中的每个元素都需要指定一个分数,根据分数对元素进行升序排序,如果多个元素有相同的分数,则以字典序进行升序排序,sorted set因此非常适合实现排名。

使用场景:sorted set多了一个权重参数score,集合中的元素能够按score进行排列。可以做排行榜应用,取TOP N操作。

Redis学习笔记(持续更新)