在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集群的时候,配置需要做相应的改动和处理。

原文地址:https://www.cnblogs.com/linkstar/p/9402616.html