spring data redis 项目使用问题汇总

使用spring data redis已经很长一段时间了,在项目使用过程中还是犯了一些常见的错误,现在总结一下,避免自己以后再犯相同的错误。

1. expireAt() 设置超时时间错误

以前在项目中主要使用的expire()这个设置key超时时间的方法,在最近的项目中,想让某个key在某个时间点过期,比如按照日的排行榜,在第二天排行榜就没有意思,可以设置当日的key在第二天的零点过期。

1.1 问题描述

在使用expireAt()中,发觉设置过期时间之后,过期时间是一个特别大的时间,感觉不太对,就用命令行试了一下,发现没有问题,怀疑可能是spring data redis框架的问题,顺着看了一下代码,应为使用的是redis cluster集群模式,在BinaryJedisCluster.java的pexpireAt居然使用的是pexpire()方法,应该用pexpireAt()才对
  @Override
  public Long pexpireAt(final byte[] key, final long millisecondsTimestamp) {
    return new JedisClusterCommand<Long>(connectionHandler, maxAttempts) {
      @Override
      public Long execute(Jedis connection) {
        return connection.pexpire(key, millisecondsTimestamp);
      }
    }.runBinary(key);
  }

1.2 解决办法

    public void expireAt(String key, Date deadLine){
        final byte[] rawKey = rawKey(key);
        redisTemplate.execute(connection -> connection.expireAt(rawKey, deadLine.getTime() / 1000), true);  
    }

2. zset的reverseRange问题

在使用reverseRange(long start, long end)过程中,在项目中当成mysql的分页处理,把返回数据大小直接赋值给end,导致返回的数据一直有问题。
用方法返回数据,包括start和end位置的数据,一般传入第二个参数为pageStart + pageSize -1

3.校验key是否存在

在使用Hash,Zset等数据类型时,没有先检查一下缓存的key存在与否,而是直接使用,导致程序异常,报出空指针。

猜你喜欢

转载自blog.csdn.net/haitunlianren/article/details/84780559