zoukankan      html  css  js  c++  java
  • springboot配置redis

    1、引入 spring-boot-starter-redis(1.4版本前),spring-boot-starter-data-redis(1.4版本后)

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

    2,添加配置文件

    # REDIS (RedisProperties)
    # Redis数据库索引(默认为0)
    spring.redis.database=0  
    # Redis服务器地址
    spring.redis.host=192.168.0.58
    # 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=0  
    # 连接超时时间(毫秒)
    spring.redis.timeout=0
    View Code

    3.Redis缓存配置类提供redisTemplate(获得配置文件中连接参数后的)

    @Configuration
    @EnableCaching
    public class RedisCacheConfig {
        @Bean
        public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate){
            CacheManager cacheManager = new RedisCacheManager(redisTemplate);
            return cacheManager;
        }
        @Bean
        public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory){
            RedisTemplate<String, String> redisTemplate = new RedisTemplate<String,String>();
            redisTemplate.setConnectionFactory(factory);
            // key序列化方式;(不然会出现乱码;),但是如果方法上有Long等非String类型的话,会报类型转换错误;
            // 所以在没有自己定义key生成策略的时候,以下这个代码建议不要这么写,可以不配置或者自己实现ObjectRedisSerializer
            // 或者JdkSerializationRedisSerializer序列化方式;
            RedisSerializer<String> redisSerializer = new StringRedisSerializer();// Long类型不可以会出现异常信息;
            redisTemplate.setKeySerializer(redisSerializer);
            redisTemplate.setHashKeySerializer(redisSerializer);
            return redisTemplate;
        }
        
    }
    View Code

    4,Redis工具类

    package com.ty.tyzxtj.util;
    import java.io.Serializable;
    import java.util.Map;
    import java.util.Set;
    import java.util.concurrent.TimeUnit;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.core.ValueOperations;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    import org.springframework.stereotype.Component;
    /**
     * redicache 工具类
     * 
     */
    @SuppressWarnings("unchecked")
    @Component
    public class RedisUtil {
    @SuppressWarnings("rawtypes")
    @Autowired
    private RedisTemplate redisTemplate;
    /**
     * 批量删除对应的value
     * 
     * @param keys
     */
    public void remove(final String... keys) {
        for (String key : keys) {
        remove(key);
        }
    }
    /**
     * 批量删除key
     * 
     * @param pattern
     */
    public void removePattern(final String pattern) {
        Set<Serializable> keys = redisTemplate.keys(pattern);
        if (keys.size() > 0)
        redisTemplate.delete(keys);
    }
    /**
     * 删除对应的value
     * 
     * @param key
     */
    public void remove(final String key) {
        if (exists(key)) {
        redisTemplate.delete(key);
        }
    }
    /**
     * 判断缓存中是否有对应的value
     * 
     * @param key
     * @return
     */
    public boolean exists(final String key) {
        return redisTemplate.hasKey(key);
    }
    /**
     * 读取缓存
     * 
     * @param key
     * @return
     */
    public String get(final String key) {
        Object result = null;
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
        result = operations.get(key);
        if(result==null){
            return null;
        }
        return result.toString();
    }
    /**
     * 写入缓存
     * 
     * @param key
     * @param value
     * @return
     */
    public boolean set(final String key, Object value) {
        boolean result = false;
        try {
        ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
        operations.set(key, value);
        result = true;
        } catch (Exception e) {
        e.printStackTrace();
        }
        return result;
    }
    /**
     * 写入缓存
     * 
     * @param key
     * @param value
     * @return
     */
    public boolean set(final String key, Object value, Long expireTime) {
        boolean result = false;
        try {
        ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
        operations.set(key, value);
        redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
        result = true;
        } catch (Exception e) {
        e.printStackTrace();
        }
        return result;
        }
    
        public  boolean hmset(String key, Map<String, String> value) {
            boolean result = false;
            try {
                redisTemplate.opsForHash().putAll(key, value);
                result = true;
            } catch (Exception e) {
            e.printStackTrace();
            }
            return result;
        }
        
        public  Map<String,String> hmget(String key) {
            Map<String,String> result =null;
            try {
                result=  redisTemplate.opsForHash().entries(key);
            } catch (Exception e) {
            e.printStackTrace();
            }
            return result;
        }
    }
    View Code

     5.使用方法

  • 相关阅读:
    浅析ES6中的iterator
    nodejs中的异步回调机制
    用好js与nodejs中的try...catch
    vscode设置html默认浏览器
    nodejs中相互引用(循环引用)的模块分析
    ES6—带默认值的函数参数及其作用域
    函数声明与函数表达式的区别
    let块级引起的闭包思考
    进程与线程
    angular(^4)-监控表格按键行为的问题
  • 原文地址:https://www.cnblogs.com/xiaoping1993/p/7761123.html
Copyright © 2011-2022 走看看