Redis
- 什么是缓存
- Redis的环境准备
- Redis的常见数据类型及命令
- Java中操作Redis
-
- Redis的Java客户端
-
- [Spring Data Redis](#Spring Data Redis)
- [Spring Cache](#Spring Cache)
什么是缓存
缓存是一种临时存储数据的技术,用于加快数据访问速度和减少对原始数据源的访问次数
Redis是目前最流行的一个开源的内存数据库
Redis优点
- key-value结构存储
- 基于内存存储,读写性能高
- 基于C语言编写,可以达到100000+的QPS(每秒内查询次数)
- 结构化的NoSql数据库。NoSql(Not Only SQL)
- 常见的NoSql数据库:Redis、MongoDB
Redis的环境准备
Redis概述
Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件。
下载与安装
Redis安装包分为windows版和Linux版:
Windows版下载地址:https://github.com/microsoftarchive/redis/releases
Redis的Windows版属于绿色软件,直接解压即可使用
Redis及可视化软件的详细下载和安装步骤链接:
https://blog.csdn.net/yrc1314/article/details/143085198?spm=1001.2014.3001.5501
Redis的常见数据类型及命令
概述
Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:
字符串(string)
Redis命令参考地址,Redis中文网:https://www.redis.net.cn
Redis 中字符串类型常用命令:
- set key(同一个key),后执行的会覆盖之前的数据
del key 删除key的数据,这个是通用的命令,不仅仅只是在字符串中适用 - setnx与set在存储数据的时候,set可以覆盖之前的数据,sexnx则不行(适用于对数据进行加锁)
哈希(hash)
Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。
Redis hash 是一个string类型的 field 和 value 的映射表,hash特别适合用于存储对象
数据特点
列表(list)
Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索,特征也与LinkedList类似:有序、元素可以重复、插入和删除快、查询速度一般
集合(set)
Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征: 无序、元素不可重复、查找快、支持交集、并集等功能
通用命令
Redis的通用命令是不分数据类型的,都可以使用的命令:
Java中操作Redis
Redis的Java客户端
前面讲解的Redis的常用命令,这些命令是我们操作Redis的基础,如果先要在Java中操作Redis,就需要使用Redis的Java客户端,就如同我们使用JDBC操作MySQL数据库一样。
Redis 的 Java 客户端很多,常用的几种:
- Jedis
- Lettuce
- Spring Data Redis
Spring Data Redis
Spring Data Redis 是 Spring 的一部分,提供了在 Spring 应用中通过简单的配置就可以访问 Redis 服务,对 Redis 底层开发包进行了高度封装。在 Spring 项目中,可以使用Spring Data Redis来简化 Redis 操作。
网址:https://spring.io/projects/spring-data-redis
Spring Data Redis中提供了一个高度封装的类:RedisTemplate,对相关api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:
SpringDateRedis的详情操作:
https://blog.csdn.net/yrc1314/article/details/143085354?spm=1001.2014.3001.5502
Spring Cache
概述
Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。
Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,例如:
- EHCache
- Caffeine
- Redis(常用)
集成环境
准备一个Springboot项目
导入Redis和SpringCache依赖
添加配置支持
常见注解
主要使用注解来管理缓存
注解-@Cacheable
在方法执行前,spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中,查询的时候使用
java
@Cacheable(cacheNames = "userCache",key="#id")
public User getById(Long id){
User user = userMapper.getById(id);
if(user == null){
throw new RuntimeException("用户不存在");
}
return user;}
- cacheNames = "userCache" : 表示命名空间,key的第一层级
- key="#id" : id指的是查询的参数, 也就是使用id属性作为key
- 在Redis中,冒号通常用作键的命名约定,可以创建层次结构,类似于文件系统中的路径结构,提升查找效率
对象序列化
对象序列化是将对象转换为可存储或传输的字节序列的过程,方便在需要时可以重新创建对象。这种序列化后的字节序列可以保存在文件,数据库或通过网络进行传输。
注解-@Cacheable
如果是条件查询,则可以使用多条件的转换为hashCode来作为缓存的key
注解-@CachePut
作用: 将方法返回值,放入缓存,一般保存的时候使用该注解
java
@CachePut(value = "userCache", key = "#user.id")//key的生成:userCache::1
public User insert(User user){
userMapper.insert(user);
return user;
}
#user.id : #user指的是方法形参的名称, id指的是user的id属性 , 也就是使用user的id属性作为key
注解-@CacheEvict注解
作用: 清理指定缓存
注解-@Caching
作用: 组装其他缓存注解
- cacheable 组装一个或多个@Cacheable注解
- put 组装一个或多个@CachePut注解
- evict 组装一个或多个@CacheEvict注解