Redis简介
关于Redis,官网redis.io有一段定义:Redis是一个开源的.基于内存的数据结构存储仓库,被用作数据库.缓存和消息代理.
作为数据库,Redis是一个速度非常快的非关系数据库(Non-Relational Database),它可以存储键(Key)与5种不同类型的值(Value)之间的映射(Mapping),可以将存储在内存的键值对数据持久化到硬盘,可以复制特性来扩展读性能,还可以使用客户端分片来扩展写性能.
作为患者中间件,相比Memcached,Redis支持更多的数据类型和更丰富的数据操作,另外Redis有着丰富的集群方案和使用场景
数据类型
Redis数据类型不仅与关系数据库管理系统(RDBMS)不同,也不同于任何简单的NoSQL键值数据类型存储.Redis数据类型类似于编程语言的基础数据类型,因此开发人员感觉很自然,没个数据类型都支持使用于其类型的操作,受支持的数据类型包括:
String(字符串)
Hash(哈希)
List(列表)
Set(集合)
Zset(Sorted Set:有序集合)
关键优势
Redis的优势包括它的速度.对富数据类型的支持.操作的原子性,以及通用性:
.性能极高,它每秒可执行约1000,000个Set以及约1000,000个Get操作;
.丰富的数据类型,Redis对大多数开发人员已知的大多数数据类型提供了原生支持,这使得各种问题得以轻松解决;
.原子性,因为所以Redis操作都是原子性的,所以多个客户端会并发地访问一个Redis服务器,获取相同的更新值;
.丰富的特性,Redis是一个多效用工具,有非常多的应用场景,包括缓存.消息队列(Redis原生支持发布/订阅).短期应用程序数据(比如Web会话.Web页面命中计数)等.
Redis 连接池简介
在后面 springboot 整合 redis 的时候会用到连接池,所以这里先来介绍下 Redis中的连接池:
客户端连接 Redis 使用的是 TCP协议,直连的方式每次需要建立 TCP连接,而连接池的方式是可以预先初始化好客户端连接,所以每次只需要从 连接池借用即可,而借用和归还操作是在本地进行的,只有少量的并发同步开销,远远小于新建TCP连接的开销。另外,直连的方式无法限制 redis客户端对象的个数,在极端情况下可能会造成连接泄漏,而连接池的形式可以有效的保护和控制资源的使用。
下面以Jedis客户端为例,再来总结下 客户端直连方式和连接池方式的对比
优点 缺点
直连 简单方便,适用于少量长期连接的场景 1. 存在每次新建/关闭TCP连接开销 2. 资源无法控制,极端情况下出现连接泄漏 3. Jedis对象线程不安全(Lettuce对象是线程安全的)
连接池 1. 无需每次连接生成Jedis对象,降低开销 2. 使用连接池的形式保护和控制资源的使用 相对于直连,使用更加麻烦,尤其在资源的管理上需要很多参数来保证,一旦规划不合理也会出现问题
spring boot操作Redis
Lettuce:是一个可伸缩线程安全的Redis安户端,名个线程可以共享同一个
RedisConnection,它利用优委Nett NIm E期克高冲地管理多个连接。
Spring Data:是 Spring框架中的一个主要而日,日的是为了简化构建基于Spring框架
应用的数据访问,包括非关系数据库、Man-Reduce框架、云数据服务等,另外也包含
对关系数据库的访问支持。
Spring Data Redis:是Spring Data项目中的一个主要模块,实现了对Redis客户端API
的高度封装,使对 Redis的操作更加便捷。
因此Spring Data Redis和 Lettuce具备的功能,spring-boot-starter-data-redis几乎都会有。
基本操作
添加依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
application.properties配置信息
#application.properties配置相关信息
#Redis数据库索引
spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=foobared
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=-1
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.min-idle=0