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>
相关推荐
芝士爱知识a30 分钟前
【FinTech前沿】AlphaGBM:重塑期权交易的智能分析引擎——从原理到实践
数据结构·数据库·人工智能·alphagbm·期权
AC赳赳老秦30 分钟前
2026主权AI趋势:DeepSeek搭建企业自有可控AI环境,保障数据安全实战
大数据·数据库·人工智能·python·科技·rabbitmq·deepseek
仍然.33 分钟前
MYSQL---事务
数据库·mysql
king_harry38 分钟前
openGauss 6.0 主备集群备份与恢复实战指南:基于 gs_probackup
数据库·opengauss·gs_probackup
ruxshui1 小时前
MySQL备份核心指南
数据库·mysql
PD我是你的真爱粉1 小时前
Redis持久化、内存管理、慢查询与发布订阅
redis·python·mybatis
霖霖总总1 小时前
[小技巧73]MySQL UUID 全面解析:UUID 的原理、结构与最佳实践
数据库·mysql
tod1132 小时前
Redis C++ 客户端开发全流程指南
数据库·c++·redis·缓存
w_t_y_y2 小时前
MySQL原理(三)锁定机制(4)常见的行锁行为&影响哪些操作&对DB的影响
数据库
沧澜sincerely2 小时前
组合查询(UNION)
数据库·union·union all