Redis(入门篇)

发布时间:2026/7/27 7:28:45

Redis(入门篇) Redis 概述Redis 诞生于 2009 年全称为 Remote Dictionary Server远程词典服务器是一款基于内存的键值型 NoSQL 数据库核心特征键值存储单线程原子性高性能低延迟数据持久化集群支持多语言兼容其中键值型是指 Redis 中存储的数据都是以 key、value 对的形式存储而 value 的形式多种多样可以是字符串、数值、甚至 jsonNoSql 是相对于传统关系型数据库而言有很大差异的一种特殊的数据库因此也称之为非关系型数据库结构化与非结构化传统关系型数据库是结构化数据每一张表都有严格的约束信息字段名、字段数据类型、字段约束等信息插入的数据必须遵守这些约束而 NoSql 则对数据库格式没有严格约束往往形式松散自由可以是键值型、文档型、图格式关联和非关联传统数据库的表与表之间往往存在关联如外键而非关系型数据库不存在关联关系要维护关系要么靠代码中的业务逻辑要么靠数据之间的耦合查询方式传统关系型数据库会基于 Sql 语句做查询语法有统一标准而不同的非关系数据库查询语法差异极大事务传统关系型数据库能满足事务 ACID 的原则而非关系型数据库往往不支持事务或者不能严格保证 ACID 的特性只能实现基本的一致性除了上述四点外在存储方式、扩展性、查询性能上关系型与非关系型也都有着显著差异关系型数据库基于磁盘存储磁盘 IO 多、性能一般集群以主从备份为主属于垂直扩展因表间关联复杂水平扩展困难非关系型数据库多基于内存操作读写快、性能更好支持数据拆分到多机适合海量存储水平扩展能力更强Redis 安装由于大多数企业都是基于 Linux 服务器来部署项目且 Redis 官方没有提供 Windows 版本的安装包因此基于 Linux 系统来安装 Redis版本为 CentOS 7依赖库Redis 是基于 C 语言编写的需要安装 Redis 所需要的 gcc 依赖yum install -y gcc tcl上传安装包并解压将 Redis 的安装包上传到虚拟机的 /usr/local/src 目录解压缩tar -xzf redis-6.2.6.tar.gz进入 redis 目录cd redis-6.2.6运行编译命令make make install默认的安装路径是在 /usr/local/bin 目录下其中 redis-cli 是 redis 提供的命令行客户端redis-server 是 redis 的服务端启动脚本redis-sentinel 是 redis 的哨兵启动脚本该目录已经默认配置到环境变量因此可以在任意目录下运行这些命令Redis 启动默认启动安装完成后在任意目录输入 redis-server 命令即可启动 Redis这种启动属于前台启动会阻塞整个会话窗口不推荐使用指定配置启动如果要让 Redis 以后台方式启动则必须修改 Redis 配置文件将这个配置文件备份cp redis.conf redis.conf.bck修改 redis.conf 文件中的配置# 允许访问的地址默认是127.0.0.1会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问生产环境不要设置为0.0.0.0 bind 0.0.0.0 # 守护进程修改为yes后即可后台运行 daemonize yes # 密码设置后访问Redis必须输入密码 requirepass 1234Redis 的其它常见配置# 监听的端口 port 6379 # 工作目录默认是当前目录也就是运行redis-server时的命令日志、持久化等文件会保存在这个目录 dir . # 数据库数量设置为1代表只使用1个库默认有16个库编号0~15 databases 1 # 设置redis能够使用的最大内存 maxmemory 512mb # 日志文件默认为空不记录日志可以指定日志文件名 logfile redis.log启动 Redis# 进入redis安装目录 cd /usr/local/src/redis-6.2.6 # 启动 redis-server redis.conf停止服务# 利用redis-cli来执行 shutdown 命令即可停止 Redis 服务 # 因为之前配置了密码因此需要通过 -u 来指定密码 redis-cli -u 1234 shutdown开机自启通过配置来实现开机自启新建一个系统服务文件vi /etc/systemd/system/redis.service复制内容[Unit] Descriptionredis-server Afternetwork.target [Service] Typeforking ExecStart/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf PrivateTmptrue [Install] WantedBymulti-user.target重载系统服务systemctl daemon-reload即可用下面这组命令来操作 redis# 启动 systemctl start redis # 停止 systemctl stop redis # 重启 systemctl restart redis # 查看状态 systemctl status redis让 redis 开机自启systemctl enable redis客户端安装完 Redis就可以操作 Redis 实现数据的 CRUD需要用到 Redis 客户端包括命令行客户端图形化桌面客户端编程客户端命令行客户端Redis 安装完后就自带了 redis-cli 命令行客户端使用方式如下redis-cli [options] [commonds]其中常见的 options 有-h 127.0.0.1指定要连接的 redis 节点的 IP 地址默认是 127.0.0.1-p 6379指定要连接的 redis 节点的端口默认是 6379-a 1234指定 redis 的访问密码其中的 commonds 就是 Redis 的操作命令如 ping与 redis 服务端做心跳测试服务端正常会返回 pong不指定 commond 时会进入 redis-cli 的交互控制台图形化桌面客户端安装包https://github.com/lework/RedisDesktopManager-Windows/releases安装完成后双击 rdm.exe 文件即可运行建立连接先关闭防火墙systemctl stop firewalldRedis 默认有 16 个仓库编号从 0 至 15通过配置文件可以设置仓库数量但是不超过 16并且不能自定义仓库名称基于 redis-cli 连接 Redis 服务可以通过 select 命令来选择数据库# 选择 1号库 select 1Redis 常见命令Redis 数据结构Redis 是典型的 key-value 数据库key 一般是字符串而 value 包含很多不同的数据类型Redis 将操作不同数据类型的命令做了分组在官网查看https://redis.io/commands也可通过 Help 命令帮助查看命令Redis 通用命令通用指令是部分数据类型的都可以使用的指令常见的有KEYS查看符合模板的所有 keyDEL删除一个指定的 keyEXISTS判断 key 是否存在EXPIRE给一个 key 设置有效期有效期到期时该 key 会被自动删除TTL查看一个 key 的剩余有效期通过 help [command] 可以查看一个命令的具体用法例如KEYS127.0.0.1:6379 keys * 1) name 2) age 127.0.0.1:6379 # 查询以a开头的key 127.0.0.1:6379 keys a* 1) age 127.0.0.1:6379注意在生产环境下不推荐使用 keys 命令因为该命令在 key 过多的情况下效率不高DEL127.0.0.1:6379 help del DEL key [key ...] summary: Delete a key since: 1.0.0 group: generic 127.0.0.1:6379 del name #删除单个 (integer) 1 #成功删除1个 127.0.0.1:6379 keys * 1) age 127.0.0.1:6379 MSET k1 v1 k2 v2 k3 v3 #批量添加数据 OK 127.0.0.1:6379 keys * 1) k3 2) k2 3) k1 4) age 127.0.0.1:6379 del k1 k2 k3 k4 (integer) 3 #此处返回的是成功删除的key由于redis中只有k1,k2,k3 所以只成功删除3个最终返回 127.0.0.1:6379 127.0.0.1:6379 keys * #再查询全部的key 1) age #只剩下一个了 127.0.0.1:6379EXISTS127.0.0.1:6379 help EXISTS EXISTS key [key ...] summary: Determine if a key exists since: 1.0.0 group: generic 127.0.0.1:6379 exists age (integer) 1 127.0.0.1:6379 exists name (integer) 0EXPIRE TTL127.0.0.1:6379 expire age 10 (integer) 1 127.0.0.1:6379 ttl age (integer) 8 127.0.0.1:6379 ttl age (integer) 6 127.0.0.1:6379 ttl age (integer) -2 127.0.0.1:6379 ttl age (integer) -2 #当这个key过期了那么此时查询出来就是-2 127.0.0.1:6379 keys * (empty list or set) 127.0.0.1:6379 set age 10 #如果没有设置过期时间 OK 127.0.0.1:6379 ttl age (integer) -1 # ttl的返回值就是-1String 命令String 类型也就是字符串类型是 Redis 中最简单的存储类型其 value 是字符串根据字符串的格式不同可以分为string普通字符串int整数类型可以做自增/自减操作float浮点类型可以做自增/自减操作String 的常见命令SET添加或者修改已经存在的一个 String 类型的键值对GET根据 key 获取 String 类型的 valueMSET批量添加多个 String 类型的键值对MGET根据多个 key 获取多个 String 类型的 valueINCR让一个整型的 key 自增1INCRBY让一个整型的 key 自增并指定步长例如incrby num 2 让 num 值自增 2INCRBYFLOAT让一个浮点类型的数字自增并指定步长SETNX添加一个 String 类型的键值对前提是这个 key 不存在否则不执行SETEX添加一个 String 类型的键值对并且指定有效期SET GET127.0.0.1:6379 set name Rose //原来不存在 OK 127.0.0.1:6379 get name Rose 127.0.0.1:6379 set name Jack //原来存在就是修改 OK 127.0.0.1:6379 get name JackMSET MGET127.0.0.1:6379 MSET k1 v1 k2 v2 k3 v3 OK 127.0.0.1:6379 MGET name age k1 k2 k3 1) Jack //之前存在的name 2) 10 //之前存在的age 3) v1 4) v2 5) v3INCR INCRBY DECY127.0.0.1:6379 get age 10 127.0.0.1:6379 incr age //增加1 (integer) 11 127.0.0.1:6379 get age //获得age 11 127.0.0.1:6379 incrby age 2 //一次增加2 (integer) 13 //返回目前的age的值 127.0.0.1:6379 incrby age 2 (integer) 15 127.0.0.1:6379 incrby age -1 //也可以增加负数相当于减 (integer) 14 127.0.0.1:6379 incrby age -2 //一次减少2个 (integer) 12 127.0.0.1:6379 DECR age //相当于 incr 负数减少正常用法 (integer) 11 127.0.0.1:6379 get age 11SETNX127.0.0.1:6379 help setnx SETNX key value summary: Set the value of a key, only if the key does not exist since: 1.0.0 group: string 127.0.0.1:6379 set name Jack //设置名称 OK 127.0.0.1:6379 setnx name lisi //如果key不存在则添加成功 (integer) 0 127.0.0.1:6379 get name //由于name已经存在所以lisi的操作失败 Jack 127.0.0.1:6379 setnx name2 lisi //name2 不存在所以操作成功 (integer) 1 127.0.0.1:6379 get name2 lisiSETEX127.0.0.1:6379 setex name 10 jack OK 127.0.0.1:6379 ttl name (integer) 8 127.0.0.1:6379 ttl name (integer) 7 127.0.0.1:6379 ttl name (integer) 5Key 的层级结构Redis 的 key 允许有多个单词形成层级结构多个单词之间用 : 隔开格式如下项目名:业务名:类型:id这个格式并非固定也可以根据需求来删除或添加词条例如项目名称叫 zhu有 user 和 product 两种不同类型的数据可以这样定义 keyuser 相关的 keyzhu:user:1product 相关的 keyzhu:product:1如果 Value 是一个 Java 对象例如一个 User 对象则可以将对象序列化为 JSON 字符串后存储KEYVALUEzhu:user:1{id:1, name: Jack, age: 21}zhu:product:1{id:1, name: iphone17, price: 9999}采用这样的方式存储在可视化界面中redis 也会以层级结构来进行存储Hash 命令Hash 类型也叫散列其 value 是一个无序字典类似于 Java 中的 HashMap 结构Hash 结构可以将对象中的每个字段独立存储可以针对单个字段做 CRUDHash 的常见命令HSET key field value添加或者修改 hash 类型 key 的 field 的值HGET key field获取一个 hash 类型 key 的 field 的值HMSET批量添加多个 hash 类型 key 的 field 的值HMGET批量获取多个 hash 类型 key 的 field 的值HGETALL获取一个 hash 类型的 key 中的所有的 field 和 valueHKEYS获取一个 hash 类型的 key 中的所有的 fieldHINCRBY让一个 hash 类型 key 的字段值自增并指定步长HSETNX添加一个 hash 类型的 key 的 field 值前提是这个 field 不存在否则不执行HSET HGET127.0.0.1:6379 HSET zhu:user:3 name Lucy//大key是 zhu:user:3 小key是name小value是Lucy (integer) 1 127.0.0.1:6379 HSET zhu:user:3 age 21// 如果操作不存在的数据则是新增 (integer) 1 127.0.0.1:6379 HSET zhu:user:3 age 17 //如果操作存在的数据则是修改 (integer) 0 127.0.0.1:6379 HGET zhu:user:3 name Lucy 127.0.0.1:6379 HGET zhu:user:3 age 17HMSET HMGET127.0.0.1:6379 HMSET zhu:user:4 name HanMeiMei OK 127.0.0.1:6379 HMSET zhu:user:4 name LiLei age 20 sex man OK 127.0.0.1:6379 HMGET zhu:user:4 name age sex 1) LiLei 2) 20 3) manHGETALL127.0.0.1:6379 HGETALL zhu:user:4 1) name 2) LiLei 3) age 4) 20 5) sex 6) manHKEYS HVALS127.0.0.1:6379 HKEYS zhu:user:4 1) name 2) age 3) sex 127.0.0.1:6379 HVALS zhu:user:4 1) LiLei 2) 20 3) manHINCRBY127.0.0.1:6379 HINCRBY zhu:user:4 age 2 (integer) 22 127.0.0.1:6379 HVALS zhu:user:4 1) LiLei 2) 22 3) man 127.0.0.1:6379 HINCRBY zhu:user:4 age -2 (integer) 20HSETNX127.0.0.1:6379 HSETNX zhu:user4 sex woman (integer) 1 127.0.0.1:6379 HGETALL zhu:user:3 1) name 2) Lucy 3) age 4) 17 127.0.0.1:6379 HSETNX zhu:user:3 sex woman (integer) 1 127.0.0.1:6379 HGETALL zhu:user:3 1) name 2) Lucy 3) age 4) 17 5) sex 6) womanList 命令Redis 中的 List 类型与 Java 中的 LinkedList 类似可以看做是一个双向链表结构既可以支持正向检索和也可以支持反向检索特征也与 LinkedList 类似有序、元素可以重复、插入和删除快、查询速度一般List 的常见命令LPUSH key element ... 向列表左侧插入一个或多个元素LPOP key移除并返回列表左侧的第一个元素没有则返回 nilRPUSH key element ... 向列表右侧插入一个或多个元素RPOP key移除并返回列表右侧的第一个元素LRANGE key star end返回一段角标范围内的所有元素BLPOP 和 BRPOP与 LPOP 和 RPOP 类似只不过在没有元素时等待指定时间而不是直接返回 nilLPUSH RPUSH127.0.0.1:6379 LPUSH users 1 2 3 (integer) 3 127.0.0.1:6379 RPUSH users 4 5 6 (integer) 6LPOP RPOP127.0.0.1:6379 LPOP users 3 127.0.0.1:6379 RPOP users 6LRANGE127.0.0.1:6379 LRANGE users 1 2 1) 1 2) 4Set 命令Redis 的 Set 结构与 Java 中的 HashSet 类似可以看做是一个 value 为 null 的 HashMap因为也是一个 hash 表因此具备与 HashSet 类似的特征无序、元素不可重复、查找快、支持交集/并集/差集等功能Set 的常见命令SADD key member ... 向 set 中添加一个或多个元素SREM key member ... :移除 set 中的指定元素SCARD key返回 set 中元素的个数SISMEMBER key member判断一个元素是否存在于 set 中SMEMBERS获取 set 中的所有元素SINTER key1 key2 ... 求 key1 与 key2 的交集SDIFF key1 key2 ... 求 key1 与 key2 的差集SUNION key1 key2 ..求 key1 和 key2 的并集具体命令127.0.0.1:6379 sadd s1 a b c (integer) 3 127.0.0.1:6379 smembers s1 1) c 2) b 3) a 127.0.0.1:6379 srem s1 a (integer) 1 127.0.0.1:6379 SISMEMBER s1 a (integer) 0 127.0.0.1:6379 SISMEMBER s1 b (integer) 1 127.0.0.1:6379 SCARD s1 (integer) 2SortedSet 命令Redis 的 SortedSet 是一个可排序的 set 集合与 Java 中的 TreeSet 有些类似但底层数据结构却差别很大SortedSet 中的每一个元素都带有一个 score 属性可以基于 score 属性对元素排序底层的实现是一个跳表SkipList加 hash 表SortedSet 具备的特性 可排序、元素不重复、查询速度快SortedSet 的常见命令ZADD key score member添加一个或多个元素到 sortedset 如果已经存在则更新其 score 值ZREM key member删除 sortedset 中的一个指定元素ZSCORE key member:获取 sortedset 中的指定元素的 score 值ZRANK key member获取 sortedset 中的指定元素的排名ZCARD key获取 sortedset 中的元素个数ZCOUNT key min max统计 score 值在给定范围内的所有元素的个数ZINCRBY key increment member让 sortedset 中指定元素自增步长为指定的 increment 值ZRANGE key min max按照 score 排序后获取指定排名范围内的元素ZRANGEBYSCORE key min max按照 score 排序后获取指定 score 范围内的元素ZDIFF.ZINTER.ZUNION求差集/交集/并集所有的排名默认都是升序如果要降序则在命令的 Z 后面添加 REV 即可例如升序获取 sortedset 中的指定元素的排名ZRANK key member降序获取 sortedset 中的指定元素的排名ZREVRANK key memeberRedis 的 Java 客户端JedisRedis 官网中提供了各种语言的客户端https://redis.io/docs/clients/其中 Java 客户端也包含很多Jedis 和 Lettuce主要提供了 Redis 命令对应的 API方便操作 Redis而 SpringDataRedis 又对这两种做了抽象和封装Redisson是在 Redis 基础上实现了分布式的可伸缩的 Java 数据结构例如 Map.Queue 等而且支持跨进程的同步机制Lock.Semaphore 等待比较适合用来实现特殊的功能需求快速入门创建工程引入依赖!--jedis-- dependency groupIdredis.clients/groupId artifactIdjedis/artifactId version7.1.0/version /dependency !--单元测试-- dependency groupIdorg.junit.jupiter/groupId artifactIdjunit-jupiter/artifactId version5.7.0/version scopetest/scope /dependency建立连接新建一个单元测试类public class JedisTest { private Jedis jedis; BeforeEach void setUp() { //建立连接 jedis new Jedis(192.168.100.128, 6379); //设置密码 jedis.auth(1234); //选择库 jedis.select(0); } }测试Test void testString() { //存入数据 String result jedis.set(name, 株); System.out.println(result result); //获取数据 String name jedis.get(name); System.out.println(name name); } Test void testHash() { //插入hash数据 jedis.hset(user:1, name, Jack); jedis.hset(user:1, age, 21); //获取 MapString, String map jedis.hgetAll(user:1); System.out.println(map); }释放资源AfterEach void tearDown() { if (jedis ! null) { jedis.close(); } }连接池Jedis 本身是线程不安全的并且频繁的创建和销毁连接会有性能损耗因此推荐使用 Jedis 连接池代替 Jedis 的直连方式创建连接池package org.example.jedis.util; public class JedisConnectionFacotry { private static final JedisPool jedisPool; static { //配置连接池 JedisPoolConfig poolConfig new JedisPoolConfig(); poolConfig.setMaxTotal(8); poolConfig.setMaxIdle(8); poolConfig.setMinIdle(0); poolConfig.setMaxWaitMillis(1000); //创建连接池对象 jedisPool new JedisPool(poolConfig, 192.168.100.128,6379,1000,1234); } public static Jedis getJedis(){ return jedisPool.getResource(); } }JedisConnectionFacotry工厂设计模式是实际开发中非常常用的一种设计模式可以使用工厂去降低代的耦合比如 Spring 中的 Bean 的创建就用到了工厂设计模式静态代码块随着类的加载而加载确保只能执行一次在加载当前工厂类的时候就可以执行static 的操作完成对连接池的初始化改造原始代码BeforeEach void setUp() { //建立连接 //jedis new Jedis(192.168.100.128, 6379); jedis JedisConnectionFacotry.getJedis(); //设置密码 //jedis.auth(1234); //选择库 jedis.select(0); }SpringDataRedisSpringData 是 Spring 中数据操作的模块包含对各种数据库的集成其中对 Redis 的集成模块就叫做 SpringDataRedis官网https://spring.io/projects/spring-data-redis提供了对不同 Redis 客户端的整合Lettuce 和 Jedis提供了 RedisTemplate 统一 API 来操作 Redis支持 Redis 的发布订阅模型支持 Redis 哨兵和 Redis 集群支持基于 Lettuce 的响应式编程支持基于 JDK、JSON、字符串、Spring 对象的数据序列化及反序列化支持基于 Redis 的 JDKCollection 实现SpringDataRedis 中提供了 RedisTemplate 工具类其中封装了各种对 Redis 的操作并且将不同数据类型的操作 API 封装到了不同的类型中快速入门导入 pom 坐标?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.5.7/version relativePath/ !-- lookup parent from repository -- /parent groupIdcom.heima/groupId artifactIdredis-demo/artifactId version0.0.1-SNAPSHOT/version nameredis-demo/name descriptionDemo project for Spring Boot/description properties java.version1.8/java.version /properties dependencies !--redis依赖-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId /dependency !--common-pool-- dependency groupIdorg.apache.commons/groupId artifactIdcommons-pool2/artifactId /dependency !--Jackson依赖-- dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId /dependency dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency /dependencies build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId configuration excludes exclude groupIdorg.projectlombok/groupId artifactIdlombok/artifactId /exclude /excludes /configuration /plugin /plugins /build /project配置文件spring: data: redis: host: 192.168.100.128 port: 6379 password: 1234 lettuce: pool: max-active: 8 # 最大连接 max-idle: 8 # 最大空闲连接 min-idle: 0 # 最小空闲连接 max-wait: 100ms # 连接等待时测试SpringBootTest class RedisDemoApplicationTests { Autowired private RedisTemplateString,Object redisTemplate; Test void testString() { //写入一条String数据 redisTemplate.opsForValue().set(name, 株); //获取string数据 Object name redisTemplate.opsForValue().get(name); System.out.println(name name); } }数据序列化器RedisTemplate 可以接收任意 Object 作为值写入 Redis只不过写入前会把 Object 序列化为字节形式默认是采用 JDK 序列化缺点可读性差内存占用较大自定义 RedisTemplate 的序列化方式Configuration public class RedisConfig { Bean public RedisTemplateString, Object redisTemplate(RedisConnectionFactory connectionFactory){ //创建RedisTemplate对象 RedisTemplateString, Object template new RedisTemplate(); //设置连接工厂 template.setConnectionFactory(connectionFactory); //创建JSON序列化工具 GenericJackson2JsonRedisSerializer jsonRedisSerializer new GenericJackson2JsonRedisSerializer(); //设置Key的序列化 template.setKeySerializer(RedisSerializer.string()); template.setHashKeySerializer(RedisSerializer.string()); //设置Value的序列化 template.setValueSerializer(jsonRedisSerializer); template.setHashValueSerializer(jsonRedisSerializer); //返回 return template; } }此处采用了 JSON 序列化来代替默认的 JDK 序列化方式整体可读性有了很大提升并且能将Java 对象自动的序列化为 JSON 字符串查询时也能自动把 JSON 反序列化为 Java 对象但是其中记录了序列化时对应的 class 名称目的是为了查询时实现自动反序列化会带来额外的内存开销StringRedisTemplate为了减少内存的消耗可以采用手动序列化的方式不借助默认的序列化器而且只采用 String 的序列化器这样在存储 value 时内存中就不用多存储数据从而节约内存空间因此 SpringDataRedis 提供了 RedisTemplate 的子类StringRedisTemplate它的 key 和 value的序列化方式默认就是 String 方式省去了自定义 RedisTemplate 的序列化方式的步骤而是直接使用SpringBootTest class RedisStringTests { Autowired private StringRedisTemplate stringRedisTemplate; Test void testString() { //写入一条String数据 stringRedisTemplate.opsForValue().set(verify:phone:13600527634, 124143); //获取string数据 Object name stringRedisTemplate.opsForValue().get(name); System.out.println(name name); } private static final ObjectMapper mapper new ObjectMapper(); Test void testSaveUser() throws JsonProcessingException { //创建对象 User user new User(株, 19); //手动序列化 String json mapper.writeValueAsString(user); // 写入数据 stringRedisTemplate.opsForValue().set(user:200, json); // 获取数据 String jsonUser stringRedisTemplate.opsForValue().get(user:200); // 手动反序列化 User user1 mapper.readValue(jsonUser, User.class); System.out.println(user1 user1); } }Hash 结构操作SpringBootTest class RedisStringTests { Autowired private StringRedisTemplate stringRedisTemplate; Test void testHash() { stringRedisTemplate.opsForHash().put(user:400, name, 株); stringRedisTemplate.opsForHash().put(user:400, age, 19); MapObject, Object entries stringRedisTemplate.opsForHash().entries(user:400); System.out.println(entries entries); } }

相关新闻