在spring中操作Redis

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

目录

创建项目

​编辑 配置Redis

创建类

StringRedisTemplate

 set / get

list

set 

Hash 

zset


新年快乐!!!!

在spring中操作Redis,javaEE进阶,Redis,spring,redis,java

在spring中操作Redis,javaEE进阶,Redis,spring,redis,java

创建项目

在spring中操作Redis,javaEE进阶,Redis,spring,redis,java

        选中maven项目,然后选择java8,输入名称之后,点击next。

        随后选择依赖:

 配置Redis

        找到配置文件 application.properties:

在spring中操作Redis,javaEE进阶,Redis,spring,redis,java

当然你也可以将其改为yml:

在spring中操作Redis,javaEE进阶,Redis,spring,redis,java

这里我们使用yml文件:

添加配置:

spring:
  redis:
    host: 127.0.0.1
    port: 8888

这里通过ssh转发,来实现连接服务器上的Redis服务器。

创建类

        创建一个MyController类

 在spring中操作Redis,javaEE进阶,Redis,spring,redis,java

        spring中使用StringRedisTemplate来操作Redis,其实最原始的提供的类是RedisTemplate,但是太麻烦了,现在的StringRedisTemplate是RedisTemplate的子类,专门用来处理 文本数据的。

        MyController内容如下:

package com.example.redisbyspring;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {
    @Autowired
    private StringRedisTemplate redisTemplate;

}

         后续将在这个类中进行Redis的操作。

StringRedisTemplate

        通过在一个请求方法中进行对象.的操作,发现好像和我们预想的不一样:

在spring中操作Redis,javaEE进阶,Redis,spring,redis,java

        通过这个类的实例对象,并没有发现很直观的有get和set方法,但是似乎他们的前面都加上了posFor。这是为什么?

        其实,此处的Template就是把这些操作Redis的方法,分成了几个类别,例如,操作list的是一个类,他就是opsForList(),以此类推做了进一步封装:

在spring中操作Redis,javaEE进阶,Redis,spring,redis,java

        后续的stringRedisTemplate是StringRedisTemplate的子类。 

        在进行jedis集成spring的测试代码中,需要清除干扰项目,也就是里面可能已经存在一些key,对我们后面的测试造成影响,需要使用flashAll来清除所有的key。

         但是我们翻阅了stringRedisTemplate的方法,发现没有flashall操作:

在spring中操作Redis,javaEE进阶,Redis,spring,redis,java

        RedisTemplate留了一个后手,让我们随时可以执行到Redis的原生命令。Redis集成spring中有一个 execute方法,用来执行Redis的原生命令。

在spring中操作Redis,javaEE进阶,Redis,spring,redis,java

        里面有一个RedisCallBack是一个回调函数:

public interface RedisCallback<T> {
    @Nullable
    T doInRedis(RedisConnection connection) throws DataAccessException;
}

         输入相关参数就可以进行执行Redis原生命令了:

        redisTemplate.execute((RedisConnection connection) -> {
            connection.flushAll();
        });

         但是有个问题,就是这段代码的execute会报错:

在spring中操作Redis,javaEE进阶,Redis,spring,redis,java

        这是什么回事?这是因为当前的execute方法会有一个返回结果,但是当前不需要返回什么,就返回一个null即可:

        redisTemplate.execute((RedisConnection connection) -> {
            connection.flushAll();
            return null;
        });

 

 set / get

        使用StringRedisTemplate的实例中的方法来 进行set和get方法操作Redis。

package com.example.redisbyspring;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {
    @Autowired
    private StringRedisTemplate redisTemplate;

    @GetMapping("/testString")
    @ResponseBody
    public String testString() {
        redisTemplate.opsForValue().set("key1","value1");
        redisTemplate.opsForValue().set("key2","value2");
        redisTemplate.opsForValue().set("key3","value3");

        String ret1 = redisTemplate.opsForValue().get("key1");
        System.out.println(ret1);

        String ret2 = redisTemplate.opsForValue().get("key2");
        System.out.println(ret2);

        String ret3 = redisTemplate.opsForValue().get("key3");
        System.out.println(ret3);
        return "ok";
    }

}

        浏览器访问接口:

在spring中操作Redis,javaEE进阶,Redis,spring,redis,java

        返回:在spring中操作Redis,javaEE进阶,Redis,spring,redis,java

        控制台输出:

在spring中操作Redis,javaEE进阶,Redis,spring,redis,java 

list

    @GetMapping("/testList")
    @ResponseBody
    public String testList() {
        redisTemplate.execute((RedisConnection connection) -> {
            connection.flushAll();
            return null;
        });

        // list的lpush
        redisTemplate.opsForList().rightPush("key","111");

        // list一次性添加多个元素
        redisTemplate.opsForList().rightPushAll("key","222","333","444");
        // 此时的列表内容为[111,222,333,444]
        // pop
        redisTemplate.opsForList().leftPop("key");
        redisTemplate.opsForList().rightPop("key");
        // 此时list表的内容为[222,333]
        // list的lrange
        List<String> list = redisTemplate.opsForList().range("key",0, -1);
        System.out.println(list);
        return "listOk";
    }

 访问对应的链接,输出:

在spring中操作Redis,javaEE进阶,Redis,spring,redis,java

set 

    @GetMapping("/testSet")
    @ResponseBody
    public String testSet() {
        redisTemplate.execute((RedisConnection connection) -> {
            connection.flushAll();
            return null;
        });

        // set的sadd
        redisTemplate.opsForSet().add("key","111","222","333");

        // set的smembers
        Set<String> set = redisTemplate.opsForSet().members("key");
        System.out.println(set);

        // set的sismember
        Boolean bool = redisTemplate.opsForSet().isMember("key","111");
        System.out.println(bool);

        // set中的scard
        Long count = redisTemplate.opsForSet().size("key");
        System.out.println(count);

        // set中srem
        count = redisTemplate.opsForSet().remove("key","111");
        System.out.println("删除的个数:" + count);
        set = redisTemplate.opsForSet().members("key");
        System.out.println(set);

        return "setOk";
    }

         访问此链接,输出:

在spring中操作Redis,javaEE进阶,Redis,spring,redis,java

Hash 

    @GetMapping("/testHash")
    @ResponseBody
    public String testHash() {
        redisTemplate.execute((RedisConnection connection) -> {
            connection.flushAll(); // 刷新Redis数据
            return null;
        });

        // hash中的hset
        redisTemplate.opsForHash().put("key","f1","v1");

        // hmset
        Map<String,String> map = new HashMap<>();
        map.put("f2","v2");
        map.put("f3","v3");
        redisTemplate.opsForHash().putAll("key",map);

        // hget
        String ret = (String) redisTemplate.opsForHash().get("key","f1");
        System.out.println(ret);

        // hexists
        Boolean exists = redisTemplate.opsForHash().hasKey("key","f1");
        System.out.println(exists);

        // hdel
        Long numsOfDel = redisTemplate.opsForHash().delete("key","f1");
        System.out.println(numsOfDel);

        // hlen
        Long len = redisTemplate.opsForHash().size("key");
        System.out.println(len);

        // hkeys
        Set<Object> set = redisTemplate.opsForHash().keys("key");
        System.out.println(set);

        // hval
        List<Object> list =  redisTemplate.opsForHash().values("key");
        System.out.println(list);

        Map<Object,Object> map1 = redisTemplate.opsForHash().entries("key");
        System.out.println(map1);
        return "hashOK";

    }

 输出:

在spring中操作Redis,javaEE进阶,Redis,spring,redis,java

zset

 

    @GetMapping("/testZset")
    @ResponseBody
    public String testZset() {
        redisTemplate.execute((RedisConnection connection) -> {
            connection.flushAll(); // 刷新Redis数据
            return null;
        });

        // zadd
        redisTemplate.opsForZSet().add("key","zhangsan",10.2);
        redisTemplate.opsForZSet().add("key","lisi",11.3);
        redisTemplate.opsForZSet().add("key","wangwu",12.4);

        // zrange
        Set<String> set = redisTemplate.opsForZSet().range("key",0, -1);
        System.out.println(set);

        // zrangewithScores
        Set<ZSetOperations.TypedTuple<String>> setWithScores = redisTemplate.opsForZSet().rangeWithScores("key",0,-1);
        System.out.println(setWithScores);

        // zscore
        Double scoreOfLisi = redisTemplate.opsForZSet().score("key","lisi");
        System.out.println(scoreOfLisi);

        // zrem
        redisTemplate.opsForZSet().remove("key","lisi");
        setWithScores = redisTemplate.opsForZSet().rangeWithScores("key",0,-1);
        System.out.println(setWithScores);

        // zrank
        Long rank = redisTemplate.opsForZSet().rank("key","lisi");
        System.out.println(rank);
        rank = redisTemplate.opsForZSet().rank("key","wangwu");
        System.out.println(rank);
        return "zsetOK";
    }

输出:

在spring中操作Redis,javaEE进阶,Redis,spring,redis,java

更多详细内容可以查阅spring官方文档:
Spring BootLevel up your Java code and explore what Spring can do for you.https://spring.io/projects/spring-boot文章来源地址https://www.toymoban.com/news/detail-828027.html

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

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

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

相关文章

  • Spring Boot进阶(62):Redis魔法:用发布订阅功能打造高效消息队列!

            话说,玩过MQ的同学可能都知道【发布订阅】模式,不就是一种消息传递方式嘛;如果没玩过,那也不打紧,下文我会简单做个科普。但是对于Redis如何实现MQ的【发布订阅】功能?这才是问题的关键,有的同学就说“压根没玩过呀!不造” ,哈哈,bug菌既然敢写便有

    2024年02月09日
    浏览(47)
  • 在 Spring 中操作 Redis

    🧸欢迎来到dream_ready的博客,📜相信您对博主首页也很感兴趣o (ˉ▽ˉ;) 📜redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿 目录  1、引入依赖 2、对 Redis 的配置文件进行书写   3、Spring中使用 StringRedisTemplate 这个类操作数据库 4、对se

    2024年02月03日
    浏览(28)
  • 在spring中操作Redis

    目录 创建项目 ​编辑 配置Redis 创建类 StringRedisTemplate  set / get list set  Hash  zset 新年快乐!!!!         选中maven项目,然后选择java8,输入名称之后,点击next。         随后选择依赖:         找到配置文件 application.properties: 当然你也可以将其改为yml: 这里我们使

    2024年02月20日
    浏览(26)
  • Spring boot 操作 Redis

    🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 专栏 描述 Java项目实战 介绍Java组件安装、使用;手写框架等 Aws服务器实战 Aws Linux服务器上操作nginx、git、JDK、Vue Jav

    2024年03月20日
    浏览(52)
  • Spring Boot进阶(63):「超详细」利用 Redis 实现高效延时队列:踩坑、优化、实践

            提到延时队列,相信各位同学并不会陌生,JDK原生提供了延时队列的使用,当然我们这里介绍的不是这种;在实际的项目中,如果我们有延时队列的场景,可以怎样去实现呢?举一个常见的例子,比如淘宝下单30分钟内,若没有支付,则自动取消订单,这该如何实现

    2024年02月07日
    浏览(43)
  • Redis-使用java代码操作Redis->java连接上redis,java操作redis的常见类型数据存储,redis中的项目应用

    java连接上redis java操作redis的常见类型数据存储 redis中的项目应用 1.java连接上redis 2.java操作redis的常见类型数据存储 3.redis中的项目应用 redis一般用在哪? 存储基本不会变化的数据,然后这些数据又被多个地方使用 redix怎么用 用String 将存储的数据转换成json串,进行存储 在

    2024年02月05日
    浏览(48)
  • 【Spring Boot】操作Redis数据结构

    2024年02月07日
    浏览(34)
  • 【Redis】redis入门+java操作redis

    目录 一、Redis入门 1.1 Redis简介 1.2 Redis下载与安装 1.2.1 下载 1.2.2 linux安装 1.2.3 windows安装  1.3  Redis服务启动与停止 1.3.1 linux启动、停止Redis服务 1.3.2 windows启动、停止Redis服务 1.4 修改Redis启动密码 1.4.1 Linux修改设置 1.4.2 windows设置 1.5 修改Redis运行远程连接 1.5.1 linux 1.5.2 window

    2024年02月10日
    浏览(36)
  • 【云原生进阶之PaaS中间件】第一章Redis-1.6.1Java项目使用Redis

            redis的java客户端很多,官方推荐的有三种: Jedis Lettuce Redisson Spring 对Redis 客户端进行了整合,提供了Spring Date Redis ,在Spring Boot项目中还提供了对应的Starter,即spring-boot-starter-data-redis。         使用Jedis操作Redis的步骤: 1.获取链接; 2.执行操作; 3.关闭连接

    2024年02月09日
    浏览(52)
  • 【Spring Boot 3】【Redis】基本数据类型操作

    软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是要花费或多或少的时间、检索不止一篇资料才能得出一个可工作的DEMO,这占用了我大量的时

    2024年01月20日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包