redis操作技巧
Set数据的操作
1.sadd对数据的增加
redisAdapter.sadd(key1,value1);
2.srem对数据的删除
jedisAdapter.srem(key1,value1);
3.smembers获取所有的值
jedisAdapter.smembers(key1);
4.del删除整个key
jedisAdapter.del(key1)

HASH数据的操作
》
1.hmsetStr(批量):value可以为map,进行批量插入
jedisAdapter.hmsetStr(key,map);
2.hgetStr:进行指定key,field的查找
jedisAdapter.hgetStr(QUOTE_RESET_VALUEDATE_FLAG, field);
3.hgetAll:返回这个key下面所有的map结构
jedisAdapter.hgetAll(key);
4.hsetStr:单值插入
jedisAdapter.hsetStr(key,field, JacksonUtil.obj2json(cashBondTalkQuoteRequest));
一般hsetStr和hgetStr的使用
jedisAdapter.hsetStr(Constants.ORDER_BOND_QUOTE, talkOrderId, JacksonUtil.obj2json(cashBondTalkQuoteRequest));
String json = jedisAdapter.hgetStr(Constants.ORDER_BOND_QUOTE, dbData.getOrderId());

String数据的操作
4.setStr和getStr的使用
jedisAdapter.setStr(cacheMarketRedisKey, JacksonUtil.tryObj2json(sourcePricePojo));
String marketPrice = jedisAdapter.getStr(getCacheMarketRedisKey(businessType, feedCode, pair, farTenor));

================================================redis锁==================================
独占式锁--更新锁机制
1.设置一个状态字段,ture-获取到锁,false-没有获取到锁
2.设置一个定时任务,判断状态字段,当为false时,尝试去获取锁。
通过加锁的状态,如果获取锁成交,将状态字段设置为true。
3.如果判断状态字段为true时,则需要更新锁的时间。
private AtomicBoolean GOT_LOCK = new AtomicBoolean(false); @Scheduled(fixedRate = 10 * 1000) public void init() { //如果当前节点获取到锁的情况下,直接给对应的redis的key更新超时时间 if (GOT_LOCK.get()) { boolean lock = jedisAdapter.updateLock(MarketConstants.CMDS_STATE_LOCK, lockFlag, expired); if (!lock) { GOT_LOCK.set(false);return; }
//业务处理
} else { boolean lock = jedisAdapter.lock(MarketConstants.CMDS_STATE_LOCK, lockFlag, expired); if (lock) { GOT_LOCK.set(true); //业务处理 } } }
阻塞式锁:并尝试性获取锁
private void doSomethingWithLock(Runnable runnable) {
try {
long reTryTimes = 0;
while (true) {
if (jedisAdapter.lock(getDistributeLock(), moduleName, 30000)) {
runnable.run();
break;
} else {
Clock.trySleep(1);
reTryTimes++;
if (reTryTimes > 10000) {
LOGGER.error("[HASH] doSomethineWithLock 获取锁超时,retryTime[{}],放弃执行", reTryTimes);
break;
}
}
}
} catch (Exception e) {
LOGGER.error("[HASH] doSomethineWithLock acc error", e);
} finally {
jedisAdapter.unlock(getDistributeLock(), moduleName);
}
}
-----
sortSet的使用
通过zdd添加数据,key,分数,值,他是通过分数进行排序的,
jedisAdapter.zadd(overdueCorePriceKeyMap.get(businessType), deadline, cacheCoreRedisKey);
通过
zrangeByScore:根据这个key,一个大小范围进行查找
jedisAdapter.zrangeByScore(overdueCorePriceKeyMap.get(businessTypeEnum.getQuoteCode()),
0, currentTimeMillis);
浙公网安备 33010602011771号