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>
相关推荐
m0_7482393316 分钟前
【MySQL】深度学习数据库开发技术:使用CC++语言访问数据库
数据库·mysql·数据库开发
S-X-S24 分钟前
Java面试题-Redis缓存
java·redis·缓存
A__tao1 小时前
在线SQL转xorm struct-GO在线工具集
数据库·sql·golang
天才奇男子1 小时前
数据库约束(2)
android·数据库·mysql·adb
追寻落在生命里的那道光1 小时前
Oracle数据连接 Dblink
数据库·oracle
XiaoLeisj2 小时前
【MySQL — 数据库基础】深入解析MySQL的聚合查询
数据库·mysql
小姚要加油!2 小时前
数据库创库建表处理
大数据·数据库
卓怡学长2 小时前
w200基于spring boot的个人博客系统的设计与实现
java·数据库·spring boot·后端·spring·intellij-idea
*老工具人了*2 小时前
管理etcd的存储空间配额
数据库·chrome·etcd
饮长安千年月2 小时前
CVE-2024-13025-Codezips 大学管理系统 faculty.php sql 注入分析及拓展
开发语言·数据库·sql·网络安全·php