Redis的坑

  • 1、当key已存在时,后调用自增inr(),set(),getset()等方法,会清空缓存有效期,必须重新设置一次缓存有效期
   // 如果用INCR ,DEL,SET,GETSET会将kev对应存储的值替换成新的, 命令也会清掉超时时间!
   redisService.incr(key);
   redisService.expire(key, 60L);
  • 2、生产环境,谨慎使用keys命令,此命令会扫描内存中的全部key,且redis是单线程的,极端情况下会导致整个redis集群hang住,可用SCAN命令替代
   redisService.listKeys(key);                
   redisService.keys(key);
   
   redisService.listPattern(key + "*");        
  
  • 3、for()循环调用redis操作,性能低,可以考虑改为pipeline方式
    /**
     * pipeline方式批量执行 哈希获取所有键值对
     */
    public List batchHmGetMap(List keys) {
        List exeResult = redisTemplate.executePipelined(new SessionCallback() {
            @Override
            public String execute(RedisOperations operations) throws DataAccessException {
                ListOperations list = redisTemplate.opsForList();
                for (String key : keys) {
                    list.range(key, 0, -1);
                }
                return null;
            }
        });
        return exeResult;
    }
 
  

                            
                        
                    
                    
                    

你可能感兴趣的:(redis,数据库,缓存)