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);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2022-02-05 模板方法
2022-02-05 工厂方法模式