Redis常用数据类型,分别是:
- String(字符串)
- List(列表)
- Hash(字典)
- Set(集合)
- Sorted Set(有序集合)
redis分布式锁:
代码:
/** * 分布式锁 */ public class RedisTool { private boolean setLock(String key, String requestId, long expire) { try { RedisCallback<String> callback = (connection) -> { JedisCommands commands = (JedisCommands) connection.getNativeConnection(); return commands.set(key, requestId, "NX", "PX", expire); }; Object result = redisTemplate.execute(callback); return !StringUtil.isNullOrEmpty(result); } catch (Exception e) { throw BusinessException.define ( "网络异常,请重试!" ); } }
//加锁 RedisTool redisTool=new RedisTool (); while(!redisTool.setLock (sampleplanCodeKey,sampleplanCodeId,SampleNum.Time_Interval.getValue () )){ try { Thread.sleep(SampleNum.Sleep_Time.getValue ()); } catch (InterruptedException e) { e.printStackTrace(); throw BusinessException.define ("网络缓慢,请重试!"); } } log.info ("==================加锁成功================="); if (StringUtil.isNullOrEmpty(redisTemplate.opsForValue().get(SampleNum.SampleNum_REDIS_Scheme_No.getName ()))) { redisTemplate.opsForValue().set(SampleNum.SampleNum_REDIS_Scheme_No.getName (), sampleNum = SampleNum.SampleNum_REDIS_Scheme_No.getValue ()); } else { sampleNum = (int) redisTemplate.opsForValue().get(String.valueOf(SampleNum.SampleNum_REDIS_Scheme_No.getName ())); } String sampleplanCode = IdUtil.getLocalTrmSeqNum(name, sampleNum); String dateFormat = new SimpleDateFormat("yyyyMM").format(new Date()); if (StringUtil.isNullOrEmpty(redisTemplate.opsForValue().get(SampleNum.Sample_DateFormat.getName ()))) { redisTemplate.opsForValue().set("dateFormat", dateFormat); } if (!dateFormat.equals(redisTemplate.opsForValue().get(SampleNum.Sample_DateFormat.getName ()))) { sampleNum = SampleNum.SampleNum_REDIS_Scheme_No.getValue (); redisTemplate.opsForValue().set("sampleNum", sampleNum ); redisTemplate.opsForValue().set("dateFormat", dateFormat); } else { redisTemplate.opsForValue().set("sampleNum", sampleNum + SampleNum.SampleNum_variant.getValue ()); } //解锁 boolean flag=redisTool.releaseLock (sampleplanCodeKey,sampleplanCodeId ); if(flag){ log.info ("==================解锁成功================="); }else{ throw BusinessException.define ( "网络缓慢,请重试!" ); }