Redis是一個開源的利用ANSI C說話編寫、遵守BSD和談、撐持收集、可基於內存亦可持久化的日記型、Key-Value數據庫,並供給多種說話的API
35建立一個入門項目層
Maven依靠引入:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
起首在你的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----------------------
然後寫一個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); }}
然後。。。。然後就可以了啊簡單吧。可是沒有那麼簡單
上麵我們寫的是0號的數據庫,此刻我們測試利用的是3號數據庫(大師在用的時辰按照營業需求就好)
我們寫一個測試類用來添加:存入一個
key=ceshi001
value=123456
的值
然後我們去看Redis數據庫中是什麼,看圖為什麼釀成如許了呢。
可是到此我們發現,Redis已經集當作當作功可以進行存儲了。
我們來解決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; }
}
好我們再去運行一次:
發現此次對了。
其實就是序列化的問題,若是不寫會有默認的序列化體例
所以開辟中若是碰到有兩個工程中,去取統一個key值取到簡直實null
不消質疑你的Redis有問題,也不消質疑為什麼別人能拿到。
那就是key的序列化問題,你們的序列化體例要同一。
(再說一下,一般公司開辟會同一的不會碰到如許的問題,若是碰到了申明你們的開辟不同一)
0 篇文章
如果覺得我的文章對您有用,請隨意打賞。你的支持將鼓勵我繼續創作!