人生到头来,就是不断放下,但永远最令人心痛的|

durtime

园龄:4年8个月粉丝:10关注:1

springboot连接docker的redis注意事项

1、虚拟机配置

redis配置保护模式关闭:no

配置bind:0.0.0.0  ,  代表ip可以访问,如果是默认的127.0.0.1,代表仅自己本机

注意:daemonize yes注释起来或者 daemonize no设置,因为该配置和docker run-d参数冲突,会导致容器一直启动失败

 

2、springboot配置

基本属于默认配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
redis:
  #服务器地址
  host: 192.168.10.100 <br>#redis的ip
  #端口
  port: 6379
  #数据库
  database: 0
  #超时时间
  timeout: 1800000
  #密码
  password:
  lettuce:
    pool:
      #最大连接数,默认8
      max-active: 8
      #最大连接阻塞等待时间,默认-1
      max-wait: 10000ms
      #最大空闲连接,默认8
      max-idle: 200
      #最小空闲连接,默认0
      min-idle: 0

 项目添加配置类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.data.redis.serializer.*;
 
import java.time.Duration;
 
/**
 * Redis配置类
 * <p>
 * 乐字节:专注线上IT培训
 * 答疑老师微信:lezijie
 *
 * @author zhoubin
 * @since 1.0.0
 */
@Configuration
public class RedisConfig {
 
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setConnectionFactory(factory);
//key序列化方式
        template.setKeySerializer(redisSerializer);
//value序列化
        template.setValueSerializer(jackson2JsonRedisSerializer);
//value hashmap序列化
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        return template;
    }
 
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//解决查询缓存转换异常的问题
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
// 配置序列化(解决乱码的问题),过期时间600秒
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofSeconds(600))
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                .disableCachingNullValues();
        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                .build();
        return cacheManager;
    }
 
    // @Bean
    // public DefaultRedisScript<Boolean> script() {
    //  DefaultRedisScript<Boolean> redisScript = new DefaultRedisScript<>();
    //  //lock.lua脚本位置和application.yml同级目录
    //  redisScript.setLocation(new ClassPathResource("lock.lua"));
    //  redisScript.setResultType(Boolean.class);
    //  return redisScript;
    // }
 
//
//  @Bean
//  public DefaultRedisScript<Long> script() {
//      DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>();
//      //放在和application.yml 同层目录下
//      redisScript.setLocation(new ClassPathResource("stock.lua"));
//      redisScript.setResultType(Long.class);
//      return redisScript;
//  }
 
}

使用

1
2
3
redisTemplate.opsForValue().set("name","lucy");
//从redis获取值
String name = (String)redisTemplate.opsForValue().get("name");

 注意:获取数据时的类型,因为配置类的相关配置,返回的类型会自动的装换如:bank1的数据类型是json

结果:自动根据定义的类装配成对象,自己类型强转要注意

 

 

 

 

 

 

 

本文作者:durtime

本文链接:https://www.cnblogs.com/durtime/p/15918883.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   durtime  阅读(331)  评论(0编辑  收藏  举报
历史上的今天:
2021-02-21 家庭账本开发day10
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开