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(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存在与否,而是直接使用,导致程序异常,报出空指针。

你可能感兴趣的:(spring data redis 项目使用问题汇总)