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();
		}


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值