zoukankan      html  css  js  c++  java
  • 在SpringBoot中引入Redis

    前言

    之前我们只是在Spring中加入Redis用于session的存放,并没有对redis进行主动的存放,这次我们需要加入redis工具类来方便我们在实际使用过程中操作redis

    已经加入我的github模版中:https://github.com/LinkinStars/springBootTemplate

    gradle的redis依赖

    //redis相关配置
    compile group: 'org.springframework.session', name: 'spring-session-data-redis', version: '1.3.1.RELEASE'

    spring相关配置

    #redis相关配置
    redis:
    host: localhost
    port: 6379
    pool:
    # 最大连接数(负值表示没有限制)
    max-active: 8
    # 最大阻塞等待时间(负值表示没有限制)
    max-wait: 1
    # 最大空闲链接
    max-idle: 8
    # 最小空闲链接
    min-idle: 0
    # 链接超时时间(毫秒)
    timeout: 0

    redis工具类

    package com.linkinstars.springBootTemplate.util;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.StringRedisTemplate;
    
    import java.util.concurrent.TimeUnit;
    
    /**
     * Redis操作工具类
     * @author LinkinStar
     */
    public class RedisUtil {
    
        /**
         * RedisTemplate 使用的是 JdkSerializationRedisSerializer
         * StringRedisTemplate 使用的是 StringRedisSerializer
         * 之后可以通过构建redisTemplate来替换序列化的方式
         */
    //    @Autowired
    //    private RedisTemplate<String, Object> redisTemplate;
    
        @Autowired
        private StringRedisTemplate redisTemplate;
    
    
        /**
         * 设置过期时间,单位秒
         * @param key 键的名称
         * @param timeout 过期时间
         * @return 成功:true,失败:false
         */
        public boolean setExpireTime(String key, long timeout) {
            return redisTemplate.expire(key, timeout, TimeUnit.SECONDS);
        }
    
        /**
         * 通过键删除一个值
         * @param key 键的名称
         */
        public void delete(String key) {
            redisTemplate.delete(key);
        }
    
        /**
         * 判断key是否存在
         * @param key 键的名称
         * @return 存在:true,不存在:false
         */
        public boolean hasKey(String key) {
            return redisTemplate.hasKey(key);
        }
    
        /**
         * 字符串存储
         * @param key 键
         * @param value 值
         */
        public void setString(String key, String value) {
            redisTemplate.opsForValue().set(key, value);
        }
    
        /**
         * 字符串存储(同时设置超时时间)
         * @param key 键
         * @param value 值
         * @param timeout 超时时间(以秒为单位)
         */
        public void setStringAndExpireTime(String key, String value, long timeout) {
            redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
        }
    
        /**
         * 字符串取值
         * @param key 键
         * @return 查询成功:值,查询失败,null
         */
        public String getString(String key) {
            return (String) redisTemplate.opsForValue().get(key);
        }
    
        /**
         * 存储哈希表
         * @param key 整个哈希表的键
         * @param field 表中的键
         * @param value 表中的值
         */
        public void setHash(String key, String field, Object value) {
            redisTemplate.opsForHash().put(key, field, value);
        }
    
        /**
         * 获取哈希表
         * @param key 整个哈希表的键
         * @param field 表中的键
         * @return 查询成功:值,查询失败,null
         */
        public Object getHash(String key, String field) {
            return redisTemplate.opsForHash().get(key, field);
        }
    
        /**
         * 删除哈希表中的某个元素
         * @param key 整个哈希表的键
         * @param fields 表中的键
         */
        public void deleteHash(String key, Object... fields) {
            redisTemplate.opsForHash().delete(key, fields);
        }
    }

    redis工具类初始化

    /**
     * session存放redis以及redis工具初始化
     * @author LinkinStar
     */
    @Configuration
    @EnableRedisHttpSession
    public class RedisSessionConfig {
    
        /**
         * 封装RedisTemplate
         */
        @Bean(name = "redisUtil")
        public RedisUtil redisUtil() {
            RedisUtil redisUtil = new RedisUtil();
            return redisUtil;
        }
    }

    redis测试使用

    redisUtil.setString("xxx","xxx");
    System.out.println("redis数据获取为: " + redisUtil.getString("xxx"));
    redisUtil.delete("xxx");
    System.out.println("redis数据获取为: " + redisUtil.getString("xxx"));
    
    redisUtil.setHash("xxxx", "a", "1");
    redisUtil.setHash("xxxx", "b", "2");
    redisUtil.setHash("xxxx", "c", "3");
    
    System.out.println("redis中hash的数据为: " + redisUtil.getHash("xxxx","a"));

    总结

    针对于springboot来说,redis的使用与之前不同的地方是
    1、不在需要手动去管理pool。
    2、不再是按照原先字节数组作为键的方式去存放对象数据,而是采用key对应hashmap的方式存放数据。
    3、封装工具类之后使用起来更加方便。

    后期需要改进的地方
    1、redis的配置需要根据项目实际情况进行修改。
    2、redisTemplate序列化方式需要改变,当前的序列化方式为StringRedisSerializer,之后需要根据实际情况,可以是用别的序列化方式,需要从序列化、反序列化的速度以及序列化之后的大小来看。
    3、当使用redis集群的时候,配置需要做相应的改动和处理。

  • 相关阅读:
    python django day 1
    C# 日常
    C# NPOI使用
    SharpZipLib 压缩ZIP导出
    JSON劫持
    跨站请求伪造CSRF或XSRF
    跨站脚本XSS安全
    会话窃取
    Cookie
    Promise -ES6
  • 原文地址:https://www.cnblogs.com/linkstar/p/9402616.html
Copyright © 2011-2022 走看看