首页 > 数据库 >教你如何在Java中操作Redis

教你如何在Java中操作Redis

时间:2024-09-24 15:20:19浏览次数:8  
标签:set Java name Redis jack 操作 redisTemplate

Redis的Java客户端

Redis 的 Java 客户端很多,常用的几种:

  • Jedis:基于 Java 的 Redis 客户端,提供了 Redis 命令的全面支持。
  • Lettuce:高性能的 Java 客户端库,用于与 Redis 数据库进行交互。它支持同步、异步和反应式编程模型,提供了丰富的 API 来操作 Redis。Lettuce 与 Jedis 并列成为最热门的 Redis Java 客户端之一,并且已经成为 Spring Boot 2.0 版本默认的 Redis 客户端。
  • Spring Data Redis:Spring 提供的一个用于操作 Redis 的模块,它提供了多种高层次的数据访问抽象,使得在 Spring 应用程序中使用 Redis 变得更加容易和直观。

Spring Data Redis使用方式

操作步骤:

1.导入Spring Data Redis 的maven坐标:

<dependency>  
    <groupId>org.springframework.boot</groupId>    
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.在配置文件中配置Redis数据源 :

spring:
  redis:   
     host: localhost    
     port: 6379   
     password: 123456

 3.编写配置类,创建RedisTemplate对象:

@Configuration
@Slf4j
public class RedisConfiguration {

    @Bean
    public RedisTemplate getRedisTemplate(RedisConnectionFactory redisConnectionFactory){
        // 创建RedisTemplate模版对象
        log.info("开始创建Redis模版对象...");
        RedisTemplate redisTemplate = new RedisTemplate();
        // 设置模版对象关联的RedisConnectionFactory
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        // 设置模版对象关联的Key序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());

        return redisTemplate;
    }
}

4.通过RedisTemplate对象操作Redis:

RedisTemplate 针对大量api进行了归类封装,将同一数据类型的操作封装为对应的Operation接口,具体分类如下:

@SpringBootTest
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void test() {
        ValueOperations valueOperations = redisTemplate.opsForValue();// 字符操作操作
        HashOperations hashOperations = redisTemplate.opsForHash();// 哈希操作
        ListOperations listOperations = redisTemplate.opsForList();// 列表操作
        SetOperations setOperations = redisTemplate.opsForSet();// 集合操作
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();// 有序集合操作
    }
}

 操作字符串类型的数据

 /**
     * 测试Redis字符串操作
     * 本方法展示了如何在Redis中设置和获取字符串值,包括设置过期时间和条件设置
     */
    @Test
    public void testString() {
        // 获取RedisTemplate的ValueOperations对象,用于操作字符串值
        ValueOperations valueOperations = redisTemplate.opsForValue();

        // 设置键值对,将键"name"的值设置为"jack"
        valueOperations.set("name", "jack");

        // 尝试获取键"name"的值
        valueOperations.get("name");

        // 设置带过期时间的键值对,键"code"的值设置为"123",并在60秒后自动过期
        valueOperations.set("code","123",60, TimeUnit.SECONDS);

        // 使用setIfAbsent方法,如果键"code"不存在,则设置其值为"456"
        valueOperations.setIfAbsent("code", "456");
    }

 操作哈希类型的数据

 /**
     * 使用Redis的Hash数据类型进行操作的测试方法
     * 本方法主要演示了如何在Redis中使用HashOperations进行键值对存储、读取、删除等操作
     */
    @Test
    public void testHash() {
        // 初始化HashOperations对象,用于操作Redis中的Hash数据类型
        HashOperations hashOperations = redisTemplate.opsForHash();

        // 向Redis中名为"user:1"的Hash中添加键值对,"name"字段存储值"jack"
        hashOperations.put("user:1","name","jack");
        // 向Redis中名为"user:1"的Hash中添加键值对,"age"字段存储值"18"
        hashOperations.put("user:1","age","18");

        // 从名为"user:1"的Hash中根据键"name"获取值,此处获取"jack"
        hashOperations.get("user:1","name");
        // 从名为"user:1"的Hash中根据键"age"获取值,此处获取"18"
        hashOperations.get("user:1","age");

        // 获取所有以"user"开头的Hash的键,用于查看或操作这些键对应的Hash数据
        hashOperations.keys("user");
        // 获取所有以"user"开头的Hash的值,用于查看或操作这些值
        hashOperations.values("user");

        // 从名为"user:1"的Hash中删除键为"name"的字段,此处删除"jack"
        hashOperations.delete("user:1","name");
    }

 操作列表类型的数据

  /**
     * 测试Redis列表操作
     * 本方法展示了如何在Redis列表中进行插入、查询和移动元素等操作
     */
    @Test
    public void testList() {
        // 创建Redis列表操作对象
        ListOperations listOperations = redisTemplate.opsForList();

        // 向列表左侧添加一个元素
        listOperations.leftPush("list","jack");

        // 向列表左侧连续添加多个元素
        listOperations.leftPushAll("list","tom","lucy","mary");

        // 获取列表中的所有元素
        listOperations.range("list",0,-1);

        // 从列表右侧删除一个元素
        listOperations.rightPop("list");

        // 获取列表的大小
        listOperations.size("list");
    }

 操作集合类型的数据

 /**
     * 测试Redis中Set数据结构的操作
     * 本方法展示了使用RedisTemplate进行Set操作的各种方法,包括添加成员、获取成员、删除成员、检查成员是否存在等
     * 通过这些操作,我们可以了解如何在应用程序中操作Redis中的Set数据结构
     */
    @Test
    public void testSet() {
        // 获取RedisTemplate的SetOperations操作对象
        SetOperations setOperations = redisTemplate.opsForSet();

        // 向名为"set"的集合中添加多个成员
        setOperations.add("set","jack","tom","lucy","mary");

        // 获取名为"set"的集合中的所有成员
        setOperations.members("set");

        // 获取名为"set"的集合的成员数量
        setOperations.size("set");

        // 检查名为"set"的集合中是否包含成员"jack"
        setOperations.isMember("set","jack");

        // 计算名为"set1"和"set2"的集合的交集
        setOperations.intersect("set1","set2");

        // 计算名为"set1"和"set2"的集合的并集
        setOperations.union("set1","set2");

        // 计算名为"set1"和"set2"的集合的差集
        setOperations.difference("set1","set2");

        // 随机获取名为"set"的集合中的2个成员
        setOperations.randomMembers("set",2);

        // 随机获取名为"set"的集合中的2个不重复成员
        setOperations.distinctRandomMembers("set",2);

        // 从名为"set"的集合中移除成员"jack"
        setOperations.remove("set","jack");
    }

 操作有序集合类型的数据

 /**
     * 测试Redis中ZSet的操作
     * 本方法通过使用RedisTemplate类的各种ZSet操作方法,演示如何对Redis中的ZSet进行操作
     * 包括添加元素、按范围查询、按分数查询、增加分数和删除元素等操作
     */
    @Test
    public void testZSet() {
        // 获取ZSet操作对象
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        
        // 向ZSet中添加元素,同时指定元素的分数
        zSetOperations.add("zset","jack",10);
        zSetOperations.add("zset","tom",20);
        zSetOperations.add("zset","lucy",30);
        
        // 按范围查询ZSet中的元素,0,-1表示查询所有元素
        zSetOperations.range("zset",0,-1);
        
        // 按分数查询ZSet中的元素,查询分数在0到100之间的元素
        zSetOperations.rangeByScore("zset",0,100);
        
        // 为指定元素增加分数,此处为将"jack"的分数增加10
        zSetOperations.incrementScore("zset","jack",10);
        
        // 删除ZSet中的指定元素
        zSetOperations.remove("zset","jack");
    }

通用命令

 /**
     * 测试RedisTemplate的常见操作
     * 本方法展示了与Redis交互的各种基本操作,包括键的检查、删除、过期、重命名以及事务操作等
     * 主要用于验证RedisTemplate的功能和集成
     */
    @Test
    public void testCommon(){
        // 检索所有键
        redisTemplate.keys("*");

        // 检查是否存在特定的键
        redisTemplate.hasKey("name");

        // 删除单个键
        redisTemplate.delete("name");

        // 删除多个键
        redisTemplate.delete(Arrays.asList("name","age"));

        // 设置键的过期时间
        redisTemplate.expire("name",10, TimeUnit.SECONDS);

        // 移除键的过期时间,使其永不过期
        redisTemplate.persist("name");

        // 将键重命名为新的名称
        redisTemplate.rename("name","age");

        // 当键名不存在时,将其重命名为新的名称
        redisTemplate.renameIfAbsent("name","age");

        // 获取键的类型
        redisTemplate.type("name");
    }

标签:set,Java,name,Redis,jack,操作,redisTemplate
From: https://blog.csdn.net/qq_52848267/article/details/142437843

相关文章

  • 日新月异 PyTorch - pytorch 基础: 张量的基础操作
    源码https://github.com/webabcd/PytorchDemo作者webabcd日新月异PyTorch-pytorch基础:张量的基础操作示例如下:basic\demo01.py#本例用于演示torch张量的基础操作,其操作与numpy基本相同(注:看本例之前先要把numpy弄懂)#torch可以支持在gpu上运算,而numpy......
  • JavaScript数据类型转换 布尔类型转换
    布尔类型转换布尔类型只有两个值:true和false。任何直观上为空的都被转换为false,其他的转换为true。显示转换为布尔类型时,使用Boolean(Value)函数。布尔类型转换规则类型类型转换后0false“0”true“”或者‘’true“”或者‘’即空字符串falsenullfalseundefinedfalseNaNfal......
  • Java怎么把多个对象的list的数据合并
    环境idea,java8方法1.使用addAll()方法想简单地想要合并List,直接使用List的addAll()方法是最直接的方式。List<YourType>list1=newArrayList<>();List<YourType>list2=newArrayList<>();//假设list1和list2已经有了数据List<YourType>merged......
  • 【DL基础】torchvision数据集操作
     示例来源:PyTorch深度学习实战(geekbang.org)1、图像裁剪torchvision.transforms提供了多种剪裁方法,例如中心剪裁、随机剪裁、四角和中心剪裁等。我们依次来看下它们的定义。先说中心剪裁,顾名思义,在中心裁剪指定的PILImage或Tensor,其定义如下:torchvision.transforms......
  • java浅拷贝BeanUtils.copyProperties引发的RPC异常
    背景近期参与了一个攻坚项目,前期因为其他流程原因,测试时间已经耽搁了好几天了,本以为已经解决了卡点,后续流程应该顺顺利利的,没想到人在地铁上,bug从咚咚来~没有任何修改的服务接口,抛出异常:java.lang.ClassCastException:java.util.HashMapcannotbecasttocn.xxx.xxx.xxx.xx......
  • 2024-09-18:用go语言,给定一个从 0 开始的长度为 n 的正整数数组 nums 和一个二维操作数
    2024-09-18:用go语言,给定一个从0开始的长度为n的正整数数组nums和一个二维操作数组queries,每个操作由一个下标值indexi和一个数值ki组成。开始时,数组中的所有元素都是未标记的。依次执行m次操作,每次操作的过程如下:1.如果下标indexi对应的元素还未标记,则标记这个元素......
  • git误操作带来的麻烦-merge
    git误操作带来的麻烦-merge我想将一个分支的内容完全覆盖远程另外一个分支的内容怎么做如果你想将一个本地分支(我们称之为source-branch)的内容完全覆盖远程的另一个分支(我们称之为target-branch),可以按照以下步骤操作。但请注意,这种方法会永久性地改变target-branch的提交历史,所......
  • 照片去水印怎么操作?3个高清壁纸无损去水印的教程分享
    上网真好啊!能够找到好多摄影大神分享的,超好看的自然景物照片,每一张都想拿来当电脑桌面壁纸、手机壁纸......但上网拿的照片有这点不好,就是大部分照片都带有防盗水印,虽说不影响照片的整体美观,但作为壁纸,咱总是有些奇奇怪怪的强迫症在,所以大家有用到好用的照片去水印的工具吗?......
  • 《深入解析 Java 中的 ThreadLocal》
    ThreadLocal1.概述ThreadLocal被称为线程局部变量,用于在线程中保存数据。由于在ThreadLocal中保存的数据仅属于当前线程,所以该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal用于在同一个线程间,在不同的类和方法之间共享数据的的场景,也可以......
  • 【工具】Java Excel转图片
    【工具】JavaExcel转图片packagecom.yj.luban.modules.office.excel;importorg.apache.poi.ss.usermodel.*;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;importjavax.imageio.ImageIO;importjava.awt.Color;importjava.awt.Font;importjava.awt.*;importj......