Redis 的安装与使用;SpringBoot 整合 Redis 代码示例

Redis 的安装与使用;SpringBoot 整合 Redis 代码示例

- 此篇博客中是以 Redis 做数据库用,Redis 做缓存用请参照SpringBoot 整合缓存 Redis 代码详解这篇博客;
- 以Windows环境为例:
  • 下载 redis:
    https://github.com/tporadowski/redis/releases;
    可以下载安装版本和免安装版本。
    在这里插入图片描述
  • 这里以免安装版本为例:打开 redis 的根目录:
    在这里插入图片描述
  • 编辑配置文件:redis.windows.conf:
    在这里插入图片描述
  • 设置连接 redis 服务器的密码为:hd123:
    在这里插入图片描述
  • 启动 redis 服务端:
    在这里插入图片描述
  • 使用 redis 客户端连接服务端:
    在这里插入图片描述
  • 通过 cmd 界面使用 redis:
    在这里插入图片描述
  • set 方法是用来操作字符串的方法,hset 是操作 redis 哈希(Hash) 的方法,redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
- 编程方式使用 redis:
  • 添加 redis 相关依赖:
<!--redis的依赖spring-boot-starter-data-redis-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<!--以下不是redis相关了-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
  • 配置 yml:
spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password: hd123
  • 测试代码如下,依次执行setStringRedisTemplate、getStringRedisTemplate、setRedisTemplate、getRedisTemplate:
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.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;

@SpringBootTest
public class SpringBootRedisTest {
    
    

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void setStringRedisTemplate() {
    
    
        ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
        ops.set("code_name", "code_redis");
    }

    @Test
    void getStringRedisTemplate() {
    
    
        ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
        System.out.println(ops.get("name"));
        // 输出为:redis
        System.out.println(ops.get("code_name"));
        // 输出为:code_redis
    }

    @Test
    void setRedisTemplate() {
    
    
        HashOperations ops = redisTemplate.opsForHash();
        ops.put("code_info", "code_name", "code_info_redis");

    }

    @Test
    void getRedisTemplate() {
    
    
        HashOperations ops = redisTemplate.opsForHash();
        System.out.println(ops.get("info", "name"));
        // 输出为:null
        System.out.println(ops.get("code_info", "code_name"));
        // 输出为:code_info_redis
    }

}
  • cmd 界面 set() 方法和 opsForValue().set() 方法操作的是同一个字符串;但 cmd 界面的 hset() 和 opsForHash().set() 方法操作的不是同一个 Hash,所以 System.out.println(ops.get(“info”, “name”)); 输出为 null,同理通过 cmd 命令查询 hget code_info code_name 返回的结果也为 nil 。
    在这里插入图片描述
- 修改 redis 默认客户端:默认使用 lettuce。

在这里插入图片描述

  • jedis 和 lettuce 对比:
    1、jedis 连接 redis 服务器是直连模式,当多线程模式下使用 jedis 会存在线程安全问题,解决方案可以通过配置连接池使每个连接专用,但这样整体性能大受影响。
    2、lettuce 基于 Netty 框架进行与 redis 服务器连接,底层设计中采用 StatefulRedisConnection,StatefulRedisConnection 自身是线程安全的,可以保障并发访问线程安全问题,所以一个连接可被多个线程复用。当然 lettuce 也支持多连接实例一起工作。

猜你喜欢

转载自blog.csdn.net/qq_38132105/article/details/125956631
今日推荐