文章目录
1.简介
- 应用广泛
- windows下载步骤
- Linux下载步骤
- 服务启动
- Linux
- 连接
- 停止进程 : ctrl +c
- 连接
- windows
- Linux
- 设置密码
-
Linux
-
1.
-
2.vim redis.config
-
3.输入i ,将requirepass 这一项那个注释取消
-
4.查找进程id
-
5.杀掉进程id
-
6.
-
默认跟上本地的服务
-
7.登录后,再认证密码
-
7.或者直接登录认证
-
-
windows
- windows连接虚拟机上面的redis
-
1.shift + 右键
-
2.修改redis配置,vim redis.config,注释bind
-
3.
-
- windows连接虚拟机上面的redis
-
2.数据类型
- ctrl + l 清屏
2.1 字符串
2.2哈希
2.3 列表
2.4 无序集合
- sdiff 差集,两个值的顺序不同,导致结果也不相同
2.5 无序集合
- zrange 的排列顺序是从小到大
2.6 通用命令
- keys * 查看所有key
3.java中使用redis
3.1 Jedis
-
1.创建maven项目
-
2.添加依赖
-
3.创建测试文件
-
4.启动redis
-
5.
-
6.开始测试
package com.redistest;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import java.util.Set;
/**
* 使用jedis操作Redis
*/
public class JedisTest {
/**
* Test method for Redis operations using Jedis client
* This test demonstrates basic CRUD operations with Redis
*/
@Test
public void test() {
//1.获取连接 (Get connection to Redis server)
Jedis jedis = new Jedis("localhost", 6379);
//2.执行具体操作 (Execute specific operations - setting a key-value pair)
jedis.set("username", "zhangsan");
//自己查询
String username = jedis.get("username");
System.out.println(username);
//哈希
jedis.hset("myhash", "name", "lisi");
String hValue = jedis.hget("myhash", "name");
System.out.println(hValue);
//获取所有的key
Set<String> keys = jedis.keys("*");
for (String key : keys) {
System.out.println(key);
}
//删除
// jedis.del("username");
//3.关闭连接 (Close the connection to Redis server)
jedis.close();
}
}
3.2 Spring Data Redis(常用)
和spring依赖
- 测试
1.启动类
2.redis配置
-
- 默认数据库为16个 select index查询是哪个数据库
- 测试类
package com.SDR.test;
import org.junit.Test;
import org.junit.runner.RunWith;
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.ValueOperations;
import org.springframework.test.context.junit4.SpringRunner;
// 1. 导入您的主启动类 App
import com.spring_boot_redis.App; // 这是新增的import语句
//@SpringBootTest //单独这个会报错 @SpringBootTest 注解会默认搜索一个带有 @SpringBootConfiguration 的类
// (通常就是 @SpringBootApplication 主类)来启动Spring容器。它搜索的规则是:从测试类所在的包开始,向上级目录递归查找,所以需要导入
// 2. 明确指定使用 App 类作为配置源
@SpringBootTest(classes = App.class) // 这是关键的修改
@RunWith(SpringRunner.class)//做单元测试
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;//由springboot框架自动装配,通过其获取operation的5种对象
@Test
public void testString(){
//k-v
// ValueOperations valueOperations = redisTemplate.opsForValue();
// valueOperations.set("name","张三");
redisTemplate.opsForValue().set("city","88888三");
}
}
- 那一串类似于乱码的内容是因为redisTemplate对获取的值做了序列化
- 解决办法:创建一个配置类,修改redisTemplate的序列化方法,然后在测试类里注入的redisTemplate就会修改为自己的配置类,value也会序列化,但是在get的时候会反序列化,所以不用修改
- 解决办法:创建一个配置类,修改redisTemplate的序列化方法,然后在测试类里注入的redisTemplate就会修改为自己的配置类,value也会序列化,但是在get的时候会反序列化,所以不用修改
- 测试
1.依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 添加Spring Boot Parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.4</version> <!-- 选择与Java 17兼容的版本 -->
<relativePath/> <!-- 从仓库查找,不从本地路径 -->
</parent>
<groupId>org.example</groupId>
<artifactId>redis-test</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- Spring Boot Web Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <!-- 无需版本号 -->
<!-- Spring Boot Data Redis Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency> <!-- 无需版本号 -->
<!-- Spring Boot Test Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency> <!-- 无需版本号 -->
</dependencies>
<build>
<plugins>
<!-- Spring Boot Maven插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
========================================================================================================================================================================================2.配置类
spring:
application:
name: spring-boot-redis
#redis相关配置
redis:
host: localhost
port: 6379
#password: 123456
database: 0 # 0号数据库
jedis:
#Redis连接池配置
pool:
max-active: 8 #最大连接数
max-idle: 8 #最大空闲连接数
min-idle: 0 #最小空闲连接数
max-wait: -1 #获取连接时的最大等待毫秒数,-1表示没有限制
========================================================================================================================================================================================
3.主启动类
package com.spring_boot_redis;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
========================================================================================================================================================================================
4.测试类
4.1 配置类RedisTemplate修改序列化器
package com.spring_boot_redis.config;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* 配置类
*
*/
@Configuration // 标记配置类
public class RedisConfig extends CachingConfigurerSupport {
@Bean//注解
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {//自动装配
RedisTemplate<String, Object> template = new RedisTemplate<>();
//默认的序列化器为:JdkSerializationRedisSerializer
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
4.2 测试
package com.SDR.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jackson.JacksonProperties;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.*;
import org.springframework.test.context.junit4.SpringRunner;
// 1. 导入您的主启动类 App
import com.spring_boot_redis.App; // 这是新增的import语句
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
//@SpringBootTest //单独这个会报错 @SpringBootTest 注解会默认搜索一个带有 @SpringBootConfiguration 的类
// (通常就是 @SpringBootApplication 主类)来启动Spring容器。它搜索的规则是:从测试类所在的包开始,向上级目录递归查找,所以需要导入
// 2. 明确指定使用 App 类作为配置源
@SpringBootTest(classes = App.class) // 这是关键的修改
@RunWith(SpringRunner.class)//做单元测试
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;//由springboot框架自动装配
/**
* 操作String类型数据
*/
@Test
public void testString(){
// ValueOperations valueOperations = redisTemplate.opsForValue();
// valueOperations.set("name","张三");
redisTemplate.opsForValue().set("city123","88888");
Object value = redisTemplate.opsForValue().get("city123");
System.out.println(value);
//设置过期时间
redisTemplate.opsForValue().set("key1","value1",10, TimeUnit.SECONDS);//时间单位
//
Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city123","12345");
System.out.println(aBoolean);
}
//////////////////////////////////////////////////////////////////
/**
* 操作哈希类型数据
*/
@Test
public void testHash(){
HashOperations hashOperations = redisTemplate.opsForHash();
//存值
hashOperations.put("002","name","张三");
hashOperations.put("002","age","18");
hashOperations.put("002","email","123456@qq.com");
//取值
Object name = (String)hashOperations.get("002", "name");
System.out.println(name);
//获得hash结构中的所有字段
Set keys = hashOperations.keys("002");
for (Object key : keys) {
System.out.println(key);
}
//获得hash结构中的所有值
List<Object> values = hashOperations.values("002");
for (Object value : values) {
System.out.println(value);
}
}
//////////////////////////////////////////////////////////////////
/**
* 操作list类型数据
*/
@Test
public void testList(){
ListOperations listOperations = redisTemplate.opsForList();
// //存值
listOperations.leftPush("mylist","a");
// listOperations.leftPush("mylist","b");
listOperations.leftPushAll("mylist","a","b","c");
//取值
List<String> mylist = listOperations.range("mylist", 0, -1);
for (String object : mylist) {
System.out.println(object);
}
//让它一个个获取,出队列
//获取长度
Long size = listOperations.size("mylist");
System.out.println(size);
for (int i = 0; i < size; i++) {
Object leftPop = listOperations.leftPop("mylist");
System.out.println(leftPop);
}
// //出队列
// Object rightPop = listOperations.rightPop("mylist");
// System.out.println(rightPop);
}
//////////////////////////////////////////////////////////////////
/**
* 操作set类型数据
*/
@Test
public void testSet(){
SetOperations setOperations = redisTemplate.opsForSet();
//存值
setOperations.add("myset","a","b","c","d");
//取值
Set<String> myset = setOperations.members("myset");
for (String s : myset) {
System.out.println(s);
}
//删除成员
Long myset1 = setOperations.remove("myset", "a", "b");
System.out.println(myset1);
}
//////////////////////////////////////////////////////////////////
/**
* 操作ZSet类型数据
*/
@Test
public void testZSet(){
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
//存值
zSetOperations.add("myZset","a",10.0);
zSetOperations.add("myZset","b",20.0);
zSetOperations.add("myZset","c",30.0);
zSetOperations.add("myZset","a",40.0);
//取值
Set<String> myZset = zSetOperations.range("myZset", 0, -1);
for (String s : myZset) {
System.out.println("1----"+s);
}
//修改分数
zSetOperations.incrementScore("myZset","b",10.0);//为指定的元素追加值
myZset = zSetOperations.range("myZset", 0, -1);
for (String s : myZset) {
System.out.println("2----"+s);
}
//删除成员
Long myZset1 = zSetOperations.remove("myZset", "a", "b");
System.out.println("----"+myZset1);
myZset = zSetOperations.range("myZset", 0, -1);
for (String s : myZset) {
System.out.println("3----"+s);
}
}
//////////////////////////////////////////////////////////////////
/**
* 通用操作
*
*/
@Test
public void testCommon(){
//获取redis中所有的key
Set<String> keys = redisTemplate.keys("*");
for (String key : keys) {
System.out.println(key);
}
//判断某个key是否存在
Boolean aBoolean = redisTemplate.hasKey("myZset");
System.out.println(aBoolean);
//删除指定的key
redisTemplate.delete("myZset");
//获取指定key对应的value的数据类型
DataType datatype = redisTemplate.type("mylist");
System.out.println(datatype.name());
}
}