温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在javaWeb项目中使用Redis进行缓存

发布时间:2021-03-29 17:18:08 来源:亿速云 阅读:282 作者:Leah 栏目:编程语言

怎么在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进行缓存问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI