Redis

1.简介

在这里插入图片描述

  • 应用广泛
  • 在这里插入图片描述
  • 在这里插入图片描述
  • windows下载步骤
  • Linux下载步骤在这里插入图片描述
  • 服务启动
    • Linux在这里插入图片描述
      • 连接 在这里插入图片描述在这里插入图片描述查看数据
      • 停止进程 : ctrl +c
    • windows在这里插入图片描述
      在这里插入图片描述
  • 设置密码
    • 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.在这里插入图片描述

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查询是哪个数据库
  1. 测试类
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的时候会反序列化,所以不用修改在这里插入图片描述在这里插入图片描述
  • 测试
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());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值