springboot项目redisTemplate快速有效操作redis

简单介绍一下这个redisTemplate吧,目前我也是只接触了一小块,但是项目中已经实际操作ok了。

这次分享主要介绍在springBoot中整合redisTemplate,暂时只针对字符串进行操作;

RedisTemplate介绍

spring封装了RedisTemplate对象来进行对redis的各种操作,它支持所有的 redis 原生的api。

RedisTemplate中定义了对5种数据结构操作

redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set

废话不多说,直接开始贴代码了。

pom maven添加redis依赖

<!-- redis -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

1.springBoot中配置redis

spring:
  session:
    store-type: redis
  redis:
    database: 0
    host: **.**.**.**
    port: 6379
    #password: **********

2.RedisConfig配置

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.cache.jcache.config.JCacheConfigurerSupport;
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.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by wdd on 2019/3/18.
 *
 * @author wdd
 */

@Configuration
@EnableCaching
public class RedisConfig extends JCacheConfigurerSupport {

    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;
    @Value("${spring.redis.database}")
    private int database;
    //@Value("${cache.redis.password}")
    //private String password;

    @Bean
    @Override
    public KeyGenerator keyGenerator() {
        return (target, method, params) -> {
            StringBuilder sb = new StringBuilder();
            sb.append(target.getClass().getSimpleName()).append(".");
            sb.append(method.getName()).append(".");
            for (Object obj : params) {
                if (obj != null) {
                    sb.append(obj.toString());
                }
            }
            return sb.toString();
        };
    }

    @SuppressWarnings("rawtypes")
    @Bean
    public CacheManager cacheManager(RedisTemplate redisTemplate) {
        RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
        //设置缓存过期时间s
        //rcm.setDefaultExpiration(120);//秒
        //设置缓存过期时间 秒 30天
        //rcm.setDefaultExpiration(2592000);
        Map<String, Long> expires = new HashMap<>(2);
        expires.put("CommonService", 2592000L * 2);
        rcm.setExpires(expires);
        return rcm;
    }

    @Bean
    public RedisTemplate redisTemplate() {
        JedisConnectionFactory factory = new JedisConnectionFactory();
        factory.setHostName(host);
        //factory.setPassword(password);
        factory.setPort(port);
        factory.setDatabase(database);
        factory.afterPropertiesSet();
        StringRedisTemplate template = new StringRedisTemplate(factory);
        FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteClassName);
        fastJsonRedisSerializer.setFastJsonConfig(fastJsonConfig);
        template.setValueSerializer(fastJsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }

}

开始实际操作,这里介绍两种方式(1.注解方法方式。2.使用k-value方式进行存储与获取)

一、 k-value方式:

注入RedisTemplate ,切记不可new的方式调用,否则会注入失败,操作失败

import org.springframework.data.redis.core.RedisTemplate;//类地址
@Resource
private RedisTemplate redisTemplate;

保存数据至redis中

                        
//参数介绍:key,value,存储时间,时间类型(TimeUnit支持日,时,分,秒,毫秒)
//set void set(K key, V value, long timeout, TimeUnit unit);
//TimeUnit.DAYS 日 的工具类 
//TimeUnit.HOURS 时 的工具类 
//TimeUnit.MINUTES 分 的工具类 
//TimeUnit.SECONDS 秒 的工具类 
//TimeUnit.MILLISECONDS 毫秒 的工具类
redisTemplate.opsForValue().set("registerMobiles:sendSms"+mobiles,code,3*60, TimeUnit.SECONDS);

 //从缓存中获取验证码信息
 Object verificationCodeRedis = redisTemplate.opsForValue().get("registerMobiles:sendSms"+mobiles);
//由于设置的是180秒失效,180秒之内查询有结果,180秒之后返回为null

二、方法注解方式:

@CacheConfig(cacheNames = "CommonService")//Service实现类上方注解;


    @Override
    @Cacheable
    public String influencePersons() {
        //业务逻辑处理。。。
		//最终会将结果存入redis中
        return "";
    }

好了,代码就这么多,

如果有问题请及时留言,我会第一时间反馈,也可添加我的qq:983469079 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot可以通过配置多个Redis连接池来实现集成多个Redis。具体步骤如下: 1. 在`application.properties`文件中添加多个Redis连接配置,如下所示: ``` # Redis1 spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password= # Redis2 spring.redis2.host=127.0.0.1 spring.redis2.port=6380 spring.redis2.password= ``` 2. 在`@Configuration`类中创建多个`RedisConnectionFactory`对象,如下所示: ``` @Configuration public class RedisConfig { @Autowired private Environment environment; @Bean(name = "redis1ConnectionFactory") public RedisConnectionFactory redis1ConnectionFactory() { JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(); jedisConnectionFactory.setHostName(environment.getProperty("spring.redis.host")); jedisConnectionFactory.setPort(Integer.parseInt(environment.getProperty("spring.redis.port"))); jedisConnectionFactory.setPassword(environment.getProperty("spring.redis.password")); return jedisConnectionFactory; } @Bean(name = "redis2ConnectionFactory") public RedisConnectionFactory redis2ConnectionFactory() { JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(); jedisConnectionFactory.setHostName(environment.getProperty("spring.redis2.host")); jedisConnectionFactory.setPort(Integer.parseInt(environment.getProperty("spring.redis2.port"))); jedisConnectionFactory.setPassword(environment.getProperty("spring.redis2.password")); return jedisConnectionFactory; } } ``` 3. 在需要使用Redis的地方使用`@Qualifier`注解指定使用哪个`RedisConnectionFactory`,如下所示: ``` @Autowired @Qualifier("redis1ConnectionFactory") private RedisConnectionFactory redis1ConnectionFactory; @Autowired @Qualifier("redis2ConnectionFactory") private RedisConnectionFactory redis2ConnectionFactory; ``` 4. 使用`redis1ConnectionFactory`和`redis2ConnectionFactory`创建`RedisTemplate`对象,并使用`@Qualifier`注解指定使用哪个`RedisConnectionFactory`,如下所示: ``` @Bean(name = "redis1Template") public RedisTemplate redis1Template() { RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnectionFactory(redis1ConnectionFactory); return redisTemplate; } @Bean(name = "redis2Template") public RedisTemplate redis2Template() { RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnectionFactory(redis2ConnectionFactory); return redisTemplate; } ``` 5. 在需要使用Redis的地方使用`@Qualifier`注解指定使用哪个`RedisTemplate`,如下所示: ``` @Autowired @Qualifier("redis1Template") private RedisTemplate redis1Template; @Autowired @Qualifier("redis2Template") private RedisTemplate redis2Template; ``` 至此,Spring Boot项目就成功集成了多个Redis。在使用时,只需要使用对应的`RedisTemplate`即可。例如,使用`redis1Template`操作Redis1,使用`redis2Template`操作Redis2。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值