Redis入门到实战教程(基础篇)笔记

news2024/12/30 2:59:58

教学来源: 

Redis课程介绍导学_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1cr4y1671t?p=1一、Redis 入门

1.认识NoSQL

2.Redis在虚拟机中的安装和开机自启

Redis在虚拟机中安装和配置开机自启-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_69183322/article/details/138168301

3.Redis的数据结构

4.Redis的基本类型

(1) 字符串String类型

(2)哈希Hash类型

(3) 列表List类型

(4)集合Set类型

(5)有序集合类型

二、Redis的Java客户端Jedis

(1)Jedis简单示例

引入依赖:

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.7.0</version>
        </dependency>

代码示例:

package com.example.redisdemo;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import redis.clients.jedis.Jedis;

import java.util.Map;

@SpringBootTest
class RedisDemoApplicationTests {

    private Jedis jedis;

   @BeforeEach
    void setUp(){
       jedis = new Jedis("localhost",6379);
//密码
//       jedis.auth("123");
       jedis.select(0);
   }

   @Test
    void testString(){
       String result  = jedis.set("name","张四");
       System.out.println("result="+result);

       String name = jedis.get("name");
       System.out.println("name="+name);
   }

   @Test
   void testHash(){
       jedis.hset("user:1","name","Jack");
       jedis.hset("user:1","age","21");

       Map<String,String> map = jedis.hgetAll("user:1");

       System.out.println(map);
   }

   @AfterEach
    void tearDown(){
       if(jedis !=null){
           jedis.close();
       }
   }

}

(2)Jedis连接池

在utils中写Jedis连接池的配置:

package com.example.redisdemo.utils;

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 poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(8);
        poolConfig.setMaxIdle(8);
        poolConfig.setMaxIdle(0);
        poolConfig.setMaxWaitMillis(1000);

        jedisPool = new JedisPool(poolConfig,"192.168.92.136",6379,1000,"123456");
    }

    public static Jedis getJedis(){
        return jedisPool.getResource();
    }
}

在test中进行测试:

package com.example.redisdemo;

import com.example.redisdemo.utils.JedisConnectionFactory;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import redis.clients.jedis.Jedis;

import java.util.Map;

@SpringBootTest
class RedisDemoApplicationTests {

    private Jedis jedis;

   @BeforeEach
    void setUp(){
//       jedis = new Jedis("192.168.92.136",6379);
       jedis = JedisConnectionFactory.getJedis();
       jedis.auth("123456");
       jedis.select(0);
   }

   @Test
    void testString(){
       String result  = jedis.set("name","张四");
       System.out.println("result="+result);

       String name = jedis.get("name");
       System.out.println("name="+name);
   }

   @Test
   void testHash(){
       jedis.hset("user:1","name","Jack");
       jedis.hset("user:1","age","21");

       Map<String,String> map = jedis.hgetAll("user:1");

       System.out.println(map);
   }

   @AfterEach
    void tearDown(){
       if(jedis !=null){
           jedis.close();
       }
   }

}

三、SpringDataRedis

 (1)快速入门实例:

1.引入依赖

        <!--        Redis依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
<!--        连接池依赖-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

 2.在application.yml中进行配置

server:
  port: 8080

spring:
  redis:
    host: 192.168.92.136
    port: 6379
    password: 123456
    lettuce:
      pool:
        max-active: 8 #最大连接
        max-idle: 8 #最大空闲连接
        min-idle: 0 #最小空闲连接
        max-wait: 100 #连接等待时间

3.Test中编写示例

package com.example.redisdemo;

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;

@SpringBootTest
class RedisDemoApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void testString(){
        redisTemplate.opsForValue().set("name","小龙");
        Object name = redisTemplate.opsForValue().get("name");
        System.out.println("name="+name);
    }

}

(2)RedisTemplate序列化

配置序列化 config.RedisConfig

package com.example.redisdemo.config;

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.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;

@Configuration
public class RedisConfig {

   @Bean
    public  RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){

       RedisTemplate<String,Object> template = new RedisTemplate<>();
       //设置连接工厂
       template.setConnectionFactory(connectionFactory);
       //创建Json序列化工具
       GenericJackson2JsonRedisSerializer jsonRedisSerializer =new GenericJackson2JsonRedisSerializer();
       //设置Key的序列化
       template.setKeySerializer(RedisSerializer.string());
       template.setHashKeySerializer(RedisSerializer.string());
       //设置Value的序列化
       template.setValueSerializer(jsonRedisSerializer);
       template.setHashValueSerializer(jsonRedisSerializer);

       return template;
   }

}

创建实体 pojo.User

package com.example.redisdemo.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private Integer age;
}

在Test中编写测试用例

package com.example.redisdemo;

import com.example.redisdemo.pojo.User;
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;

@SpringBootTest
class RedisDemoApplicationTests {

    @Autowired
    private RedisTemplate<String,Object> redisTemplate;

    @Test
    void testString(){
        redisTemplate.opsForValue().set("name","小龙");
        Object name = redisTemplate.opsForValue().get("name");
        System.out.println("name="+name);
    }

    @Test
    void testSaveUser(){
        redisTemplate.opsForValue().set("user:100",new User("小虎",21));
        User user = (User) redisTemplate.opsForValue().get("user:100");
        System.out.println("user="+user);
    }


}

报错可能没有引入Jackson依赖

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

(3)序列化的另一种方式StringRedisTemplate

示例代码:

package com.example.redisdemo;

import com.example.redisdemo.pojo.User;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
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;

import java.util.Map;

@SpringBootTest
class RedisDemoApplicationTests {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    //Json工具
    private static final ObjectMapper mapper = new ObjectMapper();

    @Test
    void testStringTemplate() throws JsonProcessingException{
        User user = new User("小明",20);
        //手动序列化
        String json = mapper.writeValueAsString(user);

        stringRedisTemplate.opsForValue().set("user:200",json);

        String val = stringRedisTemplate.opsForValue().get("user:200");
        //反序列化
        User user1 = mapper.readValue(val, User.class);
        System.out.println("user1:"+user1);
    }

    @Test
    void testHash(){
        stringRedisTemplate.opsForHash().put("user:400","name","小胡");
        stringRedisTemplate.opsForHash().put("user:400","age","21");
        
        Map<Object,Object> entries = stringRedisTemplate.opsForHash().entries("user:400");
        System.out.println("entries:"+entries);
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1626880.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣37题:回溯算法之解数独

编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#xff09; 数独部分空…

每日一题(力扣45):跳跃游戏2--贪心

由于题目已经告诉了我们一定可以跳到&#xff0c;所以我们只需去考虑前进最快的方法。即 判断当前下一步能跳的各个位置中&#xff0c;哪个能带你去去向最远的地方&#xff08;why&#xff1f; 因为其他位置所能提供的最大范围都没最远那个大&#xff0c;所以最远的那个已经可以…

【元启发式算法】学生心理学优化算法 SPBO算法【Matlab代码#88】

文章目录 【获取资源请见文章第4节&#xff1a;资源获取】1. 学生心理学优化算法&#xff08;SPBO&#xff09;1.1 最好的学生1.2 次好的学生1.3 一般的学生1.4 随机提高成绩的学生 2. 部分代码展示3. 仿真结果展示4. 资源获取说明 【获取资源请见文章第4节&#xff1a;资源获取…

VTK----VTK数据结构详解3(代码篇)

上篇文章&#xff08;VTK----VTK数据结构详解&#xff08;计算机篇&#xff09;-CSDN博客&#xff09;从计算机数据结构&#xff08;数组、链表等&#xff09;的角度对数据数组、数据对象、数据属性的实现原理进行了说明&#xff0c;下面从代码的层面详细说明它们的使用及相关实…

【Leetcode笔记】501.二叉搜索树中的众数

文章目录 题目要求ACM 模式代码知识点 题目要求 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。 如果树中有不止一个众数&#xff0c;可以按 …

智能合约——提案demo

目录 这是一个超超超级简单的智能合约提案项目&#xff0c;你确定不点进来看一下吗&#xff1f; 引言&#xff1a; 1、搭建开发环境&#xff1a; 2、编写智能合约&#xff1a; 3、部署智能合约&#xff1a; ​编辑​编辑4、编写前端交互代码&#xff08;使用web3.js&…

MySQL中的Performance Schema是什么?

MySQL中的Performance Schema是什么&#xff1f; Performance Schema 是 MySQL 的一个特性&#xff0c;主要用于监控 MySQL 服务器在运行时的性能和资源使用情况。它首次引入于 MySQL 5.5 版本&#xff0c;并在后续版本中得到增强。Performance Schema 提供了一种方式来收集数…

PID算法学习

PID算法介绍 在过程控制中&#xff0c;按偏差的比例&#xff08;P&#xff09;、积分&#xff08;I&#xff09;和微分&#xff08;D&#xff09;进行控制的PID控制器&#xff08;亦称PID调节器&#xff09;是应用最为广泛的一种自动控制器。它具有原理简单&#xff0c;易于实…

某会员商店App的api接口分析

1、目的 探索学习app接口的加解密机制&#xff0c;并通过api模拟调用的方式&#xff0c;发起业务请求。仅供学习。 2、工具准备 样本App版本&#xff1a;v5.0.80&#xff0c;v5.0.90 设备&#xff1a;Oppo R9s&#xff08;Android7.1.1&#xff09; MacOS Big Sur&#xff…

基于Spring Boot的口腔管理平台设计与实现

基于Spring Boot的口腔管理平台设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 管理员登录界面图&#xff0c;管理员登录进入口腔管理平…

基于JAVA实现的推箱子小游戏

Java推箱子小游戏实现&#xff1a; 推箱子小游戏曾经在我们的童年给我们带来了很多乐趣。推箱子这款游戏现在基本上没人玩了&#xff0c;甚至在新一代人的印象中都已毫无记忆了。。。但是&#xff0c;这款游戏可以在一定程度上锻炼自己的编程能力。 窗口画面设计&#xff1a;i…

鸿蒙OpenHarmony【轻量系统 编译】 (基于Hi3861开发板)

编译 OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式&#xff0c;build.sh脚本编译方式请参考[使用build.sh脚本编译源码]。 使用build.sh脚本编译源码 进入源码根目录&#xff0c;执行如下命令进行版本编译。 ./build.sh --product-name name --ccache 说明&…

今日arXiv最热大模型论文:大模型也来看球,还能判断是否犯规

在足球世界&#xff0c;裁判的哨声可谓“千金难买”&#xff0c;因为它能直接决定俱乐部的钱包是鼓是瘪。但球场变化莫测&#xff0c;非常考验裁判的水平。 2022年卡塔尔世界杯上&#xff0c;半自动越位识别技术&#xff08;SAOT&#xff09;闪亮登场&#xff0c;通过12台摄像…

Rabbitmq安装延迟插件rabbitmq_delayed_message_exchange失败

Docker里的Rabbitmq容器安装延迟插件rabbitmq_delayed_message_exchange失败 一启动插件Rabbitmq容器直接停止运行了 rabbitmq-plugins enable rabbitmq_delayed_message_exchange排除了版本问题和端口问题等&#xff0c;发现是虚拟机运行内存不够&#xff0c;增加虚拟机运行内…

游戏新手村18:游戏广告渠道与广告形式

上文我们说到&#xff0c;渠道为王&#xff0c;渠道可以为我们带来流量和用户&#xff0c;进而带来收入。我们可以通过哪些渠道导入用户呢&#xff1f;每个渠道有哪些优劣呢&#xff1f;在进行游戏营销推广的时候我们该如何选择呢&#xff1f; 根据付费性质&#xff0c;我们可…

Dbeaver客户端安装和使用

数据库管理软件&#xff08;DBMS&#xff09;&#xff1a; • 数据是数据库中存储的基本对象&#xff0c;种类包括文字、图形、图像、声音等等 • 数据库&#xff08;database&#xff09;是以某种有组织的方式存储的数据集合&#xff0c;保存有组织的数据的容器&#xff0c;通…

【C语言必刷题】7. 百钱百鸡

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…

大模型_ ChatGLM-Med推理及微调部署

文章目录 ChatGLM-Med是什么数据集构建推理部署python环境切换到安装好的conda环境下载github数据切换目录在infer.py修改模型路径启动推理解决infer.py报错修改后再次启动推理完成 微调部署安装evaluate包修改模型路径启动微调 ChatGLM-Med是什么 经过中文医学指令精调/指令微…

echarts地图叠加百度地图底板实现数据可视化

这里写自定义目录标题 echarts地图叠加百度地图实现数据可视化echarts地图叠加百度地图实现数据可视化 实现数据可视化时,个别情况下需要在地图上实现数据的可视化,echarts加载geojson数据可以实现以地图形式展示数据,例如分层设色或者鼠标hover展示指标值,但如果要将echa…

国产麒麟系统下打包electron+vue项目(AppImage、deb)

需要用到的一些依赖包、安装包以及更详细的打包方法word以及麒麟官网给出的文档都已放网盘&#xff0c;链接在文章最后&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&a…