spring boot 使用redistemplate操作redis

12 篇文章 0 订阅

       redistemplate是spring对jedis的封装。相对于jedis多了自动管理连接池的特性,方便与其他Spring框架进行搭配使用。以下为redistemplate简单使用。

1.引入spring-data-redis

		<!-- 对于版本号没有要求不需要显示指定version,spring boot已集成该jar -->
		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-redis</artifactId>
		</dependency>
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
		</dependency>

2.创建application.yml配置文件

server:
  port: 8080
spring:
   redis:
       cluster:
        nodes:
         - ip:6379
         - ip:6380
         - ip:6381
        password: 123456
        maxRedirects: 3

3.创建RedisClusterConfigProperties读取配置文件

@Configuration
@ConfigurationProperties(prefix = "spring.redis.cluster")
public class RedisClusterConfigProperties {

  /**
   * 节点
   */
  private List<String> nodes;

  /**
   * 最大重定向次数
   */
  private Integer maxRedirects;
  
  /**
   * 密码
   */
  private String password;

  public List<String> getNodes() {
    return nodes;
  }

  public void setNodes(List<String> nodes) {
    this.nodes = nodes;
  }

  public Integer getMaxRedirects() {
    return maxRedirects;
  }

  public void setMaxRedirects(Integer maxRedirects) {
    this.maxRedirects = maxRedirects;
  }

  public String getPassword() {
    return password;
  }

  public void setPassword(String password) {
    this.password = password;
  }

4.配置连接信息,配置redistemplate

@Configuration
public class RedisConfig {

  @Autowired
  RedisClusterConfigProperties redisClusterConfigProperties;

  @Bean
  public RedisClusterConfiguration getClusterConfig() {
    RedisClusterConfiguration rcc =
        new RedisClusterConfiguration(redisClusterConfigProperties.getNodes());
    rcc.setMaxRedirects(redisClusterConfigProperties.getMaxRedirects());
    rcc.setPassword(RedisPassword.of(redisClusterConfigProperties.getPassword()));
    return rcc;
  }


  @Bean
  public JedisConnectionFactory redisConnectionFactory(RedisClusterConfiguration cluster) {
    return new JedisConnectionFactory(cluster);
  }

  /**
   * 使用Jackson2JsonRedisSerializer进行序列化,可以随意组合序列化方式,默认使用jdk序列化,直接去redis看找不明白对应key
   * 
   * @param factory
   * @return
   */
  @Bean
  public RedisTemplate<String, Object> jackson2JsonTemplate(JedisConnectionFactory factory) {
    RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
    redisTemplate.setConnectionFactory(factory);
    GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer =
        new GenericJackson2JsonRedisSerializer();
    redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
    redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
    redisTemplate.setKeySerializer(genericJackson2JsonRedisSerializer);
    redisTemplate.setHashKeySerializer(genericJackson2JsonRedisSerializer);
    redisTemplate.afterPropertiesSet();

    return redisTemplate;
  }

  /**
   * 使用String进行序列化,可以随意组合序列化方式
   * 
   * @param factory
   * @return
   */
  @Bean
  public StringRedisTemplate stringTemplate(RedisConnectionFactory factory) {
    StringRedisTemplate stringTemplate = new StringRedisTemplate();
    stringTemplate.setConnectionFactory(factory);
    RedisSerializer<String> stringSerializer = new StringRedisSerializer();
    stringTemplate.setKeySerializer(stringSerializer);
    stringTemplate.setHashKeySerializer(stringSerializer);
    stringTemplate.setValueSerializer(stringSerializer);
    stringTemplate.setHashValueSerializer(stringSerializer);
    return stringTemplate;
  }

  /**
   * 混合序列化,可以随意组合序列化方式
   * 
   * @param factory
   * @return
   */
  @Bean
  public StringRedisTemplate blendTemplate(RedisConnectionFactory factory) {
    GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer =
        new GenericJackson2JsonRedisSerializer();
    StringRedisTemplate stringTemplate = new StringRedisTemplate();
    stringTemplate.setConnectionFactory(factory);
    RedisSerializer<String> stringSerializer = new StringRedisSerializer();
    stringTemplate.setKeySerializer(genericJackson2JsonRedisSerializer);
    stringTemplate.setHashKeySerializer(genericJackson2JsonRedisSerializer);
    stringTemplate.setValueSerializer(stringSerializer);
    stringTemplate.setHashValueSerializer(stringSerializer);
    return stringTemplate;
  }

5.创建工具类对redistemplate封装

@Component
public class RedisUtil {

  Logger logger = LoggerFactory.getLogger(RedisUtil.class);

  @Resource(name = "stringTemplate")
  private RedisTemplate redisTemplate;

  public String get(String key) {
    try {
      return (String) redisTemplate.opsForValue().get(key);
    } catch (Exception e) {
      logger.error(e.getMessage(), e);
    }
    return null;
  }

  public void set(String key, String value) {
    try {
      redisTemplate.opsForValue().set(key, value);
    } catch (Exception e) {
      logger.error(e.getMessage(), e);
    }

  }

6.新增接口测试

@RestController
@RequestMapping("/test")
public class TestController {

  @Autowired
  RedisUtil RedisUtil;

  @RequestMapping(value = "/setString", method = RequestMethod.POST)
  public void setString(@RequestBody TestRedisReqDTO reqDTO) {
    RedisUtil.set(reqDTO.getKey(), reqDTO.getValue());
  }
  
  @RequestMapping(value = "/getString", method = RequestMethod.POST)
  public TestRedisResDTO getString(@RequestBody TestRedisReqDTO reqDTO) {
    TestRedisResDTO resDTO = new TestRedisResDTO();
    resDTO.setValue(RedisUtil.get(reqDTO.getKey()));
    return resDTO;
  }

完整代码可点击代码下载

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值