zoukankan      html  css  js  c++  java
  • SpringBoot2整合Redis

    pom.xml

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

    application.yml

    spring:
      redis:
        host: 192.168.16.128
        port: 6379
        # 下面这些可以不加
        jedis:
          pool:
            max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
            max-idle: 8   # 连接池中的最大空闲连接
            max-wait: -1  # 连接池最大阻塞等待时间(使用负值表示没有限制)
            min-idle: 0   # 连接池中的最小空闲连接
    

    测试类(测试需要关闭Linux的防火墙)

    • StringRedisTemplate采用String的序列化策略;RedisTemplate采用JDK的序列化策略。

    • 如果redis里存字符串使用StringRedisTemplate即可。

    • 如果redis里存储对象类型,而取出时又不想做数据转换,建议使用RedisTemplate。

    StringRedisTemplate

    package com.ah.redis;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.data.redis.core.*;
    import org.springframework.test.context.junit4.SpringRunner;
    import java.util.Map;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class StringRedisTemplateTests {
    	@Autowired
    	StringRedisTemplate redis;
    
    	@Test
    	public void contextLoads() {
    		// 测试字符串(opsForValue)
    		ValueOperations<String, String> strKV = redis.opsForValue();
    		strKV.set("name", "Dog" + new java.util.Date().getTime());
    		System.out.println(strKV.get("name"));
    
    		// 测试Hash结构的数据(boundHashOps)
    		BoundHashOperations<String, Object, Object> hash = redis.boundHashOps("book");
    		hash.put("name", "西游记");
    		hash.put("author", "吴承恩");
    		System.out.println(hash.get("name"));
    
    		// 直接获取Hash数据的键值对
    		Map<Object, Object> entries = hash.entries();
    		System.out.println("entries=" + entries);
    	}
    }
    

    RedisTemplate(操作对象)

    package com.ah.redis;
    
    import org.springframework.cache.annotation.*;
    import org.springframework.context.annotation.*;
    import org.springframework.data.redis.connection.RedisConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.serializer.*;
    import com.fasterxml.jackson.annotation.PropertyAccessor;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    @Configuration
    @EnableCaching
    public class RedisTemplateConf extends CachingConfigurerSupport {
    	@Bean
    	public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
    		RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
    		redisTemplate.setConnectionFactory(connectionFactory);
    		// 使用Jackson2JsonRedisSerializer来序列化/反序列化redis的value值
    		Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(
    				Object.class);
    		ObjectMapper objectMapper = new ObjectMapper();
    		objectMapper.setVisibility(PropertyAccessor.ALL,
    				com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.ANY);
    		objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    		jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
    		// value
    		redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
    		redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
    
    		// 使用StringRedisSerializer来序列化/反序列化redis的key值
    		RedisSerializer<?> redisSerializer = new StringRedisSerializer();
    		// key
    		redisTemplate.setKeySerializer(redisSerializer);
    		redisTemplate.setHashKeySerializer(redisSerializer);
    
    		redisTemplate.afterPropertiesSet();
    		return redisTemplate;
    	}
    }
    
    package com.ah.redis;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.test.context.junit4.SpringRunner;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class RedisTemplateTest {
    
    	@Autowired
    	private RedisTemplate<String, Object> redisTemplate;
    
    	@Test
    	public void test() {
    		// 删(如果有,删除成功)
    		Boolean delete = redisTemplate.delete("user");
    		System.out.println("delete:" + delete);
    		// 增
    		String key = "user";
    		User value = new User("八戒");
    		redisTemplate.opsForValue().set(key, value);
    		// 查
    		User user = (User) redisTemplate.opsForValue().get("user");
    		System.out.println(user);
    	}
    }
    
    class User {
    	private String name;
    
    	public User() {// 必须
    	}
    
    	public User(String name) {
    		this.name = name;
    	}
    
    	@Override
    	public String toString() {
    		return "User [name=" + name + "]";
    	}
    }
    
  • 相关阅读:
    bzoj 1176 cdq分治套树状数组
    Codeforces 669E cdq分治
    Codeforces 1101D 点分治
    Codeforces 1100E 拓扑排序
    Codeforces 1188D Make Equal DP
    Codeforces 1188A 构造
    Codeforces 1188B 式子转化
    Codeforces 1188C DP 鸽巢原理
    Codeforces 1179D 树形DP 斜率优化
    git commit -m "XX"报错 pre -commit hook failed (add --no-verify to bypass)问题
  • 原文地址:https://www.cnblogs.com/tigerlion/p/12952479.html
Copyright © 2011-2022 走看看