缓存机制 | 作用 | 使用频率 | 难易度 |
---|---|---|---|
OScache | JVM内置缓存, 用于缓存静态页面 | 低 | 简单 |
Ehcache | JVM内置缓存, 用于缓存数据库取到的数据 | 低 | 简单 |
自设HashMap | 自己coding,将HashMap用来将需要的数据存在JVM中供使用, 不过要有一个清理Map中无效缓存的机制,避免缓存内容越来越多造成OOM | 中 | 复杂 |
Redis | 独立的缓存软件, 通过KV, 可以存取任意数据, 自带无效数据清理机制和连接池设置 | 高 | 低 |
Redis配置使用
0. 运行Redis
直接用docker命令: docker run -p 6379:6379 -d redis:latest redis-server
进入redis docker: docker exec -it redis redis-cli
1. Maven插件
Redis三大框架:
概念:
Jedis:是Redis的Java实现客户端,提供了比较全面的Redis命令的支持,
Redisson:实现了分布式和可扩展的Java数据结构。
Lettuce:高级Redis客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。
优点:
Jedis:比较全面的提供了Redis的操作特性
Redisson:促使使用者对Redis的关注分离,提供很多分布式相关操作服务,例如,分布式锁,分布式集合,可通过Redis支持延迟队列
Lettuce:主要在一些分布式缓存框架上使用比较多
可伸缩:
Jedis:使用阻塞的I/O,且其方法调用都是同步的,程序流需要等到sockets处理完I/O才能执行,不支持异步。Jedis客户端实例不是线程安全的,所以需要通过连接池来使用Jedis。(类似于mysql用connection直连)
Redisson:基于Netty框架的事件驱动的通信层,其方法调用是异步的。Redisson的API是线程安全的,所以可以操作单个Redisson连接来完成各种操作
Lettuce:基于Netty框架的事件驱动的通信层,其方法调用是异步的。Lettuce的API是线程安全的,所以可以操作单个Lettuce连接来完成各种操作
(类似于mysql用mybatis连接)
Springboot从2.0.0开始, spring-boot-starter-data-redis默认使用lettuce框架.
(包中也包括jedis,但是没有使用)
<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>
commons-pool2是为设置Redis连接池
2. Properties文件设置
#redis连接配置(必须)
spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=xxxxx(可以没有密码)
#(可选)
#最大空闲数
spring.redis.lettuce.pool.max-idle=80
##最小空闲数
spring.redis.lettuce.pool.min-idle=10
##最大连接数:能够同时建立的“最大链接个数”
spring.redis.lettuce.pool.max-active=500
##最大建立连接等待时间:单位ms
spring.redis.lettuce.pool.max-wait=1ms
##当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能,单位毫秒
spring.redis.lettuce.shutdown-timeout=100ms
3. JAVA代码实现
3.1 Redis支持5种数据类型的增删改查
增加和修改是一种方法, 如果数据不存在就会增加, 存在就会修改
3.1.1 String(字符串) (包括对象)
string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
常用命令:set、get、decr、incr、mget等。
注意:一个键最大能存储512MB。
3.1.1.1 字符串存取
package com.example.demo.controller;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis