您好,登錄后才能下訂單哦!
怎么在javaWeb項目中使用Redis進行緩存?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
一:serviceImpl定義:
@Service public class JedisClientSingleService implements JedisClient { @Autowired private JedisPool jedisPool; @Override public String get(String key) { Jedis jedis = jedisPool.getResource(); String string = jedis.get(key); jedis.close(); return string; } @Override public String set(String key, String value) { Jedis jedis = jedisPool.getResource(); String string = jedis.set(key, value); jedis.close(); return string; } @Override public String hget(String hkey, String key) { Jedis jedis = jedisPool.getResource(); String string = jedis.hget(hkey, key); jedis.close(); return string; } @Override public long hset(String hkey, String key, String value) { Jedis jedis = jedisPool.getResource(); long result = jedis.hset(hkey, key, value); jedis.close(); return result; } @Override public long incr(String key) { Jedis jedis = jedisPool.getResource(); long result = jedis.incr(key); jedis.close(); return result; } @Override public long expire(String key, int second) { Jedis jedis = jedisPool.getResource(); long result = jedis.expire(key, second); jedis.close(); return result; } @Override public long ttl(String key) { Jedis jedis = jedisPool.getResource(); long result = jedis.ttl(key); jedis.close(); return result; } @Override public long del(String key) { Jedis jedis = jedisPool.getResource(); long result = jedis.del(key); jedis.close(); return result; } @Override public long hdel(String hkey, String key) { Jedis jedis = jedisPool.getResource(); long result = jedis.hdel(hkey, key); jedis.close(); return result; }
二:添加緩存出(一般寫在service是層中):
public List<RoleResource> getTreeGrid() { //從緩存中獲取內容 try { String cachString = jedisClientSingleService.hget(ALL_RESOURCES_NO_CONDITION, hashId); if(!StringUtils.isBlank(cachString)){ List<RoleResource> list = JsonUtils.jsonStrToList(cachString, RoleResource.class) ; return list ; } } catch (Exception e) { e.printStackTrace(); } List<RoleResource> list =sessionFactory.openSession().selectList("cn.sys.auth.entity.ResourcesMapper.getTreeGrid"); //將緩存中添加緩存 try { //redsi只存字符串,把list轉換換成字符串 String cachString =JsonUtils.toJson(list) ; jedisClientSingleService.hset(ALL_RESOURCES_NO_CONDITION, hashId, cachString) ; } catch (Exception e) { e.printStackTrace(); } return list; }
邏輯:先從緩存中取數據,如果緩存中沒有,就去數據庫中取,然后把數據存入緩存,下次查詢時就會從緩存中取。
三:緩存的同步
問題來了,入過你修改或者刪除了數據,下次取的時候,因為緩存中有數據便在緩存中取,這是數據庫的數據與緩存中的數據不一致,便出現差異,這就要緩存同步了。
其實很簡單,就是在修改,刪除(如果添加也需要的話),執行下面操作:
1:刪除緩存,處理數據,把數據放如緩存
2:刪除緩存,處理數據(等查詢數據的時候會把數據放入緩存,兩種情況只是寫緩存時間的區別)
try { jedisClientSingleService.hdel(ALL_RESOURCES_NO_CONDITION, hashId); } catch (Exception e) { e.printStackTrace(); }
關于怎么在javaWeb項目中使用Redis進行緩存問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。