🍁博客主页:👉 不会压弯的小飞侠
✨欢迎关注:👉点赞👍收藏⭐留言✒
✨系列专栏:👉 SpringBoot专栏(每日更新)
✨如果觉得博主的文章还不错的话,请三连支持一下博主。
🔥欢迎大佬指正,一起 学习!一起加油!
🍁NoSQL解决方案
常见的NoSQL解决方案
- Redis
- MongoES
- 说明:上述技术通常在Linux系统中安装部署,本篇基于Windows版安装所有的软件。
🍁Redis简介
Redis是一款key-value存储结构的内存级NoSQL数据库
- 支持多种数据存储格式
- 支持持久化
- 支持集群
🍁Redis的安装
- windows下安装
- 下载连接:点击下载
- 解压
- 打开解压后的文件,在搜索框搜索cmd,并打开
- 输入命令:redis-server.exe ,启动失败。
- 输入命令:redis-windows.conf ,还是启动失败。
- 再次打开cmd
输入以下命令
redis-cli
shutdwn
exit
- 输入启动命令:redis-windows.conf 启动成功。
🍁Redis基本命令
String类型的命令
set key value 设置数据,如果key存在就覆盖
get key 获取key对应的值
hash类型的命令
hset key filed value 设置filed字段的value
hget key filed 获取filed字段的value
nil 表示为空
clear 清屏
key* 获取所有的key
🍁SpringBoot整合Redis
- 新建一个Springboot项目,这里就不过多描述,专栏里都有详细的教程。
⭐⭐⭐注意:导入相关依赖,勾上之后,springboot会自动导入所需的依赖。
redis依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
RedisTemplate提供操作各种数据存储类型的接口API
🍁测试:
package com.jkj;
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.ValueOperations;
@SpringBootTest
class Springboot10RedisApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
void set(){
ValueOperations ops = redisTemplate.opsForValue();
ops.set("name","rc");
}
@Test
void get() {
ValueOperations ops = redisTemplate.opsForValue();
Object value = ops.get("name");
System.out.println(value);
}
}
🍁获取hash值
package com.jkj;
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.ValueOperations;
@SpringBootTest
class Springboot10RedisApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
void hset(){
HashOperations hash = redisTemplate.opsForHash();
hash.put("person","name","xfx");
hash.put("person","name1","xmg");
}
@Test
void hget() {
HashOperations hash = redisTemplate.opsForHash();
Object o = hash.get("person", "name");
System.out.println(o);
}
}
🍁与Redis客户端操作等效
StringRedisTemplate以字符串作为key和value
🍁测试:
package com.jkj;
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.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
@SpringBootTest
public class StringRedisApplication {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
void get(){
ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
String name = ops.get("name");
System.out.println(name);
}
}
🍁验证是否等效
- 先修改一下name的值
🍁运行测试
🍁jedis技术
- 导入依赖
<dependency>
<groupId>redis.clients</ groupId>
<artifactId>jedis</artifactId>
</dependency>
- 配置客户端属性
spring:
redis:
host: localhost
port: 6379
client-type: jedis
- 配置客户端专用属性
spring:
redis:
host: localhost
port: 6379
client-type: lettucelettuce:
pool:
max-active: 16
jedis:
pool:
max-active: 16
lettcus与jedis区别
- jedis连接Redis服务器是直连模式,当多线程模式下使用jedis会存在线程安全问题,解决方案可以通过配置连接池使每个连接专用,这样整体性能就大受影响。
- lettcus基于Netty框架进行与Redis服务器连接,底层设计中采用StatefulRedisConnection。
- StatefulRedisConnection自身是线程安全的,可以保障并发访问安全问题,所以一个连接可以被多线程复用,lettcus也支持多连接实例一起工作。