RedisTemplate对象中方法的使用

这篇具有很好参考价值的文章主要介绍了RedisTemplate对象中方法的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录



前言

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
RedisTemplate对象中方法的使用,java,java


Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
RedisTemplate对象中方法的使用,java,java
RedisTemplate的两种使用方式,分别是:

opsFor的方式

bound的方式

Redis中有五种基础数据类型,RedisTemplate对象针对不同的数据类型,进行了不同的封装,将相同类型操作封装为Operation接口,分别如下所示:
RedisTemplate对象中方法的使用,java,java
另外,考虑到每次操作都需要指定对应的【key】名称,所以为了简化指定【key】名称的操作,RedisTemplate对象也提供了绑定key的Operations接口,分别如
RedisTemplate对象中方法的使用,java,java
通过opsFor操作redis
下面就介绍一下通过opsFor的方式操作各种数据类型的方法。

(1)操作string字符串类型

public void demo01() {
    // 操作字符串
    ValueOperations ops = redisTemplate.opsForValue();
    // 设置key-value,等价于redis命令:set
    ops.set("k1", "100");
    // 设置过期时间,等价于redis命令:setex
    ops.set("k2", "200", 2, TimeUnit.SECONDS);
    // key不存在,则设置,等价于redis命令:setnx
    ops.setIfAbsent("k3", "300");
    ops.set("k4", "this is a string.");
    // 追加内容,等价于redis命令:append
    ops.append("k4", "redis string");
    // 获取长度,等价于redis命令:strlen
    Long k4 = ops.size("k4");
    // 自增1,等价于redis命令:incr
    ops.increment("k1");
    // 自增指定步长,等价于redis命令:incrby
    ops.increment("k1", 10);
    // 自减1,等价于redis命令:decr
    ops.decrement("k3");
    // 自减指定步长,等价于redis命令:decrby
    ops.decrement("k3", 20);
    Map<String, String> map = new HashMap<>();
    map.put("kk1", "vv100");
    map.put("kk2", "vv200");
    // 等价于redis命令:mset
    ops.multiSet(map);
    List<String> keys = new ArrayList<>();
    keys.add("kk1");
    keys.add("kk2");
    // 等价于redis命令:mget
    List list = ops.multiGet(keys);
    map = new HashMap<>();
    map.put("kk1", "vv100");
    map.put("kk3", "vv300");
    // 等价于redis命令:msetnx
    Boolean aBoolean = ops.multiSetIfAbsent(map);
    // 等价于redis命令:get
    Object k1 = ops.get("k1");
    // 等价于redis命令:getset
    Object obj = ops.getAndSet("kk1", "bak_vv100");
    // 等价于redis命令:getrange
    String kk2 = ops.get("kk2", 0, 1);
    // 等价于redis命令:del
    Boolean k3 = ops.getOperations().delete("k3");
}

(2)操作List集合类型

public void demo02() {
    ListOperations ops = redisTemplate.opsForList();
    // 左边添加元素,等价于redis命令:lpush
    ops.leftPush("k1", "100");
    ops.leftPushAll("k2", "100", "200", "300");
    List<Integer> addList = new ArrayList<>();
    addList.add(100);
    addList.add(200);
    ops.leftPushAll("k3", addList);
    // 右边添加元素,等价于redis命令:rpush
    ops.rightPush("k11", "100");
    ops.rightPushAll("k22", "100", "200", "300");
    List<Integer> addList2 = new ArrayList<>();
    addList2.add(100);
    addList2.add(200);
    ops.rightPushAll("k33", addList2);
    // 等价于redis命令:lpop
    Object k2 = ops.leftPop("k2");
    // 等价于redis命令:rpop
    Object k22 = ops.rightPop("k22");
    // 等价于redis命令:rpoplpush
    Object push = ops.rightPopAndLeftPush("k22", "k2");
    // 等价于redis命令:lrange
    List k21 = ops.range("k2", 0, -1);
    // 等价于redis命令:lindex
    Object k221 = ops.index("k22", 1);
    // 等价于redis命令:llen
    Long k33 = ops.size("k33");
    // 等价于redis命令:lrem
    Long k3 = ops.remove("k3", 1, "100");
    // 等价于redis命令:lset
    ops.set("k33", 2, "new_200");
}

(3)操作Set集合类型

public void demo03() {
    SetOperations ops = redisTemplate.opsForSet();
    // 等价于redis命令:sadd
    ops.add("k1", "100", "200", "300");
    // 等价于redis命令:smembers
    Set k1 = ops.members("k1");
    // 等价于redis命令:sismember
    Boolean k11 = ops.isMember("k1", "400");
    // 等价于redis命令:sacrd
    Long k12 = ops.size("k1");
    // 等价于redis命令:srem
    Long k13 = ops.remove("k1", "100", "300");
    // 等价于redis命令:spop
    Object k14 = ops.pop("k1");
    List k15 = ops.pop("k1", 2);
    // 等价于redis命令:srandmember
    Object k16 = ops.randomMember("k1");
    List k17 = ops.randomMembers("k1", 2);
    // 等价于redis命令:smove
    Boolean move = ops.move("k1", "v100", "k2");
    // 等价于redis命令:sinter
    List<String> keyLists = new ArrayList<>();
    keyLists.add("k1");
    keyLists.add("k2");
    Set intersect = ops.intersect(keyLists);
    // 求k1和k2的交集,然后将结果保存到k3中
    Long aLong2 = ops.intersectAndStore("k1", "k2", "k3");
    // 等价于redis命令:sunion
    Set union = ops.union(keyLists);
    // 求k1和k2的并集,然后将结果保存到k3中
    Long aLong1 = ops.unionAndStore("k1", "k2", "k3");
    // 等价于redis命令:sdiff
    Set difference = ops.difference(keyLists);
    // 求k1和k2的差集,然后将结果保存到k3中
    Long aLong = ops.differenceAndStore("k1", "k2", "k3");
}

(4)操作Hash类型

public void demo04() {
    HashOperations ops = redisTemplate.opsForHash();
    // 等价于redis命令:hset
    ops.put("k1", "h1", "v100");
    // 等价于redis命令:hget
    Object o = ops.get("k1", "h2");
    // 等价于redis命令:hkeys
    Set k11 = ops.keys("k1");
    // 等价于redis命令:hvals
    List k1 = ops.values("k1");
    // 等价于redis命令:hmset
    Map<String, String> map = new HashMap<>();
    map.put("h1", "v100");
    map.put("h2", "v200");
    ops.putAll("k2", map);
    // 等价于redis命令:hdel
    Long delete = ops.delete("k1", "h1", "h3");
    // 等价于redis命令:hsetnx
    Boolean aBoolean = ops.putIfAbsent("k1", "h2", "v200");
    // 等价于redis命令:hincrby
    Long increment = ops.increment("k1", "h1", 10);
    Long increment1 = ops.increment("k1", "h2", -20);
}

(5)操作ZSet类型

public void demo05() {
    ZSetOperations ops = redisTemplate.opsForZSet();
    // 等价于redis命令:zadd
    Boolean add = ops.add("k1", "v100", 100);
    DefaultTypedTuple<String> dtt1 = new DefaultTypedTuple<>("v100", 100.0);
    DefaultTypedTuple<String> dtt2 = new DefaultTypedTuple<>("v200", 200.0);
    Set<DefaultTypedTuple<String>> set = new HashSet<>();
    set.add(dtt1);
    set.add(dtt2);
    Long k2 = ops.add("k2", set);
    // 等价于redis命令:zrange
    Set k1 = ops.range("k1", 0, -1);
    Set k11 = ops.rangeWithScores("k1", 0, -1);
    // 等价于redis命令:zrangebyscore
    Set k12 = ops.rangeByScore("k1", 10.0, 52.0);
    Set k13 = ops.rangeByScoreWithScores("k1", 10.0, 52.0);
    // 等价于redis命令:zrevrangebyscore
    Set k21 = ops.reverseRangeByScore("k2", 100.0, 30.0);
    Set k22 = ops.reverseRangeByScoreWithScores("k2", 100.0, 30.0);
    // 等价于redis命令:zincrby
    Double aDouble = ops.incrementScore("k1", "v100", 10);
    Double aDouble1 = ops.incrementScore("k1", "v200", -20);
    // 等价于redis命令:zrem
    Long remove = ops.remove("k1", "v100", "v300");
    // 等价于redis命令:zcount
    Long k14 = ops.count("k1", 10.0, 52.0);
    // 等价于redis命令:zrank
    Long rank = ops.rank("k1", "v100");
}

通过Bound操作redis
通过opsFor的方式来操作redis,可以发现有一个缺点,就是每次都需要我们指定要操作哪个【key】的数据,如果项目中,存在很多地方,那么就需要指定多次【key】名称,这就容易导致【key】名称不一致的情况,假设某个地方不小心写错了,也很难发现问题出在哪里,所以,为了解决这个问题,同时简化代码的编写,redisTemplate提供了绑定【key】的方式来操作redis。

opsFor和bound两种方式对比:
RedisTemplate对象中方法的使用,java,java
从上面可以看出,通过bound方式操作redis,只需要一个地方指定【key】名称即可。bound的操作方式只是简化了opsFor中key名称的,其余的方法都是和opsFor的操作方法名称一致的,这里就不再黏贴多余的代码了。文章来源地址https://www.toymoban.com/news/detail-851483.html

到了这里,关于RedisTemplate对象中方法的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java中使用BeanUtils.copyProperties方法对象复制同名字段类型不同赋值为空问题解析

    对象之间的复制,dto对象中字段类型为String,model中字段类型为BigDecimal。使用BeanUtils.copyProperties方法进行对象批量复制。 提示:这里描述项目中遇到的问题: 使用Spring 的 BeanUtils.copyProperties 方法发现dto中的String类型字段无法转换为model中的BigDecimal类型同名字段。 使用Spring

    2024年02月13日
    浏览(38)
  • 【Java Web】利用Spring整合Redis,配置RedisTemplate

    1. 在config中加入RedisConfig配置类 2. 写个测试类测试一下 3. 注意事项 Redis不满足事务的原子性,原子性是指事务要么被全部执行,要么都不执行。但是Redis不支持回滚,就可能会出现有些语句执行成功,有些执行失败,因此具备原子性; Redis事务的三个阶段: 开始事务 命令入

    2024年02月09日
    浏览(43)
  • redisTemplate.scan 使用注意

    2024年02月12日
    浏览(33)
  • redisTemplate.opsForValue().get(KEY)从Redis中取出的值为null 的解决方法

    redisTemplate.opsForValue().get(KEY)从Redis中取出的值为null 的解决方法 最近,博主在整理毕设时就遇到一个问题:我往Redis中存手机验证码,我把手机号当做key ,验证码当做value 存储到 Redis 中,但是在我在需要在登录操作中取验证码时遇到一个问题: 困惑: 我Redis 中明明存的有,

    2024年02月11日
    浏览(41)
  • Redis关于Hash类型数据的操作,使用redisTemplate

    因为在redis的Hash数据类型里,有内层外层两个key,而且有内层外层两个map集合,所以暂时先称外层key为大key,内层key为小key,外层map为大map,内层map为小map,内层value值为value。 1.根据大key和小key还有value的值,设置一个value: 2.根据大key和小key获取到value值: 3.根据大key获取小

    2024年02月11日
    浏览(40)
  • redisTemplate 使用 setIfAbsent 返回 null 问题原理及解决办法

    1.简介 有的时候我们使用 redisTemplate给锁设置超时时间的方法,设置锁并返回的 lock 有可能不是 true 或 false,而是null。 从上图我们可以看出虽然生成了锁,但是返回的 lock 却是 null ,这就会影响我们下面的代码运行。 下面我先说一下可能的产生原因和解决办法,之后再详细

    2024年02月05日
    浏览(103)
  • Spring Boot 整合 Redis,使用 RedisTemplate 客户端

    1.1.1 添加依赖 redis 的依赖: 1.1.2 yml 配置文件 1.1.3 Config 配置文件 1.1.4 使用示例 注入 RedisTemplate,即可操作 Redis,简单示例如下: 1.2.1 RedisTemplate 简介 RedisTemplate 是 Spring Data Redis 项目的一部分,旨在简化在Java应用程序中使用 Redis 的过程。它提供了一组简单的方法,可以在

    2024年02月09日
    浏览(258)
  • Java奠基】实现面向对象编程方法

    目录 标准的JavaBean类 设计对象并使用 对象封装 this 构造方法 要知道对象是一个又一个能帮助我们解决问题的东西,但是这些东西并不是凭空出现的,需要我们根据设计图来进行制造,而这些一个一个的设计图就是一个一个的类。 1)类名需要见名知意 2)成员变量使用

    2024年02月06日
    浏览(47)
  • 在Spring Boot微服务使用RedisTemplate操作Redis集群

    记录 :442 场景 :在Spring Boot微服务使用RedisTemplate操作Redis集群的缓存和队列等数据类型。 版本 :JDK 1.8,Spring Boot 2.6.3,redis-6.2.5。 1.微服务中 配置Redis信息 1.1在pom.xml添加依赖 pom.xml文件: 解析:spring-boot-starter-data-redis和spring-boot版本保持一致。 1.2在application.yml中配置Redis集群

    2024年02月12日
    浏览(36)
  • 【Java 基础】类和对象 & 方法重载详解

    《 Java 零基础入门到精通 》 专栏持续更新中。通过本专栏你将学习到 Java 从 入门 到 进阶 再到 实战 的全套完整内容,所有内容均将集中于此专栏。无论是初学者还是有经验的开发人员,都可从本专栏获益。 订阅专栏后添加我微信或者进交流群,进群可找我领取 前端/Java

    2023年04月11日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包