首页 > 数据库 >Spring-Boot整合Redis

Spring-Boot整合Redis

时间:2024-03-16 15:22:05浏览次数:25  
标签:return Boot Spring Redis param public key final redisTemplate

Spring-boot整合Redis

导入依赖

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

配置redis

在application.yml下增加redis的相关配置

spring:
  data:
    redis:
      host: localhost
      port: 6379
      #没密码可以不写
      password: 123456 

RedisTemplate

RedisTemplate的几种常用操作,每种操作对应Redis的一种数据结构,可以直接用来操作

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

1.配置RedisTemplate

/**
 * Redis 配置RedisTemplate
 */
@Configuration
public class RedisConfig {

    @Bean
    @SuppressWarnings(value = { "unchecked", "rawtypes" })
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory)
    {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);

        FastJsonRedisSerializer serializer = new FastJsonRedisSerializer(Object.class);

        // 使用StringRedisSerializer来序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(serializer);

        // Hash的key也采用StringRedisSerializer的序列化方式
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(serializer);

        template.afterPropertiesSet();
        return template;
    }
}

FastJsonRedisSerializer类

/**
 * Redis使用FastJson序列化
 */
public class FastJsonRedisSerializer<T> implements RedisSerializer<T>
{

    public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;

    private Class<T> clazz;

    static
    {
        ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
    }

    public FastJsonRedisSerializer(Class<T> clazz)
    {
        super();
        this.clazz = clazz;
    }

    @Override
    public byte[] serialize(T t) throws SerializationException
    {
        if (t == null)
        {
            return new byte[0];
        }
        return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
    }

    @Override
    public T deserialize(byte[] bytes) throws SerializationException
    {
        if (bytes == null || bytes.length <= 0)
        {
            return null;
        }
        String str = new String(bytes, DEFAULT_CHARSET);

        return JSON.parseObject(str, clazz);
    }


    protected JavaType getJavaType(Class<?> clazz)
    {
        return TypeFactory.defaultInstance().constructType(clazz);
    }
}

2.写一个能够操作Redis的工具类RedisCache

@SuppressWarnings(value = { "unchecked", "rawtypes" })
@Component
public class RedisCache
{
    @Autowired
    public RedisTemplate redisTemplate;

    /**
     * 缓存基本的对象,Integer、String、实体类等
     *
     * @param key 缓存的键值
     * @param value 缓存的值
     */
    public <T> void setCacheObject(final String key, final T value)
    {
        redisTemplate.opsForValue().set(key, value);
    }

    /**
     * 缓存基本的对象,Integer、String、实体类等
     *
     * @param key 缓存的键值
     * @param value 缓存的值
     * @param timeout 时间
     * @param timeUnit 时间颗粒度
     */
    public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit)
    {
        redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
    }

    /**
     * 设置有效时间
     *
     * @param key Redis键
     * @param timeout 超时时间
     * @return true=设置成功;false=设置失败
     */
    public boolean expire(final String key, final long timeout)
    {
        return expire(key, timeout, TimeUnit.SECONDS);
    }

    /**
     * 设置有效时间
     *
     * @param key Redis键
     * @param timeout 超时时间
     * @param unit 时间单位
     * @return true=设置成功;false=设置失败
     */
    public boolean expire(final String key, final long timeout, final TimeUnit unit)
    {
        return redisTemplate.expire(key, timeout, unit);
    }

    /**
     * 获得缓存的基本对象。
     *
     * @param key 缓存键值
     * @return 缓存键值对应的数据
     */
    public <T> T getCacheObject(final String key)
    {
        ValueOperations<String, T> operation = redisTemplate.opsForValue();
        return operation.get(key);
    }

    /**
     * 删除单个对象
     *
     * @param key
     */
    public boolean deleteObject(final String key)
    {
        return redisTemplate.delete(key);
    }

    /**
     * 删除集合对象
     *
     * @param collection 多个对象
     * @return
     */
    public long deleteObject(final Collection collection)
    {
        return redisTemplate.delete(collection);
    }

    /**
     * 缓存List数据
     *
     * @param key 缓存的键值
     * @param dataList 待缓存的List数据
     * @return 缓存的对象
     */
    public <T> long setCacheList(final String key, final List<T> dataList)
    {
        Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
        return count == null ? 0 : count;
    }

    /**
     * 获得缓存的list对象
     *
     * @param key 缓存的键值
     * @return 缓存键值对应的数据
     */
    public <T> List<T> getCacheList(final String key)
    {
        return redisTemplate.opsForList().range(key, 0, -1);
    }

    /**
     * 缓存Set
     *
     * @param key 缓存键值
     * @param dataSet 缓存的数据
     * @return 缓存数据的对象
     */
    public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet)
    {
        BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);
        Iterator<T> it = dataSet.iterator();
        while (it.hasNext())
        {
            setOperation.add(it.next());
        }
        return setOperation;
    }

    /**
     * 获得缓存的set
     *
     * @param key
     * @return
     */
    public <T> Set<T> getCacheSet(final String key)
    {
        return redisTemplate.opsForSet().members(key);
    }

    /**
     * 缓存Map
     *
     * @param key
     * @param dataMap
     */
    public <T> void setCacheMap(final String key, final Map<String, T> dataMap)
    {
        if (dataMap != null) {
            redisTemplate.opsForHash().putAll(key, dataMap);
        }
    }

    /**
     * 获得缓存的Map
     *
     * @param key
     * @return
     */
    public <T> Map<String, T> getCacheMap(final String key)
    {
        return redisTemplate.opsForHash().entries(key);
    }

    /**
     * 往Hash中存入数据
     *
     * @param key Redis键
     * @param hKey Hash键
     * @param value 值
     */
    public <T> void setCacheMapValue(final String key, final String hKey, final T value)
    {
        redisTemplate.opsForHash().put(key, hKey, value);
    }

    /**
     * 获取Hash中的数据
     *
     * @param key Redis键
     * @param hKey Hash键
     * @return Hash中的对象
     */
    public <T> T getCacheMapValue(final String key, final String hKey)
    {
        HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash();
        return opsForHash.get(key, hKey);
    }

    /**
     * 删除Hash中的数据
     * 
     * @param key
     * @param hkey
     */
    public void delCacheMapValue(final String key, final String hkey)
    {
        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.delete(key, hkey);
    }

    /**
     * 获取多个Hash中的数据
     *
     * @param key Redis键
     * @param hKeys Hash键集合
     * @return Hash对象集合
     */
    public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys)
    {
        return redisTemplate.opsForHash().multiGet(key, hKeys);
    }

    /**
     * 获得缓存的基本对象列表
     *
     * @param pattern 字符串前缀
     * @return 对象列表
     */
    public Collection<String> keys(final String pattern)
    {
        return redisTemplate.keys(pattern);
    }

    /**
     * 对redis中,某个hash结构里面的value进行递增操作
     *
     * @param key 操作的是哪个hash结构
     * @param hKey 对hash结构里面的哪个key进行操作
     * @param v key对应的value值会递增多少
     */
    public void incrementCacheMapValue(String key,String hKey,long v){
        redisTemplate.opsForHash().increment(key, hKey, v);
    }

}

里面的操作根据实际情况来 自定义

标签:return,Boot,Spring,Redis,param,public,key,final,redisTemplate
From: https://www.cnblogs.com/LIang2003/p/18077116

相关文章

  • redis cluster 迁移
    一、redis迁移概述。生产环境Redis当前部署环境为六台16核126G服务器,服务器资源整体配置较高,使用率较低(具体使用率参见表一)。为了更好地提升资源使用率,优化成本,故对rediscluster集群做迁移和合并。Rediscluster集群的迁移步骤为:首先安装redis集群,再次迁移redis数据,最后做业务切......
  • 基于springboot的房屋租赁系统
    基于springboot的房屋租赁系统文章目录基于springboot的房屋租赁系统引言功能演示视频开发环境系统功能介绍功能对照表功能截图编程框架SpringBoot框架SSM框架vue框架示例代码数据库操作示例源码获取引言博主介绍:✌专注于Java技术领域和学生毕业项目实战,欢......
  • SpringBoot - [00] 注解大全
      @SpringBootApplication这个注解用于标识一个SpringBoot应用的主类。它整合了@Configuration,@EnableAutoConfiguration,@ComponentScan。@SpringBootApplicationpublicclassDemoApplication{publicstaticvoidmain(String[]args){SpringApplication.......
  • 快速创建一个spring-boot-starter
    可以使用springspi和import两种方法1.导入starter依赖1.1.maven管理工具<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency>1.2.gradle管理工......
  • 基于Spring Boot+Vue的校园二手交易平台
    目录一、绪论1.1开发背景1.2系统开发平台1.3系统开发环境二、需求分析2.1问题分析2.2系统可行性分析2.2.1技术可行性2.2.2操作可行性2.3系统需求分析2.3.1学生功能需求2.3.2管理员功能需求2.3.3游客功能需求三、系统设计3.1功能结构图3.2E-R模型3.3数......
  • 数据量大的时候,要使用 redis 而不用 mysql
    Redis和MySQL都是广泛使用的数据库,但它们适用于不同的场景和需求。MySQL是一个关系型数据库,它适用于存储大量的结构化数据,并且提供复杂的数据查询和事务处理能力。它适合于需要进行深度数据分析和复杂joins的场景。Redis是一个内存中的数据结构存储系统,通常用作数据库、缓......
  • Spring Schedule定时任务进阶篇(调度器)
    SpringSchedule背后支持多种任务调度方案,如JDKTimer、concurrent包下的ScheduledExecutorService以及Quartz等。Spring通过封装这些底层实现,为开发者提供了统一的接口和配置方式来处理定时任务。接下来通过SpringBoot+数据库来实现根据数据库数据来动态管理我们的定时任务,我这......
  • springboot/java/php/node/python农产品销售系统小程序【计算机毕设】
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的迅猛发展,传统农产品销售模式正逐步向线上转移。小程序作为移动互联网的一种轻量级应用,因其开发成本低、传播快、使用方便等特点,成为连接......
  • Spring Bean的生命周期流程
    前言Java中的公共类称之为JavaBean,而Spring中的Bean指的是将对象的生命周期,交给SpringIoC容器来管理的对象。所以Spring中的Bean对象在使用时,无需通过new来创建对象,只需要通过DI(依赖注入),从Spring中取出要使用的对象即可。在Spring框架中单实例Bean的初始化......
  • Spring框架与其他框架(如Struts、Hibernate等)相比有何独特之处?Spring框架的主要优点有
    Spring框架与其他框架(如Struts、Hibernate等)相比有何独特之处?在Spring框架的面试中,可能会被问到的问题涵盖多个方面,包括但不限于以下几个方面:Spring框架的基本理解:请简述一下你对Spring框架的理解。Spring框架的主要优点有哪些?Spring框架与其他框架(如Struts、Hibernate......