Redis快速入门

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

Redis快速入门(heima)


Redis的常见命令和客户端使用

1.初识Redis

Redis是一种键值型的NoSql数据库,这里有两个关键字:

  • 键值型

  • NoSql

其中键值型,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串、数值、甚至json:
Redis快速入门
而NoSql则是相对于传统关系型数据库而言,有很大差异的一种数据库。

1.1.认识NoSQL

NoSql可以翻译做Not Only Sql(不仅仅是SQL),或者是No Sql(非Sql的)数据库。是相对于传统关系型数据库而言,有很大差异的一种特殊的数据库,因此也称之为非关系型数据库

1.1.1.结构化与非结构化

传统关系型数据库是结构化数据,每一张表都有严格的约束信息:字段名、字段数据类型、字段约束等等信息,插入的数据必须遵守这些约束:
Redis快速入门
而NoSql则对数据库格式没有严格约束,往往形式松散,自由。

可以是键值型:
Redis快速入门
也可以是文档型:

Redis快速入门
甚至可以是图格式:
Redis快速入门

1.1.2.关联和非关联

传统数据库的表与表之间往往存在关联,例如外键:
Redis快速入门
而非关系型数据库不存在关联关系,要维护关系要么靠代码中的业务逻辑,要么靠数据之间的耦合:

{
  id: 1,
  name: "张三",
  orders: [
    {
       id: 1,
       item: {
	 id: 10, title: "荣耀6", price: 4999
       }
    },
    {
       id: 2,
       item: {
	 id: 20, title: "小米11", price: 3999
       }
    }
  ]
}

此处要维护“张三”的订单与商品“荣耀”和“小米11”的关系,不得不冗余的将这两个商品保存在张三的订单文档中,不够优雅。还是建议用业务来维护关联关系。

1.1.3.查询方式

传统关系型数据库会基于Sql语句做查询,语法有统一标准;

而不同的非关系数据库查询语法差异极大,五花八门各种各样。
Redis快速入门

1.1.4.事务

传统关系型数据库能满足事务ACID的原则。
Redis快速入门

而非关系型数据库往往不支持事务,或者不能严格保证ACID的特性,只能实现基本的一致性。

1.1.5.总结

除了上述四点以外,在存储方式、扩展性、查询性能上关系型与非关系型也都有着显著差异,总结如下:
Redis快速入门

  • 存储方式
    • 关系型数据库基于磁盘进行存储,会有大量的磁盘IO,对性能有一定影响
    • 非关系型数据库,他们的操作更多的是依赖于内存来操作,内存的读写速度会非常快,性能自然会好一些
  • 扩展性
    • 关系型数据库集群模式一般是主从,主从数据一致,起到数据备份的作用,称为垂直扩展。
    • 非关系型数据库可以将数据拆分,存储在不同机器上,可以保存海量数据,解决内存大小有限的问题。称为水平扩展。
    • 关系型数据库因为表之间存在关联关系,如果做水平扩展会给数据查询带来很多麻烦

1.2.认识Redis

Redis诞生于2009年全称是Remote Dictionary Server 远程词典服务器,是一个基于内存的键值型NoSQL数据库。

特征

  • 键值(key-value)型,value支持多种不同数据结构,功能丰富
  • 单线程,每个命令具备原子性
  • 低延迟,速度快(基于内存、IO多路复用、良好的编码)。
  • 支持数据持久化
  • 支持主从集群、分片集群
  • 支持多语言客户端

作者:Antirez

Redis的官方网站地址:https://redis.io/

1.3.安装Redis

详细请参考笔者的另一篇博客——《Redis安装说明(黑马程序员)》
https://huanghaoheng.blog.csdn.net/article/details/131275916

2.Redis常见命令

Redis是典型的key-value数据库,key一般是字符串,而value包含很多不同的数据类型:
Redis快速入门
Redis为了方便我们学习,将操作不同数据类型的命令也做了分组,在官网( https://redis.io/commands )可以查看到不同的命令:

Redis快速入门
不同类型的命令称为一个group,我们也可以通过help命令来查看各种不同group的命令:
Redis快速入门
接下来,我们就学习常见的五种基本数据类型的相关命令。

2.1.Redis通用命令

通用指令是部分数据类型的,都可以使用的指令,常见的有:

  • KEYS:查看符合模板的所有key,不建议在生产环境设备上使用
  • DEL:删除一个指定的key
  • EXISTS:判断key是否存在
  • EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
  • TTL:查看一个KEY的剩余有效期

通过help [command] 可以查看一个命令的具体用法,例如:

# 查看keys命令的帮助信息:
127.0.0.1:6379> help keys

KEYS pattern
summary: Find all keys matching the given pattern
since: 1.0.0
group: generic

keys 查看所有的键
Redis快速入门
keys a
查看以a开头的键
Redis快速入门
mset k1 v1 k2 v2 k3 v3 批量添加键值对
del k1 k2 k3 k4 批量删除键值对
Redis快速入门
exits age 判断是否存在该键值 存在返回1,不存在返回0
Redis快速入门
expire age 20 给对应的键设置过期时间
当返回值为-2,表示这个键已失效
当返回值为-1,表示这个键永久有效
Redis快速入门

2.2.String类型

String类型,也就是字符串类型,是Redis中最简单的存储类型。

其value是字符串,不过根据字符串的格式不同,又可以分为3类:

  • string:普通字符串
  • int:整数类型,可以做自增、自减操作
  • float:浮点类型,可以做自增、自减操作

不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512m.
Redis快速入门

2.2.1.String的常见命令

String的常见命令有:

  • SET:添加或者修改已经存在的一个String类型的键值对
  • GET:根据key获取String类型的value
  • MSET:批量添加多个String类型的键值对
  • MGET:根据多个key获取多个String类型的value
  • INCR:让一个整型的key自增1
  • INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2
  • INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
  • SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
  • SETEX:添加一个String类型的键值对,并且指定有效期

案例实操
MSET:批量添加多个String类型的键值对
MGET:获取多个key,对应的value
Redis快速入门
INCR:让一个整型的key自增1
INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2
Redis快速入门
INCRBY age -1 让age的值自减1
或者用DECR
Redis快速入门
INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
Redis快速入门
SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
setnx name lisi和set name wangwu nx效果是一样的
Redis快速入门
SETEX:添加一个String类型的键值对,并且指定有效期

setex name 10 jack和set name jack ex 10效果一样
Redis快速入门

2.2.2.Key结构

Redis没有类似MySQL中的Table的概念,我们该如何区分不同类型的key呢?

例如,需要存储用户、商品信息到redis,有一个用户id是1,有一个商品id恰好也是1,此时如果使用id作为key,那就会冲突了,该怎么办?

我们可以通过给key添加前缀加以区分,不过这个前缀不是随便加的,有一定的规范:

Redis的key允许有多个单词形成层级结构,多个单词之间用’:'隔开,格式如下:

	项目名:业务名:类型:id

这个格式并非固定,也可以根据自己的需求来删除或添加词条。这样以来,我们就可以把不同类型的数据区分开了。从而避免了key的冲突问题。

例如我们的项目名称叫 heima,有user和product两种不同类型的数据,我们可以这样定义key:

  • user相关的key:heima:user:1

  • product相关的key:heima:product:1

如果Value是一个Java对象,例如一个User对象,则可以将对象序列化为JSON字符串后存储:

KEY VALUE
heima:user:1 {“id”:1, “name”: “Jack”, “age”: 21}
heima:product:1 {“id”:1, “name”: “小米11”, “price”: 4999}

Redis快速入门

set heima:user:1 '{"id":1, "name":"Jack", "age": 21}'
set heima:user:2 '{"id":2, "name":"Rose", "age": 18}'
set heima:product:1 '{"id":1, "name":"小米11", "price": 4999}'
set heima:product:2 '{"id":2, "name":"荣耀6", "price": 2999}'

Redis快速入门
并且,在Redis的桌面客户端中,还会以相同前缀作为层级结构,让数据看起来层次分明,关系清晰:
Redis快速入门

2.3.Hash类型

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。

String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便:
Redis快速入门
Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD:
Redis快速入门
Hash的常见命令有:

  • 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和value

  • HKEYS:获取一个hash类型的key中的所有的field

  • HVALS:获取一个hash类型的key中的所有的field

  • HINCRBY:让一个hash类型key的字段值自增并指定步长

  • HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

案例实操:
hset key filed value 添加或者修改hash类型key的field的值
添加hash类型key的field的值Redis快速入门
Redis快速入门
修改hash类型key的field的值
Redis快速入门
Redis快速入门
HGET key field:获取一个hash类型key的field的值
Redis快速入门
HMSET:批量添加多个hash类型key的field的值
Redis快速入门
Redis快速入门
HMGET:批量获取多个hash类型key的field的值
Redis快速入门
HGETALL:获取一个hash类型的key中的所有的field和value
Redis快速入门
HKEYS:获取一个hash类型的key中的所有的field

  • HVALS:获取一个hash类型的key中的所有的field
    Redis快速入门
    HINCRBY:让一个hash类型key的字段值自增并指定步长
    Redis快速入门
    HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行
    Redis快速入门

2.4.List类型

Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。

特征也与LinkedList类似:

  • 有序
  • 元素可以重复
  • 插入和删除快
  • 查询速度一般

常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。

List的常见命令有:

  • LPUSH key element … :向列表左侧插入一个或多个元素
  • LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil
  • RPUSH key element … :向列表右侧插入一个或多个元素
  • RPOP key:移除并返回列表右侧的第一个元素
  • LRANGE key star end:返回一段角标范围内的所有元素
  • BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

案例实操
LPUSH key element … :向列表左侧插入一个或多个元素
Redis快速入门
Redis快速入门
RPUSH key element … :向列表右侧插入一个或多个元素
Redis快速入门
Redis快速入门
LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil
Redis快速入门
Redis快速入门
RPOP key:移除并返回列表右侧的第一个元素
Redis快速入门
Redis快速入门
LRANGE key star end:返回一段角标范围内的所有元素
Redis快速入门

BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

新开一个会话窗口
在第一个窗口中,做如下操作
阻塞100秒
Redis快速入门
在第二个窗口中连接redis,从左边新增push一个jack
Redis快速入门
第一个窗口,移除并返回列表左侧的第一个元素
Redis快速入门

Redis快速入门

2.5.Set类型

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的并集
    Redis快速入门

案例实操
sadd key member … 向set中添加一个或多个元素

Redis快速入门
smembers s1 获取set中的所有元素
Redis快速入门
srem s1 a 删除s1集合中的a元素
sismember s1 a : 判断集合s1中是否存在a元素,存在返回1,不存在返回0
sismember s1 b : 判断集合s1中是否存在b元素,存在返回1,不存在返回0
Redis快速入门
SCARD s1: 返回集合s1中元素的个数
Redis快速入门

练习:

  1. 将下列数据用Redis的Set集合来存储:
  • 张三的好友有:李四、王五、赵六
  • 李四的好友有:王五、麻子、二狗
    Redis快速入门
  1. 利用Set的命令实现下列功能:
  • 计算张三的好友有几人
    Redis快速入门

  • 计算张三和李四有哪些共同好友
    Redis快速入门

  • 查询哪些人是张三的好友却不是李四的好友
    Redis快速入门

  • 查询张三和李四的好友总共有哪些人
    Redis快速入门

  • 判断李四是否是张三的好友
    Redis快速入门

  • 判断张三是否是李四的好友
    Redis快速入门

  • 将李四从张三的好友列表中移除

Redis快速入门

2.6.SortedSet类型

Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。

SortedSet具备下列特性:

  • 可排序
  • 元素不重复
  • 查询速度快

因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。

SortedSet的常见命令有:

  • ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值
  • ZREM key member:删除sorted set中的一个指定元素
  • ZSCORE key member : 获取sorted set中的指定元素的score值
  • ZRANK key member:获取sorted set 中的指定元素的排名
  • ZCARD key:获取sorted set中的元素个数
  • ZCOUNT key min max:统计score值在给定范围内的所有元素的个数
  • ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值
  • ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
  • ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
  • ZDIFF、ZINTER、ZUNION:求差集、交集、并集

注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可,例如:

  • 升序获取sorted set 中的指定元素的排名:ZRANK key member

  • 降序获取sorted set 中的指定元素的排名:ZREVRANK key memeber

练习题:

将班级的下列学生得分存入Redis的SortedSet中:

Jack 85, Lucy 89, Rose 82, Tom 95, Jerry 78, Amy 92, Miles 76
Redis快速入门
Redis快速入门

并实现下列功能:

  • 删除Tom同学
    Redis快速入门
    Redis快速入门

  • 获取Amy同学的分数
    Redis快速入门

  • 获取Rose同学的排名
    Redis快速入门
    Redis快速入门
    Redis快速入门

  • 查询80分以下有几个学生
    Redis快速入门

  • 给Amy同学加2分
    Redis快速入门

  • 查出成绩前3名的同学
    -Redis快速入门

  • 查出成绩80分以下的所有同学

Redis快速入门

3.Redis的Java客户端

在Redis官网中提供了各种语言的客户端,地址:https://redis.io/docs/clients/
Redis快速入门
其中Java客户端也包含很多:
Redis快速入门
标记为*的就是推荐使用的java客户端,包括:

  • Jedis和Lettuce:这两个主要是提供了Redis命令对应的API,方便我们操作Redis,而SpringDataRedis又对这两种做了抽象和封装,因此我们后期会直接以SpringDataRedis来学习。
  • Redisson:是在Redis基础上实现了分布式的可伸缩的java数据结构,例如Map、Queue等,而且支持跨进程的同步机制:Lock、Semaphore等待,比较适合用来实现特殊的功能需求。

3.1.Jedis客户端

Jedis的官网地址: https://github.com/redis/jedis

Jedis案例实操代码:https://download.csdn.net/download/weixin_46411355/87929873

3.1.1.快速入门

我们先来个快速入门:
0)创建工程
Redis快速入门
Redis快速入门
Redis快速入门

1)引入依赖:

  <dependencies>  <!--jedis-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.7.0</version>
        </dependency>
        <!--单元测试-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.7.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
package com.heima.test;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import redis.clients.jedis.Jedis;

public class JedisTest {
    private Jedis jedis;

    @BeforeEach
    void setUp(){
        //1.建立连接
        jedis = new Jedis("192.168.88.129",6379);
        //2.设置密码
        jedis.auth("123321");
        //3.选择库
        jedis.select(0);
    }

    @Test
    void testString(){
        String result = jedis.set("name", "虎哥");
        System.out.printf("result="+result);
        //获取数据
        String name = jedis.get("name");
        System.out.println("name = " + name);
    }

    @AfterEach
    void tearDown(){
        if(jedis!=null){
            jedis.close();
        }
    }
}

Redis快速入门
Redis快速入门
Redis快速入门
Redis快速入门
Redis快速入门

3.1.2.连接池

Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此我们推荐大家使用Jedis连接池代替Jedis的直连方式。

package com.heima.util;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisConnectionFactory {
    private static final JedisPool jedisPool;

    static {
        //配置连接池
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(8);
        poolConfig.setMaxIdle(8);
        poolConfig.setMinIdle(0);
        poolConfig.setMaxWaitMillis(1000);
        // 创建连接池对象,参数:连接池配置、服务端ip、服务端端口、超时时间、密码
        jedisPool = new JedisPool(poolConfig,"192.168.88.129",6379,1000,"123321");
    }

    public static Jedis getJedis(){
        return jedisPool.getResource();
    }
}

Redis快速入门
Redis快速入门

3.2.SpringDataRedis客户端

案例代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87940539

SpringData是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封装到了不同的类型中:
Redis快速入门

3.2.1.快速入门

SpringBoot已经提供了对SpringDataRedis的支持,使用非常简单。

首先,新建一个SpringBoot项目,然后按照下面步骤执行:
0)创建一个SpringBoot项目

1)引入依赖
Redis快速入门
Redis快速入门

Redis快速入门
Redis快速入门

  <!--common-pool-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

application.yml

spring:
  redis:
    host: 192.168.88.129
    port: 6379
    password: 123321
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: 100ms

测试类

package com.heima;

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.RedisTemplate;

@SpringBootTest
class SpringdataredisDemoApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void contextLoads() {
        //写入一条String数据
        redisTemplate.opsForValue().set("name","虎哥");
        //获取String数据
        Object name = redisTemplate.opsForValue().get("name");
        System.out.println("name = " + name);
    }

}

Redis快速入门
发现问题
Redis快速入门
执行一下
Redis快速入门
Redis快速入门
这个就是虎哥
Redis快速入门

Redis快速入门

3.2.2.自定义序列化

RedisTemplate可以接收任意Object作为值写入Redis:
Redis快速入门
只不过写入前会把Object序列化为字节形式,默认是采用JDK序列化,得到的结果是这样的:
Redis快速入门
缺点:

  • 可读性差
  • 内存占用较大

我们可以自定义RedisTemplate的序列化方式,代码如下:

package com.heima.redis.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.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){
        //创建RedisTemplate对象
        RedisTemplate<String, 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;
    }
}

修改单元测试类
Redis快速入门
pom.xml添加jackson的依赖

   <!--   Jackson     -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

运行测试类
Redis快速入门
Redis快速入门
新建一个pojo类
Redis快速入门

package com.heima.redis.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {
    private String name;
    private Integer age;
}

编写单元测试

  @Test
    void testSaveUser(){
        //写入数据
        redisTemplate.opsForValue().set("user:100",new User("虎哥",21));
        //获取数据
        User user = (User) redisTemplate.opsForValue().get("user:100");
        System.out.println("user = " + user);

    }

Redis快速入门
这里采用了JSON序列化来代替默认的JDK序列化方式。最终结果如图:
Redis快速入门
整体可读性有了很大提升,并且能将Java对象自动的序列化为JSON字符串,并且查询时能自动把JSON反序列化为Java对象。不过,其中记录了序列化时对应的class名称,目的是为了查询时实现自动反序列化。这会带来额外的内存开销。

3.2.3.StringRedisTemplate

Redis快速入门
Redis快速入门
为了节省内存空间,我们可以不使用JSON序列化器来处理value,而是统一使用String序列化器,要求只能存储String类型的key和value。当需要存储Java对象时,手动完成对象的序列化和反序列化。

Redis快速入门
测试类 存字符串
Redis快速入门
Redis快速入门
Redis快速入门
存对象


 private static final ObjectMapper mapper = new ObjectMapper();

    @Test
    void testSaveUser() throws JsonProcessingException {
        //创建对象
        User user = new User("虎哥",21);
        //手动序列化
        String userJson = mapper.writeValueAsString(user);

        //写入数据
        stringRedisTemplate.opsForValue().set("user:200",userJson);
        //获取数据
        String userJson2 = stringRedisTemplate.opsForValue().get("user:200");
        //手动反序列化
        User user2 = mapper.readValue(userJson2, User.class);
        System.out.println("user2 = " + user2);

    }

Redis快速入门
Redis快速入门
Redis快速入门

@Test
void testHash(){
    stringRedisTemplate.opsForHash().put("users:400","name","虎哥");
    stringRedisTemplate.opsForHash().put("users:400","age","21");

    Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries("users:400");
    System.out.println("entries = " + entries);

}

Redis快速入门文章来源地址https://www.toymoban.com/news/detail-501550.html

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

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

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

相关文章

  • MybatisPlus快速入门及常见设置

    目录 一、快速入门 1.1 准备数据 1.2 创建SpringBoot工程 1.3 使用MP 1.4 获取Mapper进行测试  二、常用设置 2.1 设置表映射规则 2.1.1 单独设置 2.1.2 全局设置 2.2 设置主键生成策略  2.2.1 为什么会有雪花算法? 2.2.2 垂直分表 2.2.3 水平分表 2.2.4 单独设置 2.2.5 全局设置 2.3 设置字段映射

    2024年02月19日
    浏览(33)
  • Redis 快速入门(1)

    Redis是一种键值型的NoSql数据库,这里有两个: 键值型 NoSql 其中 键值型 ,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串、数值、甚至json: 而NoSql则是相对于传统关系型数据库而言,有很大差异的一种数据库。 NoSql 可以翻译

    2024年01月24日
    浏览(32)
  • Redis快速入门

    Redis的常见命令和客户端使用 Redis是一种键值型的NoSql数据库,这里有两个: 键值型 NoSql 其中 键值型 ,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串、数值、甚至json: 而NoSql则是相对于传统关系型数据库而言,有很大差异

    2024年02月11日
    浏览(29)
  • Redis快速入门及在Java中使用Redis

     哈喽~大家好,这篇来看看Redis快速入门及在Java中使用Redis。  🥇个人主页:个人主页​​​​​              🥈 系列专栏:【微服务】        🥉与这篇相关的文章:             SpringCloud Sentinel 使用 SpringCloud Sentinel 使用_程序猿追的博客-CSDN博客 SpringCloud 网关 Gat

    2024年02月04日
    浏览(44)
  • redis实战-redis实现分布式锁&redisson快速入门

    前言 集群环境下的并发问题  分布式锁 定义 需要满足的条件 常见的分布式锁 redis实现分布式锁 核心思路 代码实现 误删情况 逻辑说明 解决方案 代码实现 更为极端的误删情况 Lua脚本解决原子性问题 分布式锁-redission redisson的概念 快速入门 总结 在前面我们已经实现了单机

    2024年02月09日
    浏览(52)
  • 【Redis学习笔记01】快速入门(含安装教程)

    先来看门见山的给出 Redis 的概念: Redis:是一种基于内存的高性能K-V键值型NoSQL数据库 Redis官网:https://redis.io/ 1.1 初识NoSQL 想必大家都对关系型数据库更为熟悉!如MySQL、Oracle、SQL Server都是比较常见的关系型数据库,所谓关系型数据库主要以二维表作为数据结构进行存储,但

    2024年01月22日
    浏览(47)
  • 超详细Redis入门教程——Redis命令(上)

    本文小新为大家带来 超详细Redis入门教程——Redis命令(上) 相关知识,具体内容包括 Redis 基本命令 , Key 操作命令 , String 型 Value 操作命令 , Hash 型 Value 操作命令 , List 型 Value 操作命令 , Set 型 Value 操作命令 , 有序 Set 型 Value 操作命令 , benchmark 测试工具 等进行详尽

    2024年02月02日
    浏览(41)
  • 【Redis】入门篇--安装以及常用命令

    接下来看看由辉辉所写的关于Redis的相关操作吧   目录 🥳🥳Welcome Huihui\\\'s Code World ! !🥳🥳 一.Redis是什么 二. Redis有什么优势 三. Redis的安装 1.上传以及解压压缩包 2.安装redis所需环境 3.编译Redis ​4.检测安装情况 5.启动Redis 6.将Redis进程修改为守护进程 备份 修改redis.conf文件

    2024年02月06日
    浏览(63)
  • 快速入门Linux 中的常用命令

    使用终端软件连接到Linux系统后会出现下面这样的 root 表示当前用户的用户名 iZbp1gjlzlb0uidsc2adxuZ 表示主机名 ~ 表示当前所在的目录,在Linux中表示home目录(用户数据存放的目录) #表示当前是管理员 $ 表示是普通用户 语法:ls [选项] [目录或文件] 功能:对于目录,该命令列出

    2024年02月16日
    浏览(46)
  • nmap在kali的使用方法和常见命令(入门)

    kali linux 自带有namp,无需下载安装,命令形式为namp + 点击可查看使用说明信息 扫描目标计算机,一般可以获取以下信息: 是否在线 所在网络的拓扑 开放的端口 所使用的操作系统 所运行的服务与版本 所存在的漏洞 常用命令穷举 经典单个主机IP/域名普通扫描: 只检测是否

    2024年02月11日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包