作为一个java后端程序员的话,redis的学习是必不可少的。而且redis要学习的东西也不少。比方说redis的五大数据类型,三大特殊数据类型、redis事务中的乐观锁如何实现的,还有jedis的使用、springboot整合Redis、持久化之RDB以及AOF,发布订阅功能,配置主从复制,哨兵模式。还有高频面试题(缓存穿透、击穿、雪崩)等问题。作为一个新玩家(本人),这些知识是绕不过去的大山。就像18年那句话,翻过这座山,面试官将会记住你的名字。 今天就来学习一下最基本的在spingBoot该如何整合redis吧。
redis主要分五种类型:string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
Spring Data Redis中提供了一个高度封装的类: RedisTemplate,针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:
- ValueOperations:简单K-V操作
- SetOperations: set类型数据操作
- ZSetOperations: zset类型数据操作
- HashOperations:针对map类型的数据操作
- ListOperations:针对list类型的数据操作
java连接redis
导入pom 依赖 spring-boot-starter-data-redis
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
复制代码
application.yml
spring:
#Redis相关配置
redis:
host: 192.168.17.110
port: 6379
#password: 123456
database: 0 #操作的是0号数据库
jedis:
#Redis连接池配置
pool:
#最大连接数
max-active: 8
#连接池最大阻塞等待时间
max-wait: 1ms
#连接池中的最大空闲连接
max-idle: 4
#连接池中的最小空闲连接
min-idle: 0
复制代码
RedisTemplate配置
/**
* RedisTemplate 配置
*
* @author: liang_zh
* @since: 2022-12-10 16:57
*/
@Configuration
@EnableCaching
public class RedisConfig {
/**
* 定义第三方的Bean
* 方法设置为公有的,要把哪个对象装配到容器当中,那么就返回这个对象,这边返回的RedisTemplate
* 用Template访问数据库,Template要有访问数据库的能力,那他就得能够创建连接,连接由连接工厂创建,所以就要把连接工厂
* 工厂放进来,注入给Template,他才能访问数据库(RedisConnectionFactory factory)就是声明连接工厂
*
* @param factory 工厂
* @return {@link RedisTemplate}<{@link String}, {@link Object}>
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
//实例化这个Bean
RedisTemplate<String, Object> template = new RedisTemplate<>();
//把工厂设置给Template
template.setConnectionFactory(factory);
//配置Template主要配置序列化的方式,因为写的是java程序,得到的是java类型的数据,最终要这个数据存储到数据库里面
//就要指定一种序列化的方式,或者说数据转换的方式
//设置key的序列化方式
template.setKeySerializer(RedisSerializer.string());
//设置value的序列化方式
template.setValueSerializer(RedisSerializer.json());
//设置hash的key的序列化方式
template.setHashKeySerializer(RedisSerializer.string());
//设置hash的value的序列化方式
template.setHashValueSerializer(RedisSerializer.json());
//使上面参数生效
template.afterPropertiesSet();
return template;
}
}
复制代码
然后可以做一些简单的测试。
//注入RedisTemplate
@Resource
private RedisTemplate<String, String> redisTemplate;
//注入RedisTemplate
@Resource
private RedisTemplate<String, String> redisTemplate;
@Test
public void redis() {
redisTemplate.opsForValue().set("name", "lihua");
String value = redisTemplate.opsForValue().get("name");
System.out.println(value);
redisTemplate.opsForValue().set("key1", "value1", 10L, TimeUnit.SECONDS);
Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("name", "lihua");
System.out.println(aBoolean);
}
复制代码
=====================学习之境不止========================