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











 
posted @   WXY_WXY  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2022-02-05 模板方法
2022-02-05 工厂方法模式
点击右上角即可分享
微信分享提示