欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

javaWeb中使用Redis缓存实例解析

程序员文章站 2023-12-17 16:05:34
直接进入主题: 一:serviceimpl定义: @service public class jedisclientsingleservice impl...

直接进入主题:

一: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缓存实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

上一篇:

下一篇: