Redis-12.在Java中操作Redis-Spring Data Redis使用方式-操作字符串类型的数据

一. 操作字符串类型的数据

java 复制代码
package com.sky.test;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;

import java.util.concurrent.TimeUnit;

@SpringBootTest
public class SpringDataRedisTest {
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testRedisTemplate() {
        System.out.println(redisTemplate);  // 首先输出redisTemplate对象看是否为空
        ValueOperations valueOperations = redisTemplate.opsForValue();  // redis当中的字符串类型数据操作对象
        HashOperations hashOperations = redisTemplate.opsForHash();     // redis当中的哈希类型数据操作对象
        ListOperations listOperations = redisTemplate.opsForList();     // redis当中的列表类型数据操作对象
        SetOperations setOperations = redisTemplate.opsForSet();        // redis当中的集合类型数据操作对象
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();     // redis当中的有序集合类型数据操作对象
    }

    @Test
    public void testString() {
        redisTemplate.opsForValue().set("city","北京");   // set
        String city = (String) redisTemplate.opsForValue().get("city");// get
        System.out.println(city);
        redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);     // setex
        redisTemplate.opsForValue().setIfAbsent("lock","1");   // setnx
        redisTemplate.opsForValue().setIfAbsent("lock","2");
    }
}

这里我们使用的是10号数据库,因为我们在配置文件中配置的是10号数据库。我们使用opsForValue()方法来对redis当中的字符串类型的数据进行操作。

1.使用set来进行redis数据库中字符串类型数据的添加

2.使用get查询redis数据库当中字符串类型数据的value

3.使用set(Object key, Object value, long timeout, TimeUnit unit)设置数据库中数据的过期时间,对应redis中的setex命令

4.使用setIfAbsent(Object key, Object value)设置数据库中的数据,如果不存在就加入数据库,如果存在就不加入,对应redis中的setnx命令

之后可以从数据库可视化工具中查看DB10号数据库中的数据内容:

redis当中get到的数据是Object类型的,因此要使用强制类型转换。此外,redis当中的String和Java当中的String有区别,因此会使得其在java当中get到的字符串和redis当中的字符串有区别,如在当前例子中Java中get到的是正常输入,而redis当中会乱码。 code不存在是因为该键值对已过期

lock当中存储的字符串1而不是2,那是因为使用setIfAbsent的话当数据库中的键已存在时,再插入同样键的新值不会生效。

相关推荐
张较瘦_1 天前
[论文阅读] 软件工程 | 告别“线程安全玄学”:基于JMM的Java类静态分析,CodeQL3分钟扫遍GitHub千仓错误
java·论文阅读·安全
A尘埃1 天前
智慧零售全渠道业务中台系统
java·零售
小wanga1 天前
C++知识
java·开发语言·c++
鼠鼠我捏,要死了捏1 天前
Redis、Zookeeper 与关系型数据库分布式锁方案对比及性能优化实战指南
redis·zookeeper·分布式锁
我是渣哥1 天前
Java String vs StringBuilder vs StringBuffer:一个性能优化的探险故事
java·开发语言·jvm·后端·算法·职场和发展·性能优化
工一木子1 天前
深入Java并发:锁机制原理剖析与性能优化实战
java·性能优化·并发·
你我约定有三1 天前
java--写在 try 中的创建连接
java·开发语言
ERP老兵-冷溪虎山1 天前
Python/JS/Go/Java同步学习(第三篇)四语言“切片“对照表: 财务“小南“纸切片术切凭证到崩溃(附源码/截图/参数表/避坑指南/老板沉默术)
java·javascript·python·golang·中医编程·四语言同步学习·职场生存指南
科技树支点1 天前
无GC的Java创新设计思路:作用域引用式自动内存管理
java·python·go·web·编程语言·编译器