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

    准备工作

       安装redis最新4.0.6或者以前版本,尽量安装在linux上,并开启服务。教程很多,不再赘述。

       在JAVASE 可以使用最新Jedis 2.9.0或之前版本。与数据库连接池相同,单例实例化JedisPool,从中getSource()获取Jedis实例。

       本文主旨记录,springMVC或者SpringBoot整合Redis

    SpringBoot整合Redis

            pom.xml中引入redis依赖,使用版本1.5.2:

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

      在resources中配置application.properties,自动创建JedisConnectionFactory

    # Redis数据库索引(默认为0)
    spring.redis.database=0
    # Redis服务器地址
    spring.redis.host=127.0.0.1
    # Redis服务器连接端口
    spring.redis.port=6379  
    # Redis服务器连接密码(默认为空)
    spring.redis.password=
    # 连接池最大连接数(使用负值表示没有限制)
    spring.redis.pool.max-active=8
    # 连接池最大阻塞等待时间(使用负值表示没有限制)
    spring.redis.pool.max-wait=-1
    # 连接池中的最大空闲连接
    spring.redis.pool.max-idle=8
    # 连接池中的最小空闲连接
    spring.redis.pool.min-idle=3
    # 连接超时时间(毫秒)
    spring.redis.timeout=2000
    

      以上工作完成后,就要获取RedisTemplate对象,SpringBoot已经自动配置此对象,需要直接Autowire便可使用。在spring.redis.core中有许多数据模型,使用StringRedisTemplate对Map<String,String>操作是比较方便的,客户端不会出现/Xe/XA序列化加密形式的存储,方便后台维护。通过valOps进行set/get操作,具体代码见下:

     @Autowired
        private StringRedisTemplate<Object, Object> stringRedisTemplate;
     @Resource(name=“stringRedisTemplate”) 
         private ValueOperations<Object,Object> valOps;
    

     但存储不一定都只会使用String类型变量,所以需要重新定义RedisTemplate,使key使用StringRedisSerializer序列化,value使用Jackson2JsonRedisSerializer序列化

    @Configuration
    public class configuration {
        @Bean
        public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory factory){
    
             RedisTemplate<Object,Object> template=new RedisTemplate<Object, Object>();
    
             template.setConnectionFactory(factory);
    
            Jackson2JsonRedisSerializer valueSerializer=new Jackson2JsonRedisSerializer(Object.class);
    
            ObjectMapper om=new ObjectMapper();
    
            om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    
            om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    
            valueSerializer.setObjectMapper(om);
    
            template.setValueSerializer(valueSerializer);
    
            template.setKeySerializer(new StringRedisSerializer());
    return template; } }

     在UserDao中,注入redisTemplate对象,可使用不同的类,比如HashOperation/SetOperation/ZSetOperation/ListOperation四大基本类型的操作和一些redis操作。ValueOperation提供get set 和multiget multiset等操作,但若需要事物或者删除操作,需要获取valOps.getOperation()再进行操作。

        @Autowired
        private RedisTemplate<Object, Object> redisTemplate;
        @Resource(name="redisTemplate")
        private ValueOperations<Object,Object> valOps;

    SpringMVC整合Redis

       在springMvc进行整合,只是将RedisConnectionFactory通过配置文件进行实例化,配置文件与application.properties相同。只需在上面配置类里加上JedisConnectionFactory注入代码,见下:

        @Value("${spring.redis.database}")
        private int dateBase;
        @Value("${spring.redis.host}")
        private String host;
        @Value("${spring.redis.port}")
        private int port;
        @Value("${spring.redis.password}")
        private String password;
        @Value("${spring.redis.pool.max-active}")
        private int maxTotal;
        @Value("${spring.redis.pool.max-wait}")
        private int maxWait;
        @Value("${spring.redis.pool.max-idle}")
        private int maxIdle;
        @Value("${spring.redis.pool.min-idle}")
        private int minIdle;
        @Value("${spring.redis.timeout}")
        private int timeout;
    
        @Bean
        JedisConnectionFactory redisConnectionFactory() {
            JedisConnectionFactory factory = new JedisConnectionFactory();
            factory.setDatabase(dateBase);
            factory.setHostName(host);
            factory.setPort(port);
            factory.setPassword(password);
            JedisPoolConfig poolConfig = new JedisPoolConfig();
            poolConfig.setMaxIdle(maxIdle);
            poolConfig.setMinIdle(minIdle);
            poolConfig.setMaxWaitMillis(maxWait);
            poolConfig.setMaxTotal(maxTotal);
            factory.setPoolConfig(poolConfig);
            factory.setTimeout(timeout);
            return factory;
        }
    
  • 相关阅读:
    题解【luogu1073 最优贸易】
    题解【luogu4145 上帝造题的七分钟2(花神游历各国)】
    题解【bzoj2427 [HAOI2010]软件安装】
    以后会经常用cnblogs啦!
    题解【luogu4168 [Violet]蒲公英】
    题解【bzoj1010 [HNOI2008]玩具装箱TOY】
    题解【bzoj4653 [NOI2016] 区间】
    animation渐进实现点点点等待效果
    纯css loading动效
    文字和背景渐变动效
  • 原文地址:https://www.cnblogs.com/CaesarLinsa/p/8098931.html
Copyright © 2011-2022 走看看