美文网首页
Redis-Template-string操作

Redis-Template-string操作

作者: 杨健kimyeung | 来源:发表于2020-08-20 09:00 被阅读0次

1、Get/Set方法

说明

直接使用默认的RedisTemplate进行redis的读写操作

栗子

@SpringBootTest
public class ValueOperationsTests {
    @Resource
    ValueOperations<String, Object> valueOperations;
  
    @Test
    void operationString() {
        valueOperations.set("hello", "world");
    }
  
    @Test
    void operationObject() {
        valueOperations.set("obj", RedisObject.builder().id(1).name("测试保存对象").build());
    }
  
    @Test
    void operationNx() {
        // 如果key不存在 才去设置值 否则不设置
        valueOperations.setIfAbsent("nx", RedisObject.builder().id(1).name("设置过期时间1111").build(), Duration.ofDays(1));
//        如果key存在去设置值 否则不设置值
        valueOperations.setIfPresent("nx", RedisObject.builder().id(1).name("设置过期时间1111").build(), Duration.ofDays(1));
        // 存在才设置值
        valueOperations.setIfPresent("nx1", RedisObject.builder().id(1).name("key不存在则不设置").build(), Duration.ofDays(1));
    }
}

2、计数

说明

统计计数,也算是一个比较常见,虽然对于redis而言,存储的都是String,但是从我们的逻辑上来看,存在redis中的值,应该是数字型,然后就可以直接传入一个增量,实现存储数据的运算效果,并返回最终的结果

因为redis是单进程方式的,因此采用redis的计数方式,可以较简单的实现分布式的计数效果

栗子

@Test
void operationIncrement() {
  valueOperations.increment("valueIncr", 1);
  valueOperations.increment("valueIncr");
  valueOperations.increment("valueIncr");
  valueOperations.decrement("valueDecr",1);
  valueOperations.decrement("valueDecr");
  valueOperations.decrement("valueDecr");
}

3、bitmap操作

说明

位图操作,什么地方用得比较多呢?一个经典的case就是统计网站的日活,用户首次登陆时,根据用户id,设置位图中下标为userId的值为1,表示这个用户激活了;然后一天结束之后,只需要统计这个位图中为1的个数就可以知道每日的日活;也可以借此来统计每个用户的活跃状况

栗子

public Boolean setBit(String key, Integer index, Boolean tag) {
    return redisTemplate.execute((RedisCallback<Boolean>) con -> con.setBit(key.getBytes(), index, tag));
}

public Boolean getBit(String key, Integer index) {
    return redisTemplate.execute((RedisCallback<Boolean>) con -> con.getBit(key.getBytes(), index));
}

/**
 * 统计bitmap中,value为1的个数,非常适用于统计网站的每日活跃用户数等类似的场景
 *
 * @param key
 * @return
 */
public Long bitCount(String key) {
    return redisTemplate.execute((RedisCallback<Long>) con -> con.bitCount(key.getBytes()));
}

public Long bitCount(String key, int start, int end) {
    return redisTemplate.execute((RedisCallback<Long>) con -> con.bitCount(key.getBytes(), start, end));
}

public Long bitOp(RedisStringCommands.BitOperation op, String saveKey, String... desKey) {
    byte[][] bytes = new byte[desKey.length][];
    for (int i = 0; i < desKey.length; i++) {
        bytes[i] = desKey[i].getBytes();
    }
    return redisTemplate.execute((RedisCallback<Long>) con -> con.bitOp(op, saveKey.getBytes(), bytes));
}

相关文章

  • Redis-Template-string操作

    1、Get/Set方法 说明 直接使用默认的RedisTemplate进行redis的读写操作 栗子 2、计数 说...

  • Mac 终端 Linux 简单命令

    目录操作 文件操作 选择操作 安全操作 编程操作 进程操作 时间操作 网络与通信操作 Korn Shell 命令 ...

  • 常见Mac终端命令大全

    目录操作 文件操作 选择操作 安全操作 编程操作 进程操作 时间操作 网络与通信操作 Korn Shell 命令 ...

  • Mac 终端命令大全

    目录操作 文件操作 选择操作 安全操作 编程操作 进程操作 时间操作 网络与通信操作 Korn Shell 命令 ...

  • Mac 终端命令大全

    目录操作 文件操作 选择操作 安全操作 编程操作 进程操作 时间操作 网络与通信操作 Korn Shell 命令 ...

  • Mac 终端常用命令汇总

    目录操作 文件操作 选择操作 安全操作 编程操作 进程操作 时间操作 网络与通信操作 Korn Shell 命令 ...

  • shell 命令 干货

    目录操作 文件操作 选择操作 安全操作 编程操作 进程操作 时间操作 网络与通信操作 Korn Shell 命令 ...

  • shell - 终端命令总结

    目录操作 文件操作 选择操作 安全操作 编程操作 进程操作 时间操作 网络与通信操作 Korn Shell 命令 ...

  • MAC终端命令

    目录操作 文件操作 选择操作 安全操作 编程操作 进程操作 时间操作 网络与通信操作 Korn Shell 命令 ...

  • Mac 终端命令大全

    目录操作 文件操作 选择操作 安全操作 编程操作 进程操作 时间操作 网络与通信操作 Korn Shell 命令 ...

网友评论

      本文标题:Redis-Template-string操作

      本文链接:https://www.haomeiwen.com/subject/umtsjktx.html