Redis的数据结构(基本)

安装完成后,在任意目录输入redis-server命令即可启动Redis:

bash 复制代码
redis-server

我们可以进入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 123321:指定redis的访问密码

其中的commonds就是Redis的操作命令,例如:

  • ping:与redis服务端做心跳测试,服务端正常会返回pong

不指定commond时,会进入redis-cli的交互控制台:

在 Redis 中,无论是字符串、整数还是浮点数,它们都被归为字符串类型存储和管理。但 Redis 会根据数据的特性,进行内部的存储优化,并为这些数据提供合适的操作接口。

图形化的 存储方式如下:

Jedis客户端

https://github.com/redis/jedis

1. 引入依赖

2.连接Redis(需要地址,端口号以及密码)

Jedis连接池:

java 复制代码
package com.gege;

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 jedisPoolConfig = new JedisPoolConfig();
        // 最大连接
        jedisPoolConfig.setMaxTotal(8);
        // 最大空闲连接
        jedisPoolConfig.setMaxIdle(8);
        // 最小空闲连接
        jedisPoolConfig.setMinIdle(0);
        // 设置最长等待时间,ms
        jedisPoolConfig.setMaxWaitMillis(200);
        jedisPool = new JedisPool(jedisPoolConfig, "192.168.150.101", 6379, 1000, "123321");
    }

    // 获取Jedis对象
    public static Jedis getJedis() {
        return jedisPool.getResource();
    }
}

StringDataRedis:

1. 首先需要引入依赖

XML 复制代码
<!--        redis依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>3.2.0</version>
        </dependency>
<!--        common-pool-->
        <dependency>
            <groupId>commons-pool</groupId>
            <artifactId>commons-pool</artifactId>
            <version>1.6</version>
        </dependency>

2. 配置 Redis 连接

application.propertiesapplication.yml 文件中配置 Redis 的连接信息:

bash 复制代码
spring:
  data:
    redis:
      host: 192.168.88.130
      password: gege
      lettuce:
        pool:
          max-active: 8
          max-wait: 100ms
          max-idle: 8
          min-idle: 0

3. 注入 StringRedisTemplate

StringRedisTemplate 是 Spring Boot 自动配置的 Bean,可以直接通过 @Autowired 注入使用。

为什么选择**StringRedisTemplate而不是RedisTemplate?**

避免数据乱码问题

  • RedisTemplate 是一个通用的 Redis 操作类,可以处理多种数据类型(如 StringObject 等)。
  • 默认情况下,RedisTemplate 使用 JDK 的序列化方式存储数据,这会导致存入的数据以二进制形式存在 Redis 中。人眼直接查看会看到乱码形式。
  • 而**StringRedisTemplate 专门用于操作字符串类型数据,它使用 StringRedisSerializer 序列化 key 和 value,使数据以可读的字符串形式存储在 Redis 中,便于调试和监控。**
java 复制代码
package com.gege.redisdemo;

import cn.hutool.json.JSONUtil;
import com.gege.redisdemo.dto.User;
import net.minidev.json.JSONValue;
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;
import org.springframework.data.redis.core.StringRedisTemplate;

@SpringBootTest
class RedisDemoApplicationTests {
    @Autowired
//    private RedisTemplate redisTemplate; // 存入数据库是乱码的
    private StringRedisTemplate stringRedisTemplate  ;
    @Test
    void testString() {
        stringRedisTemplate.opsForValue().set("name","xiaoli");
        Object name = stringRedisTemplate.opsForValue().get("name");
        System.out.println("name:"+name);
    }
    @Test
    void testSaveUser(){
        // 创建对象
        User user = new User("格格", 23);
        // 手动序列化
        String js = JSONUtil.toJsonStr(user);
        stringRedisTemplate.opsForValue().set("user:100",js);
        // 获取数据
        String us = stringRedisTemplate.opsForValue().get("user:100");
        System.out.println(us);
        // 手动反序列化
        User bean = JSONUtil.toBean(us, User.class);
        System.out.println(bean);
    }

}

手动序列化复杂对象

对于非字符串的复杂对象(如 User 类**),需要将对象手动序列化为 JSON 格式,再存入 Redis。并且从Redis中取出来之后可以进行反序列化。使用Hutool工具包的JSONUtil注意需要导入依** 赖

bash 复制代码
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.11</version>
        </dependency>
相关推荐
若兰幽竹17 分钟前
【HBase整合Hive】HBase-1.4.8整合Hive-2.3.3过程
数据库·hive·hbase
lybugproducer19 分钟前
浅谈 Redis 数据类型
java·数据库·redis·后端·链表·缓存
青山是哪个青山19 分钟前
Redis 常见数据类型
数据库·redis·bootstrap
杨不易呀26 分钟前
Java面试全记录:Spring Cloud+Kafka+Redis实战解析
redis·spring cloud·微服务·kafka·高并发·java面试·面试技巧
廖圣平30 分钟前
美团核销 第三方接口供应商 (含接口文档)
开发语言·数据库·php
@解忧杂货铺1 小时前
MySQL历史版本下载及安装配置教程
数据库·mysql
郭逍遥1 小时前
[工具]B站缓存工具箱 (By 郭逍遥)
windows·python·缓存·工具
hnlucky1 小时前
《基于 Kubernetes 的 WordPress 高可用部署实践:从 MariaDB 到 Nginx 反向代理》
运维·数据库·nginx·云原生·容器·kubernetes·mariadb
dgiij1 小时前
excel大表导入数据库
数据库·mysql·node.js·excel
多敲代码防脱发1 小时前
导出导入Excel文件(详解-基于EasyExcel)
java·开发语言·jvm·数据库·mysql·excel