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>
相关推荐
缘来如此҉12 分钟前
Mysql数据库——增删改查CRUD
数据库·mysql·oracle
apihz34 分钟前
域名WHOIS信息查询免费API使用指南
android·开发语言·数据库·网络协议·tcp/ip
gwcgwcjava40 分钟前
[时序数据库-iotdb]时序数据库iotdb的安装部署
数据库·时序数据库·iotdb
remCoding1 小时前
Java全栈面试实录:从电商场景到AIGC的深度技术考察
spring boot·redis·spring cloud·ai·kafka·aigc·java面试
SHUIPING_YANG1 小时前
根据用户id自动切换表查询
java·服务器·数据库
爱吃烤鸡翅的酸菜鱼1 小时前
IDEA高效开发:Database Navigator插件安装与核心使用指南
java·开发语言·数据库·编辑器·intellij-idea·database
超奇电子1 小时前
阿里云OSS预签名URL上传与临时凭证上传的技术对比分析
数据库·阿里云·云计算
神仙别闹1 小时前
基于C#+SQL Server实现(Web)学生选课管理系统
前端·数据库·c#
m0_653031362 小时前
PostgreSQL技术大讲堂 - 第97讲:PG数据库编码和区域(locale)答疑解惑
数据库·postgresql
会编程的林俊杰2 小时前
MySQL中的锁有哪些
数据库·mysql