java 集成redis_Spring Boot集成Redis详解

e24ccc1a11a3e870f3e3dcd8313ecbc6.png

前言

Redis是一种由C语言编写的,可基于内存也可基于持久化的Nosql数据库存储系统。Redis是一种支持Key-Value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。

在Java中,操作Redis方案有很多,Jedis是较为流行的一种方案,但是在SpringBoot中默认使用的是Spring Data Redis。

1、开始集成

在SpringBoot项目中增加Redis依赖包:

org.springframework.bootspring-boot-starter-data-redisorg.apache.commonscommons-pool2

2、配置Redis

在SpringBoot的配置文件中增加配置项:

spring: redis: host: **.**.**.** password: ** pool: min-idle: 5 max-idle: 10

所能配置的信息,在自动配置的属性类RedisProperties中可查看:

private int database = 0; private String url; private String host = "localhost"; private String password; private int port = 6379; private boolean ssl; private int timeout; private RedisProperties.Pool pool; private RedisProperties.Sentinel sentinel; private RedisProperties.Cluster cluster;

此时,项目中已经集成了Spring Data Redis ,并且自动配置生效,自动注入了Redis操作类。可以在自动配置类RedisAutoConfiguration看到注入了redisTemplate和stringRedisTemplate

@Configuration protected static class RedisConfiguration{ protected RedisConfiguration(){ } @Bean @ConditionalOnMissingBean( name = {"redisTemplate"} ) public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException{ RedisTemplate template = new RedisTemplate(); template.setConnectionFactory(redisConnectionFactory); return template; } @Bean @ConditionalOnMissingBean({StringRedisTemplate.class})public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException{ StringRedisTemplate template = new StringRedisTemplate(); template.setConnectionFactory(redisConnectionFactory); return template; } }

3、开始使用

我们可以在项目中注入这两个操作redis的类:

@Resource private RedisTemplate redisTemplate; @Resource private StringRedisTemplate stringRedisTemplate;

RedisTemplate和StringRedisTemplate提供了相同的方法,不同的是RedisTemplate可以操作任何类型,而StringRedisTemplate只能操作string类型,主要使用到的方法有:

opsForHash():返回对于Hash的操作类;

opsForList():返回对于列表List的操作类;

opsForSet():返回对于Set的操作类;

opsForValue():返回对于字符串String的操作类;

opsForZSet():返回对于ZSet的操作类;

针对具体数据类型的操作,相关的方法需要首先获取对应的数据类型,获取相应数据类型的操作方法是 opsForXXX

ValueOperations ops = redisTemplate.opsForValue();ops.set("key1", "value1"); // 设置缓存值Object k1 = ops.get("key1"); // 取出缓存值

4、序列化

RedisTemplate 中,key默认的序列化方案是JdkSerializationRedisSerializer,在生成的key中会添加一个前缀,而StringRedisTemplate,key的默认序列化方案是StringRedisSerializer,生成的key不会增加前缀。如果想RedisTemplate不添加前缀,可以修改序列化方案:

4.1、每次使用时修改序列化方案

redisTemplate.setKeySerializer(new StringRedisSerializer());

同样的对应value的序列化,我们也可以更改序列化方案:

GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);

4.2、统一修改序列化方案

如果在每次使用的时候都设置序列化方案,无疑是比较麻烦的事情,那么我们可以重写RedisTemplate,新建一个配置类,增加如下:

@Beanpublic RedisTemplate redisTemplate() { RedisTemplate redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(factory); GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer); return redisTemplate;}

ef32a54712ef20f3d6093114bf0e6399.png

你点的每个“在看”,我都当成了喜欢

cb9cc613f7c0d0ebf53cd64f3129be5e.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值