RedisTemplate没有setNx怎么办

RedisTemplate没有setNx怎么办


什么是RedisTemplate:

Jedis是Redis官方推荐的面向Java的操作Redis的客户端,而RedisTemplate是SpringDataRedis中对JedisApi的高度封装。
SpringDataRedis相对于Jedis来说可以方便地更换Redis的Java客户端,比Jedis多了自动管理连接池的特性,方便与其他Spring框架进行搭配使用如:SpringCache

原生jedis效率优于redisTemplate。

什么是setNx:

setNx是Jedis提供的一个api,做的是一个原子性操作。英文全称为:set if not exists;顾名思义就是“如果不存在,我就设置。”

很多人利用setNx的特性,实现分布式锁,幂等性检查等等功能。

RedisTemplate没有setNx:

RedisTemplate不想Jedis提供了setNx的Api。所以我们用RedisTemplate的时候,可以自己手动的定义setNx:


    private boolean setNx(String key, String value, long expires, TimeUnit timeUnit)
     {
        boolean flag = false;
        try {
            flag = (boolean) redisTemplate.execute((RedisCallback<Boolean>) connection -> connection.set(key.getBytes(), value.getBytes(), Expiration.from(expires, timeUnit), RedisStringCommands.SetOption.ifAbsent()));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }

四个参数:

  1. key:就是key。setNx就是通过key来判断是否存在。
  2. value:就是value。这个value对于setNx来说并不重要。
  3. expires:过期时间,setNx作为锁来使用的话必须要有一个过期时间,避免死锁。
  4. timeUnit: 过期时间的单位。 时分秒。。。。
好了 基本已经讲完,欢迎大家评论区指出不足,一起学习进步!

大家看完了点个赞,码字不容易啊。。。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易柏州Innovation

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值