直接進入主題:
一: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緩存實例解析的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
新聞熱點
疑難解答
圖片精選