redistemplate文档用法_springboot之使用redistemplate优雅地操作redis

org.springframework.boot

spring-boot-starter-parent

1.5.1.RELEASE

<dependencies>

<!-- spring boot 配置 -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-thymeleaf</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-redis</artifactId>

</dependency>

</dependencies>

application.properties

#Redis数据库索引(默认为0)

spring.redis.database=0

#Redis服务器地址

spring.redis.host=127.0.0.1

#Redis服务器连接端口

spring.redis.port=6379

#Redis服务器连接密码(默认为空)

spring.redis.password=

#连接池最大连接数(使用负值表示没有限制)

spring.redis.pool.max-active=8

#连接池最大阻塞等待时间(使用负值表示没有限制)

spring.redis.pool.max-wait=-1

#连接池中的最大空闲连接

spring.redis.pool.max-idle=8

#连接池中的最小空闲连接

spring.redis.pool.min-idle=0

#连接超时时间(毫秒)

spring.redis.timeout=0

redisTemplate的配置

新建一个redisConfig类,进行相关bean的配置:

package com.config;

import com.fasterxml.jackson.annotation.JsonAutoDetect;

import com.fasterxml.jackson.annotation.PropertyAccessor;

import com.fasterxml.jackson.databind.ObjectMapper;

import org.springframework.cache.CacheManager;

import org.springframework.cache.annotation.CachingConfigurerSupport;

import org.springframework.cache.annotation.EnableCaching;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.data.redis.cache.RedisCacheManager;

import org.springframework.data.redis.connection.RedisConnectionFactory;

import org.springframework.data.redis.core.*;

import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;

import org.springframework.data.redis.serializer.StringRedisSerializer;

/**

@author janti

reids 相关bean的配置

*/

@Configuration

@EnableCaching

public class RedisConfig extends CachingConfigurerSupport{

/**

* 选择redis作为默认缓存工具

* @param redisTemplate

* @return

*/

@Bean

public CacheManager cacheManager(RedisTemplate redisTemplate) {

RedisCacheManager rcm = new RedisCacheManager(redisTemplate);

return rcm;

}

/**

* retemplate相关配置

* @param factory

* @return

*/

@Bean

public RedisTemplate redisTemplate(RedisConnectionFactory factory) {

RedisTemplate<String, Object> template = new RedisTemplate<>();

// 配置连接工厂

template.setConnectionFactory(factory);

//使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)

Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);

ObjectMapper om = new ObjectMapper();

// 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public

om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

// 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常

om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

jacksonSeial.setObjectMapper(om);

// 值采用json序列化

template.setValueSerializer(jacksonSeial);

//使用StringRedisSerializer来序列化和反序列化redis的key值

template.setKeySerializer(new StringRedisSerializer());

// 设置hash key 和value序列化模式

template.setHashKeySerializer(new StringRedisSerializer());

template.setHashValueSerializer(jacksonSeial);

template.afterPropertiesSet();

return template;

}

/**

* 对hash类型的数据操作

*

* @param redisTemplate

* @return

*/

@Bean

public HashOperations hashOperations(RedisTemplate redisTemplate) {

return redisTemplate.opsForHash();

}

/**

* 对redis字符串类型数据操作

*

* @param redisTemplate

* @return

*/

@Bean

public ValueOperations valueOperations(RedisTemplate redisTemplate) {

return redisTemplate.opsForValue();

}

/**

* 对链表类型的数据操作

*

* @param redisTemplate

* @return

*/

@Bean

public ListOperations listOperations(RedisTemplate redisTemplate) {

return redisTemplate.opsForList();

}

/**

* 对无序集合类型的数据操作

*

* @param redisTemplate

* @return

*/

@Bean

public SetOperations setOperations(RedisTemplate redisTemplate) {

return redisTemplate.opsForSet();

}

/**

* 对有序集合类型的数据操作

*

* @param redisTemplate

* @return

*/

@Bean

public ZSetOperations zSetOperations(RedisTemplate redisTemplate) {

return redisTemplate.opsForZSet();

}

}

spring-redis中使用了RedisTemplate来进行redis的操作,通过泛型的K和V设置键值对的对象类型。这里使用了string作为key的对象类型,值为Object。

对于Object,spring-redis默认使用了jdk自带的序列化,不推荐使用默认了。所以使用了json的序列化方式

对spring-redis对redis的五种数据类型也有支持

HashOperations:对hash类型的数据操作

ValueOperations:对redis字符串类型数据操作

ListOperations:对链表类型的数据操作

SetOperations:对无序集合类型的数据操作

ZSetOperations:对有序集合类型的数据操作

redis操作的工具类

package com.service;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.stereotype.Component;

import java.util.Collection;

import java.util.Date;

import java.util.Set;

import java.util.concurrent.TimeUnit;

import java.util.stream.Collectors;

import java.util.stream.Stream;

@Component

public class RedisService{

@Autowired

private RedisTemplate redisTemplate;

/**

* 默认过期时长,单位:秒

*/

public static final long DEFAULT_EXPIRE = 60 * 60 * 24;

/**

* 不设置过期时长

*/

public static final long NOT_EXPIRE = -1;

public boolean existsKey(String key) {

return redisTemplate.hasKey(key);

}

/**

* 重名名key,如果newKey已经存在,则newKey的原值被覆盖

*

* @param oldKey

* @param newKey

*/

public void renameKey(String oldKey, String newKey) {

redisTemplate.rename(oldKey, newKey);

}

/**

* newKey不存在时才重命名

*

* @param oldKey

* @param newKey

* @return 修改成功返回true

*/

public boolean renameKeyNotExist(String oldKey, String newKey) {

return redisTemplate.renameIfAbsent(oldKey, newKey);

}

/**

* 删除key

*

* @param key

*/

public void deleteKey(String key) {

redisTemplate.delete(key);

}

/**

* 删除多个key

*

* @param keys

*/

public void deleteKey(String... keys) {

Set<String> kSet = Stream.of(keys).map(k -> k).collect(Collectors.toSet());

redisTemplate.delete(kSet);

}

/**

* 删除Key的集合

*

* @param keys

*/

public void deleteKey(Collection<String> keys) {

Set<String> kSet = keys.stream().map(k -> k).collect(Collectors.toSet());

redisTemplate.delete(kSet);

}

/**

* 设置key的生命周期

*

* @param key

* @param time

* @param timeUnit

*/

public void expireKey(String key, long time, TimeUnit timeUnit) {

redisTemplate.expire(key, time, timeUnit);

}

/**

* 指定key在指定的日期过期

*

* @param key

* @param date

*/

public void expireKeyAt(String key, Date date) {

redisTemplate.expireAt(key, date);

}

/**

* 查询key的生命周期

*

* @param key

* @param timeUnit

* @return

*/

public long getKeyExpire(String key, TimeUnit timeUnit) {

return redisTemplate.getExpire(key, timeUnit);

}

/**

* 将key设置为永久有效

*

* @param key

*/

public void persistKey(String key) {

redisTemplate.persist(key);

}

}

redis的key工具类

package com.util;

/**redisKey设计

*/

public class RedisKeyUtil{

/**

* redis的key

* 形式为:

* 表名:主键名:主键值:列名

* @param tableName 表名

* @param majorKey 主键名

* @param majorKeyValue 主键值

* @param column 列名

* @return

/public static String getKeyWithColumn(String tableName,String majorKey,String majorKeyValue,String column){

StringBuffer buffer = new StringBuffer();

buffer.append(tableName).append(":");

buffer.append(majorKey).append(":");

buffer.append(majorKeyValue).append(":");

buffer.append(column);

return buffer.toString();

}

/

* redis的key

* 形式为:

* 表名:主键名:主键值

*

* @param tableName 表名

* @param majorKey 主键名

* @param majorKeyValue 主键值

* @return

*/

public static String getKey(String tableName,String majorKey,String majorKeyValue){

StringBuffer buffer = new StringBuffer();

buffer.append(tableName).append(":");

buffer.append(majorKey).append(":");

buffer.append(majorKeyValue).append(":");

return buffer.toString();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值