SpringBoot集成Redis

Redis是一個開源的利用ANSI C說話編寫、遵守BSD和談、撐持收集、可基於內存亦可持久化的日記型、Key-Value數據庫,並供給多種說話的API

35建立一個入門項目層

東西/原料

  • IDEA 全稱IntelliJ IDEA
  • Maven
  • Redis

方式/步調

  1. 1

    Maven依靠引入:

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-data-redis</artifactId>

    </dependency>

  2. 2

    起首在你的SpringBoot工程中找到你的 application.properties 文件。

    標的目的裏麵添加如下設置裝備擺設:

    #-------------------------------------Redis設置裝備擺設信息start----------------------#指心猿意馬幾號數據庫spring.redis.database = 0#Redis辦事器地址spring.redis.host = localhost#Redis辦事器毗連端口spring.redis.port = 6379# Redis辦事器毗連暗碼(默認為空)spring.redis.password = # 毗連超不時間(毫秒)spring.redis.timeout = 5000# 毗連池最年夜毗連數(利用負值暗示沒有限製)spring.redis.jedis.pool.max-active=600# 毗連池最年夜梗阻期待時候(利用負值暗示沒有限製)spring.redis.jedis.pool.max-wait=1000# 毗連池中的最年夜餘暇毗連spring.redis.jedis.pool.max-idle=8# 毗連池中的最小餘暇毗連spring.redis.jedis.pool.min-idle=0#-------------------------------------Redis設置裝備擺設信息end----------------------

  3. 3

    然後寫一個RedisUtils的東西類,網上良多粘一個就行,這裏我隻是簡單的放了幾個方式。

    @Componentpublic class RedisUtils {    @Resource    private RedisTemplate<String, String> 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) {            e.printStackTrace();            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) {            e.printStackTrace();            return false;        }    }    /**     * 刪除緩存     *     * @param key 可以傳一個值 或多個     */    @SuppressWarnings("unchecked")    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));            }        }    }    //============================String=============================    /**     * 通俗緩存獲取     *     * @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, String 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, String 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;        }    }    /**     * 遞增     *     * @param key   鍵     * @param delta 要增添幾(年夜於0)     * @return     */    public long incr(String key, long delta) {        if (delta < 0) {            throw new RuntimeException("遞增因子必需年夜於0");        }        return redisTemplate.opsForValue().increment(key, delta);    }    /**     * 遞減     *     * @param key   鍵     * @param delta 要削減幾(小於0)     * @return     */    public long decr(String key, long delta) {        if (delta < 0) {            throw new RuntimeException("遞減因子必需年夜於0");        }        return redisTemplate.opsForValue().increment(key, -delta);    }}

  4. 4

    然後。。。。然後就可以了啊簡單吧。可是沒有那麼簡單

    上麵我們寫的是0號的數據庫,此刻我們測試利用的是3號數據庫(大師在用的時辰按照營業需求就好)

  5. 5

    我們寫一個測試類用來添加:存入一個

    key=ceshi001

    value=123456

    的值

  6. 6

    然後我們去看Redis數據庫中是什麼,看圖為什麼釀成如許了呢。

    可是到此我們發現,Redis已經集當作當作功可以進行存儲了。

  7. 7

    我們來解決key值的問題:其實就是序列化的問題

    我們來成立一個RedisConfiguration的類,下麵顯示格局可能不合錯誤,直接粘貼利用就好。可是序列化的體例也有良多,可以自行百度。

    @Configurationpublic class RedisConfiguration {    @Bean    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory redisFactory){        StringRedisTemplate template = new StringRedisTemplate(redisFactory);        JdkSerializationRedisSerializer jdkSerializationRedisSerializer=new JdkSerializationRedisSerializer();        template.setValueSerializer(jdkSerializationRedisSerializer);        template.afterPropertiesSet();        return template;    }

    }

  8. 8

    好我們再去運行一次:

    發現此次對了。

    其實就是序列化的問題,若是不寫會有默認的序列化體例

    所以開辟中若是碰到有兩個工程中,去取統一個key值取到簡直實null

    不消質疑你的Redis有問題,也不消質疑為什麼別人能拿到。

    那就是key的序列化問題,你們的序列化體例要同一。

    (再說一下,一般公司開辟會同一的不會碰到如許的問題,若是碰到了申明你們的開辟不同一)

注重事項

  • 明明存進去了,卻取不到值--序列化問題
  • 數據庫的利用,默認是0號
  • 發表於 2018-06-05 00:00
  • 閱讀 ( 976 )
  • 分類:其他類型

你可能感興趣的文章

相關問題

0 條評論

請先 登錄 後評論
admin
admin

0 篇文章

作家榜 »

  1. xiaonan123 189 文章
  2. 湯依妹兒 97 文章
  3. luogf229 46 文章
  4. 小凡 34 文章
  5. Daisy萌 32 文章
  6. jy02406749 31 文章
  7. 我的QQ3117863681 24 文章
  8. 華誌健 23 文章

聯係我們:uytrv@hotmail.com 最新版app下载 工具