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 + "]";
    	}
    }
    
  • 相关阅读:
    三大主流负载均衡软件对比(LVS+Nginx+HAproxy)
    nginx 提示the "ssl" directive is deprecated, use the "listen ... ssl" directive instead
    centos安装nginx并配置SSL证书
    hadoop创建目录文件失败
    The server time zone value 'EDT' is unrecognized or represents more than one time zone.
    脚本启动SpringBoot(jar)
    centos做免密登录
    数据库远程连接配置
    Bash 快捷键
    TCP三次握手四次断开
  • 原文地址:https://www.cnblogs.com/tigerlion/p/12952479.html
Copyright © 2011-2022 走看看