您好,登錄后才能下訂單哦!
怎么在javaWeb項(xiàng)目中使用Redis進(jìn)行緩存?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
一: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; }
二:添加緩存出(一般寫(xiě)在service是層中):
public List<RoleResource> getTreeGrid() { //從緩存中獲取內(nèi)容 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轉(zhuǎn)換換成字符串 String cachString =JsonUtils.toJson(list) ; jedisClientSingleService.hset(ALL_RESOURCES_NO_CONDITION, hashId, cachString) ; } catch (Exception e) { e.printStackTrace(); } return list; }
邏輯:先從緩存中取數(shù)據(jù),如果緩存中沒(méi)有,就去數(shù)據(jù)庫(kù)中取,然后把數(shù)據(jù)存入緩存,下次查詢時(shí)就會(huì)從緩存中取。
三:緩存的同步
問(wèn)題來(lái)了,入過(guò)你修改或者刪除了數(shù)據(jù),下次取的時(shí)候,因?yàn)榫彺嬷杏袛?shù)據(jù)便在緩存中取,這是數(shù)據(jù)庫(kù)的數(shù)據(jù)與緩存中的數(shù)據(jù)不一致,便出現(xiàn)差異,這就要緩存同步了。
其實(shí)很簡(jiǎn)單,就是在修改,刪除(如果添加也需要的話),執(zhí)行下面操作:
1:刪除緩存,處理數(shù)據(jù),把數(shù)據(jù)放如緩存
2:刪除緩存,處理數(shù)據(jù)(等查詢數(shù)據(jù)的時(shí)候會(huì)把數(shù)據(jù)放入緩存,兩種情況只是寫(xiě)緩存時(shí)間的區(qū)別)
try { jedisClientSingleService.hdel(ALL_RESOURCES_NO_CONDITION, hashId); } catch (Exception e) { e.printStackTrace(); }
關(guān)于怎么在javaWeb項(xiàng)目中使用Redis進(jìn)行緩存問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。