springboot 使用Redis

來源:互聯網
上載者:User

標籤:try   init   frame   jedis   dom   工具類   @param   刪除   erro   

一、 配置pom
    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-data-redis</artifactId>    </dependency>    <dependency>        <groupId>redis.clients</groupId>        <artifactId>jedis</artifactId>        <version>2.9.0</version>    </dependency>
二、在resources下建立redis.properties
        redis.hostName=127.0.0.1        #連接埠號碼          redis.port=6379        #如果有密碼          #redis.password=        #用戶端逾時時間單位是毫秒 預設是2000         redis.timeout=10000                  #最大空閑數          redis.maxIdle=300          #串連池的最大資料庫連接數。設為0表示無限制,如果是jedis 2.4以後用redis.maxTotal          #redis.maxActive=600          #控制一個pool可分配多少個jedis執行個體,用來替換上面的redis.maxActive,如果是jedis 2.4以後用該屬性          redis.maxTotal=1000          #最大建立串連等待時間。如果超過此時間將接到異常。設為-1表示無限制。          redis.maxWaitMillis=1000          #串連的最小空閑時間 預設1800000毫秒(30分鐘)          redis.minEvictableIdleTimeMillis=300000          #每次釋放串連的最大數目,預設3          redis.numTestsPerEvictionRun=1024          #逐出掃描的時間間隔(毫秒) 如果為負數,則不運行逐出線程, 預設-1          redis.timeBetweenEvictionRunsMillis=30000          #是否在從池中取出串連前進行檢驗,如果檢驗失敗,則從池中去除串連並嘗試取出另一個          redis.testOnBorrow=true          #在空閑時檢查有效性, 預設false          redis.testWhileIdle=true          
三、編寫RedisConfig.java
    package com.example.demo.config;    import com.example.demo.util.RedisUtil;    import org.slf4j.Logger;    import org.slf4j.LoggerFactory;    import org.springframework.beans.factory.annotation.Value;    import org.springframework.context.annotation.Bean;    import org.springframework.context.annotation.Configuration;    import org.springframework.context.annotation.PropertySource;    import org.springframework.data.redis.connection.RedisConnectionFactory;    import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;    import org.springframework.data.redis.core.RedisTemplate;    import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;    import org.springframework.data.redis.serializer.StringRedisSerializer;    import redis.clients.jedis.JedisPoolConfig;    /**     * @author 12084     * @create 2018-08-13 9:58     */    @Configuration    @PropertySource("classpath:redis.properties")    public class RedisConfig {    public static final Logger logger = LoggerFactory.getLogger(RedisConfig.class);    @Value("${redis.hostName}")    private String hostName;    @Value("${redis.port}")    private Integer port;    @Value("${redis.maxIdle}")    private Integer maxIdle;    @Value("${redis.maxTotal}")    private Integer maxTotal;    @Value("${redis.timeout}")    private Integer timeout;    @Value("${redis.maxWaitMillis}")    private Integer maxWaitMillis;    @Value("${redis.minEvictableIdleTimeMillis}")    private Integer minEvictableIdleTimeMillis;    @Value("${redis.numTestsPerEvictionRun}")    private Integer numTestsPerEvictionRun;    @Value("${redis.timeBetweenEvictionRunsMillis}")    private long timeBetweenEvictionRunsMillis;    @Value("${redis.testOnBorrow}")    private boolean testOnBorrow;    @Value("${redis.testWhileIdle}")    private boolean testWhileIdle;    /**     * JedisPoolConfig 串連池     *     * @return     */    @Bean    public JedisPoolConfig jedisPoolConfig() {        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();        // 最大空閑數        jedisPoolConfig.setMaxIdle(maxIdle);        // 串連池的最大資料庫連接數        jedisPoolConfig.setMaxTotal(maxTotal);        // 最大建立串連等待時間        jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);        // 逐出串連的最小空閑時間 預設1800000毫秒(30分鐘)        jedisPoolConfig.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);        // 每次逐出檢查時 逐出的最大數目 如果為負數就是 : 1/abs(n), 預設3        jedisPoolConfig.setNumTestsPerEvictionRun(numTestsPerEvictionRun);        // 逐出掃描的時間間隔(毫秒) 如果為負數,則不運行逐出線程, 預設-1        jedisPoolConfig.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);        // 是否在從池中取出串連前進行檢驗,如果檢驗失敗,則從池中去除串連並嘗試取出另一個        jedisPoolConfig.setTestOnBorrow(testOnBorrow);        // 在空閑時檢查有效性, 預設false        jedisPoolConfig.setTestWhileIdle(testWhileIdle);        return jedisPoolConfig;    }    @Bean    public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig) {        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(jedisPoolConfig);        //串連池        jedisConnectionFactory.setPoolConfig(jedisPoolConfig);        //IP地址        jedisConnectionFactory.setHostName(hostName);        //連接埠號碼        jedisConnectionFactory.setPort(port);        //如果Redis設定有密碼        //jedisConnectionFactory.setPassword(password);        //用戶端逾時時間單位是毫秒        jedisConnectionFactory.setTimeout(timeout);        return jedisConnectionFactory;    }    /**     * 執行個體化 RedisTemplate 對象     *     * @return     */    @Bean    public RedisTemplate<String, Object> functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) {        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();        initDomainRedisTemplate(redisTemplate, redisConnectionFactory);        return redisTemplate;    }    /**     * 設定資料存入 redis 的序列化方式,並開啟事務     *     * @param redisTemplate     * @param factory     */    private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {        //如果不配置Serializer,那麼儲存的時候預設使用String,如果用User類型儲存,那麼會提示錯誤User can‘t cast to String!        redisTemplate.setKeySerializer(new StringRedisSerializer());        redisTemplate.setHashKeySerializer(new StringRedisSerializer());        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());        // 開啟事務        redisTemplate.setEnableTransactionSupport(true);        redisTemplate.setConnectionFactory(factory);    }    /**     * 注入封裝RedisTemplate     *     * @return RedisUtil     * @throws     * @Title: redisUtil     */    @Bean(name = "redisUtil")    public RedisUtil redisUtil(RedisTemplate<String, Object> redisTemplate) {        RedisUtil redisUtil = new RedisUtil();        redisUtil.setRedisTemplate(redisTemplate);        return redisUtil;    }    }
四、 編寫RedisUtil工具類
    package com.example.demo.util;    import org.slf4j.Logger;    import org.slf4j.LoggerFactory;    import org.springframework.data.redis.core.RedisTemplate;    import org.springframework.util.CollectionUtils;        import java.util.List;    import java.util.Map;    import java.util.Set;    import java.util.concurrent.TimeUnit;        /**     * @author 12084     * @create 2018-08-13 10:31     */    public class RedisUtil {    public static final Logger logger = LoggerFactory.getLogger(RedisUtil.class);    private RedisTemplate<String, Object> redisTemplate;    public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {        this.redisTemplate = redisTemplate;    }    /**     * 指定緩衝失效時間     * @param key 鍵     * @param time 時間(秒)     * @return     */    public boolean expire(String key, long time) {        try{            if (time > 0) {                redisTemplate.expire(key, time, TimeUnit.SECONDS);            }            return true;        }catch(Exception e){            logger.error("RedisUtil.expire error:",e);            return false;        }    }    /**     * 根據key 擷取到期時間     *     * @param key 鍵 不能為null     * @return 時間(秒) 返回0代表為永久有效     */    public long getExpire(String key) {        return redisTemplate.getExpire(key, TimeUnit.SECONDS);    }    /**     * 判斷key是否存在     * @param key 鍵     * @return true 存在 false不存在     */    public boolean hasKey(String key){        try{            return redisTemplate.hasKey(key);        }catch(Exception e){            logger.error("RedisUtil.hasKey error:",e);            return false;        }    }    /**     * 刪除緩衝     * @param key 可以傳一個值 或多個     */    public void del(String... key){        if (key != null && key.length > 0) {            if (key.length == 1) {                redisTemplate.delete(key[0]);            }else {                redisTemplate.delete(CollectionUtils.arrayToList(key));            }        }    }    /**     * 普通緩衝擷取     *     * @param key 鍵     * @return 值     */    public Object get(String key) {        return key == null ? null : redisTemplate.opsForValue().get(key);    }    /**     * 普通緩衝放入     * @param key 鍵     * @param value 值     * @return true成功 false失敗     */    public boolean set(String key,Object value) {        try {            redisTemplate.opsForValue().set(key, value);            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        }    }    /**     * 普通緩衝放入並設定時間     * @param key 鍵     * @param value 值     * @param time 時間(秒) time要大於0 如果time小於等於0 將設定無限期     * @return true成功 false 失敗     */    public boolean set(String key,Object value,long time){        try {            if(time>0){                redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);            }else{                set(key, value);            }            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        }    }    }
五、編寫測試類別
    package com.example.demo.service;    import com.example.demo.util.RedisUtil;    import org.junit.Test;    import org.junit.runner.RunWith;    import org.slf4j.Logger;    import org.slf4j.LoggerFactory;    import org.springframework.beans.factory.annotation.Autowired;    import org.springframework.boot.test.context.SpringBootTest;    import org.springframework.test.context.junit4.SpringRunner;    /**     * @author 12084     * @create 2018-08-10 10:31     */        @RunWith(SpringRunner.class)    @SpringBootTest    public class RedisServiceTest {            public static final Logger logger = LoggerFactory.getLogger(RedisServiceTest.class);            @Autowired        private RedisUtil redisUtil;                @Test        public void t1() {    //        boolean lmj = redisUtil.set("lmj", "520");    //    //        logger.warn("lmj:{}", lmj);                String lmj = (String)redisUtil.get("lmj");            logger.warn("lmj:{}", lmj);        }        }

springboot 使用Redis

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.