Spring Data Redis操作Redis

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

  • 在Spring Boot项目中,可以使用Spring Data Redis来简化Redis操作,maven的依赖坐标:
       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

Spring Data Redis操作Redis,spring,redis,java

8.3.3、操作Redis的步骤

(1)创建一个Spring Boot工程;

(2)在pom.xml文件中导入以上Spring Data Redis的依赖坐标;

(3)配置application.yml文件:

#spring的配置
spring:
  application:
    name: springdataRedis_demo
  main:
      #解决升级Spring Boot2.6,因依赖循环引用导致启动时报错的问题
    allow-circular-references: true

#Redis的相关配置(在spring下)
  redis:
    port: 6379 #默认端口号
    host: localhost #表示连接的是本地的服务,要连接远程的话,需要更改为远程服务器的ip地址
    #设置密码(在redis的redis.windows.conf配置文件中有设置密码的话,这里要配置)
    #password: 123456
    database: 0  #默认提供了16个数据库,编号为0-15,在命令行可以通过select index更改数据库
    #jedis的配置
    jedis:
      #Redis连接池配置
      pool:
        max-active: 8 #最大连接数
        max-wait: 1ms #连接池最大阻塞等待时间
        max-idle: 4 #连接池中的最大空闲连接
        min-idle: 0 #连接池中最小空闲连接

(4)配置序列化配置类:

package com.itcast.springdataredis_demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * @author :LTY
 * @date :Created in 2023/7/20 16:37
 * @description:序列化配置类
 * @modified By:
 * @version: $
 */
@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        //1.创建RedisTemplate对象
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

        //默认的key序列化器为: JdkSerializationRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer()); //String类型
        redisTemplate.setHashKeySerializer(new StringRedisSerializer()); //Hash哈希类型
        //设置Value的序列化
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new StringRedisSerializer());

        //2.设置连接工厂
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        return redisTemplate;
    }
}

(5)测试各数据类型的数据

首先在测试类上进行如下修改:

Spring Data Redis操作Redis,spring,redis,java

  • String类型数据

    测试代码:

  /**
     * 操作String类型数据
     */
    @Test
    public void testString() {
        redisTemplate.opsForValue().set("city12", "beijing");
        String city = (String)redisTemplate.opsForValue().get("city12");
        System.out.println(city);

        //设置10秒的过去时间(对应redis的String类型的setex key seconds value命令)
        redisTemplate.opsForValue().set("key1", "value1", 10L, TimeUnit.SECONDS);

        //对应redis的String类型的setnx key value命令
        redisTemplate.opsForValue().setIfAbsent("city12","shanghai");
    }

​ 运行结果如下:

Spring Data Redis操作Redis,spring,redis,java

  • Hash哈希类型数据

​ 测试代码:

   /**
     * hash哈希类型数据
     */
    @Test
    public void testHash() {
        HashOperations hashOperations = redisTemplate.opsForHash();
        //存入数据(对应hset命令)
        hashOperations.put("002","name","xiaohong");
        hashOperations.put("002","age","21");
        hashOperations.put("002","sex","male");
        //获取单个字段的值(对应hget命令)
         String name = (String)hashOperations.get("002", "name");
        System.out.println("获得单个字段的值(hget key field): " +name);

        //获得hash结构中所有的字段(对应hkeys命令)
        System.out.println("获得hash结构中所有的字段(hkeys key): ");
       Set keys = hashOperations.keys("002");
        for (Object key : keys) {
            System.out.println(key);
        }
        //获得hash结构中所有的字段的值(对应hvals命令)
        System.out.println("获得hash结构中所有的字段的值(kvals key): ");
        List values = hashOperations.values("002");
        for (Object value : values) {
            System.out.println(value);
        }
        //获取哈希表中指定key的所有字段和值(hgetall key)
        System.out.println("获得哈希表中指定key的所有字段和值(hgetall key): ");
        Map entries = hashOperations.entries("002");
        System.out.println(entries);
    }

运行结果如下:

Spring Data Redis操作Redis,spring,redis,java

  • List类型数据

    测试代码:

     /**
         * 操作List类型的数据
         */
        @Test
        public void testList() {
            ListOperations listOperations = redisTemplate.opsForList();
           //存值(从左边存值)
            listOperations.leftPush("mylist", "a"); //存一个
            listOperations.leftPushAll("mylist","b","c","d"); //存多个
                //从右边存值
            listOperations.rightPush("mylist", "e");
            listOperations.rightPushAll("mylist", "f","g");//此时存入的值顺序:d c b a e f g
    
            //取值(从表头到表尾依次输出)
            List<String> mylist = listOperations.range("mylist", 0, -1);
            for (String s : mylist) {
                System.out.println(s); //输出:d c b a e f g
            }
    
    
            //获取列表的菜单llen
            System.out.println("...............移除...........");
            Long size = listOperations.size("mylist");
            int i1 = size.intValue();
            for (int i = 0; i < i1; i++) {
                //出队
                /**
                 *  leftPop:移除并获取第一个元素(从表头出队(左边))
                 *  rightPop:移除并获取最后一个元素(从表尾移除(右边))
                 */
    //            String mylist1 = (String)listOperations.rightPop("mylist");
    //            System.out.println(mylist1); //输出:g f e a b c d
    
                //rightPopAndLeftPush:从mylist表尾移除数据,并在mylist2左边(表头)存值
                listOperations.rightPopAndLeftPush("mylist","mylist2", 10l, TimeUnit.SECONDS);//存入顺序:d c b a e f g
            }
    
            //取值
            System.out.println("..........mylist2..........");
            List<String> mylist2 = listOperations.range("mylist2", 0, -1);
            for (String s1 : mylist2) {
                System.out.println(s1); //输出:d c b a e f g
            }
        }
    

    运行结果如下:

Spring Data Redis操作Redis,spring,redis,java

  • Set类型数据

​ ①基本操作

​ 测试代码:

 /**
     * 操作Set类型数据
     */
    @Test
    public void testSet() {
        SetOperations setOperations = redisTemplate.opsForSet();
        //存值(sadd)
        setOperations.add("myset", "a", "b", "c","a");
        //取值(smembers)
        Set<String> myset = setOperations.members("myset");
        //获得集合的成员数(scard)
        System.out.println("集合的成员数为: " + setOperations.size("myset"));
        for (String s : myset) {
            System.out.println(s); //输出:
        }

        //删除一个或多个成员(srem)
        setOperations.remove("myset", "a", "b");

        //取值
        myset = setOperations.members("myset");
        for (String string : myset) {
            System.out.println(string);
        }
    }

运行结果:

Spring Data Redis操作Redis,spring,redis,java

​ ②交集、并集和差集

​ 测试代码:

 /**
     * 交集、并集和差集
     */
    @Test
    public void testSet2() {
        redisTemplate.opsForSet().add("myset2", "a", "b", "c");
        redisTemplate.opsForSet().add("myset3", "a", "b", "e");
        //交集
        System.out.println("myset2与myset3的交集为: ");
        Set<String> intersect = redisTemplate.opsForSet().intersect("myset2", "myset3");
        for (String o : intersect) {
            System.out.println(o);
        }
        //并集
        System.out.println("myset2与myset3的并集为: ");
        Set<String> union = redisTemplate.opsForSet().union("myset2", "myset3");
        for (String o : union) {
            System.out.println(o);
        }
        //差集
          //myset2-myset3
        System.out.println("myset2与myset3的差集为(myset2-myset3): ");
        Set<String> difference1 = redisTemplate.opsForSet().difference("myset2", "myset3");
        for (String o : difference1) {
            System.out.println(o);
        }
        //myset3-myset2
        System.out.println("myset3与myset2的差集为(myset3-myset2): ");
        Set<String> difference2 = redisTemplate.opsForSet().difference("myset3", "myset2");
        for (String o : difference2) {
            System.out.println(o);
        }
    }

运行结果:

Spring Data Redis操作Redis,spring,redis,java

  • ZSet类型数据

​ 测试代码:

/**
     * 操作ZSet类型数据
     */
    @Test
    public void testZSet() {
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        //存值
        zSetOperations.add("myZSet", "a", 20.0);
        zSetOperations.add("myZSet", "b", 30.0);
        zSetOperations.add("myZSet", "c", 40.0);
        zSetOperations.add("myZSet", "a", 50.0);

        //取值
        Set<String> myZSet = zSetOperations.range("myZSet", 0, -1);
        for (String s : myZSet) {
            System.out.println(s);
        }

运行结果:

Spring Data Redis操作Redis,spring,redis,java

  • 通用操作

​ 测试代码:

/**
     * 通用操作,针对不同类型的数据类型都可以进行操作
     */
    @Test
    public void testCommon() {
        //获取Redis中所有的key
        Set<String> keys = redisTemplate.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }

        //判断某个key是否存在
        Boolean itcast = redisTemplate.hasKey("itcast");
        System.out.println(itcast);

        //删除指定的key
        redisTemplate.delete("myZSet");

        //获得指定的key对应的value的数据类型
        DataType type = redisTemplate.type("myset");
        System.out.println(type);
    }

运行结果:

Spring Data Redis操作Redis,spring,redis,java文章来源地址https://www.toymoban.com/news/detail-611980.html

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

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

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

相关文章

  • Spring Data Redis的使用

    解决方法为在Redis-x64-3.2.100目录下打开两个cmd窗口,分别输入 命令redis-server.exe redis.windows.conf 和 命令redis-cli ,即可成功连接。   首先在maven的pom文件中引入 Spring Data Redis 模块,代码如下。 然后,在springboot的配置文件中写入redis配置,代码如下。 然后,处理keys的序列化问题

    2024年02月09日
    浏览(42)
  • Spring Data Redis切换底层Jedis 和 Lettuce实现

    Spring Data Redis是 Spring Data 系列的一部分,它提供了Spring应用程序对Redis的轻松配置和使用。它不仅提供了对Redis操作的高级抽象,还支持Jedis和Lettuce两种连接方式。 可通过简单的配置就能连接Redis,并且可以切换Jedis和Lettuce两个连接方式。下面先来看看我们该如何使用它。 使

    2024年02月05日
    浏览(39)
  • Spring Data Redis + RabbitMQ - 基于 string 实现缓存、计数功能(同步数据)

    目录 一、Spring Data Redis 1.1、缓存功能 1.1.1、分析 1.1.2、案例实现 1.1.3、效果演示 1.2、计数功能(Redis + RabbitMQ) 1.2.1、分析 1.2.2、案例实现 1.1.1、分析 使用 redis 作为缓存, MySQL 作为数据库组成的架构 整体思路: 应用服务器访问数据的时候,先查询 Redis,如果 Redis 上存在该

    2024年02月05日
    浏览(36)
  • Spring Cloud项目后台报错:org.springframework.data.redis.RedisSystemException(Redis-6.2.6 CentOS 7)

            1.1、报错          org.springframework.data.redis.RedisSystemException: Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance

    2024年02月07日
    浏览(40)
  • Spring Data Redis + RabbitMQ - 基于 string + hash 实现缓存,计数(高内聚)

    目录 一、Spring Data Redis 1.1、缓存功能(分析) 1.2、案例实现 hash 类型存储缓存相比于 string 类型就有更多的更合适的使用场景. 例如,我有以下这样一个 UserInfo 信息  假设这样一个场景就是:

    2024年02月05日
    浏览(46)
  • Spring boot 操作 Redis

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

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

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

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

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

    2024年02月03日
    浏览(29)
  • Spring Boot Starter Data Redis使用Lettuce客户端报错:NOAUTH Authentication required

    Spring Boot版本升级为:2.6.14 redis依赖: redis配置不变,还是带password的: 项目启动后,获取redis连接时,报错:NOAUTH Authentication required spring-boot-starer-data-redis支持使用Jedis和Lettuce作为redis客户端,如果配置不指定则默认使用Lettuce。 不管是Lettuce还是还是Jedis,核心是构建RedisCo

    2024年01月25日
    浏览(49)
  • 【Spring Boot】操作Redis数据结构

    2024年02月07日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包