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>
相关推荐
大白的编程日记.1 分钟前
【MySQL】数据库表的CURD(二)
android·数据库·mysql
ajsbxi7 分钟前
【Redis】缓存读/写操作流程
redis·笔记·spring·缓存·bootstrap
友善的鸡蛋22 分钟前
项目中执行SQL报错oracle.jdbc.OracleDatabaseException: ORA-00942: 表或视图不存在
数据库·sql·oracle
The best are water25 分钟前
jeesite mybatis添加拦截器,推送指定表的变更数据到其他数据库
数据库·mybatis
api_1800790546041 分钟前
异步数据采集实践:用 Python/Node.js 构建高并发淘宝商品 API 调用引擎
大数据·开发语言·数据库·数据挖掘·node.js
怕什么真理无穷1 小时前
mysql server 9.4 windows安装教程(sqlyog 下载)
数据库
Olrookie1 小时前
MySQL运维常用SQL
运维·数据库·sql·mysql·dba
数据库生产实战1 小时前
ORACLE 19C ADG环境 如何快速删除1.8TB的分区表?有哪些注意事项?
数据库·oracle
blackorbird1 小时前
使用 Overpass Turbo 查找监控摄像头
运维·服务器·数据库·windows
IT永勇2 小时前
SQLite数据库基本操作
数据库·sqlite·嵌入式开发·增删改查·关系型数据库