Redis学习基础篇

news2024/11/20 14:33:50

目录

初识Redis

认识NoSQL

关联的 

 非关联的​编辑

 认识Redis

安装Redis

1.1.安装Redis依赖

1.2.上传安装包并解压

该目录以及默认配置到环境变量,因此可以在任意目录下运行这些命令。其中:

图形化工具下载:Releases · lework/RedisDesktopManager-Windows · GitHub

 Redis数据结构介绍

 String类型

 String类型的常见命令

思考:

Redis没有类似MySQL中的Table的概念,我们该如何区分不同类型的key呢?

例如,需要存储用户、商品信息到redis,有一个用户的id是1,有一个商品id恰好也是1

key的机构

 Hash类型

 Hash类型常见命令

 List类型

 List常用命令​编辑

 思考:

1、如何利用List结构模拟一个栈?

2、如何利用List结构模拟一个队列?

3、如何利用List结构模拟一个阻塞队列?

Set类型

 Set常见命令​编辑

SortedSet类型

 SortedSet常见命令​编辑

Jedis连接池

SpringDataRedis

SpringDataRedis的序列化方式方案一:

SpringDataRedis的序列化方式方案二:

StringRedisTemplate序列化


初识Redis

认识NoSQL

关联的 

 非关联的

 认识Redis

安装Redis

大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis.

此处选择的Linux版本为CentOS 7.

Redis的官方网站地址:https://redis.io/

1.1.安装Redis依赖

Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖:

yum install -y gcc tcl

1.2.上传安装包并解压

然后将提供的Redis安装包上传到虚拟机的任意目录:

 例如,我放到了/usr/local/src 目录:(如果上传不了就切换root连接)

 解压缩:

tar -xzf redis-6.2.6.tar.gz

进入redis目录:

cd redis-6.2.6

运行编译命令:

make && make install

如果没有出错,应该就安装成功了。

默认安装地方

该目录以及默认配置到环境变量,因此可以在任意目录下运行这些命令。其中:

  • redis-cli:是redis提供的命令行客户端

  • redis-server:是redis的服务端启动脚本

  • redis-sentinel:是redis的哨兵启动脚本

图形化工具下载:Releases · lework/RedisDesktopManager-Windows · GitHub

 

 

 Redis数据结构介绍

 

 String类型

 String类型的常见命令

 

 

 

思考:

Redis没有类似MySQL中的Table的概念,我们该如何区分不同类型的key呢?

例如,需要存储用户、商品信息到redis,有一个用户的id是1,有一个商品id恰好也是1

key的机构

 

  

 Hash类型

 Hash类型常见命令

 

 

 

 

 List类型

 List常用命令

     

 思考:

1、如何利用List结构模拟一个栈?

入口和出口在同一边

2、如何利用List结构模拟一个队列?

入口和出口在不同边

3、如何利用List结构模拟一个阻塞队列?

入口和出口在不同边

出队时采用BLPOP或BRPOP

Set类型

 Set常见命令

 

SortedSet类型

 SortedSet常见命令

 

 

Redis的Java客户端

 1、引入依赖

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

2、建立连接

  @BeforeEach
    void setUp(){
//        1、建立连接
        jedis = new Jedis("虚拟机地址或者localhost", 6379);
//        2、设置密码
        jedis.auth("密码");
//        3、选择库
        jedis.select(0);
    }

3、测试Steing

    @Test
    void testString(){
//        存入数据
        String result = jedis.set("name", "虎哥");
        System.out.println("result="+result);
//        获取数据
        String name = jedis.get("name");
        System.out.println("name = "+name);
    }

4、释放资源

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

 Jedis连接池


public class JedisConnectionFactory {
    private static final JedisPool jedispPool;
    static {
        //配置连接词
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(8);
        poolConfig.setMaxIdle(8);
        poolConfig.setMinIdle(0);
        poolConfig.setMaxWaitMillis(1000);
        //创建连接池对象
        jedispPool = new JedisPool(poolConfig,
                "虚拟机或者localhost",6379,1000,"密码");


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

SpringDataRedis

 

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、配置yml文件

spring:
  redis:
    host: 虚拟机或者localhost
    port: 6379
    password:密码
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: 100ms

3、注入代码

package com.heima;

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 contextLoads() {
        //写入一条string数据
        redisTemplate.opsForValue().set("name","虎哥");
        //获取string数据
        Object name = redisTemplate.opsForValue().get("name");
        System.out.println(name);
    }

}

 SpringDataRedis的序列化方式方案一:

 

 引入依赖

<!--        JACKSON依赖-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){
        //创建RedisTemplate对象
        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;
    }

}

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String name;
    private Integer age;
}
package com.heima;

import com.heima.redis.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 contextLoads() {
        //写入一条string数据
        redisTemplate.opsForValue().set("name","虎哥");
        //获取string数据
        Object name = redisTemplate.opsForValue().get("name");
        System.out.println(name);
    }

    @Test
    void testSaveUser(){
//        写入数据
        redisTemplate.opsForValue().set("user:100",new User("虎哥",31));
//    获取数据
        User o = (User)redisTemplate.opsForValue().get("user:100");
        System.out.println(" o = "+o);
    }

}

SpringDataRedis的序列化方式方案二:

StringRedisTemplate序列化

 

 

 

package com.heima;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.heima.redis.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;
import org.springframework.data.redis.core.StringRedisTemplate;

@SpringBootTest
class RedisStringTests {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    void contextLoads() {
        //写入一条string数据
        stringRedisTemplate.opsForValue().set("name","虎哥");
        //获取string数据
        Object name = stringRedisTemplate.opsForValue().get("name");
        System.out.println(name);
    }

    private static final ObjectMapper mapper = new ObjectMapper();
    @Test
    void testSaveUser() throws JsonProcessingException {
        //创建对象
        User user = new User("虎哥", 21);
//        手动序列化
        String json = mapper.writeValueAsString(user);
//        导入数据
        stringRedisTemplate.opsForValue().set("user:200",json);
//        获取数据
        String jsonUser = stringRedisTemplate.opsForValue().get("user:200");
//        手动反序列化
        User user1 = mapper.readValue(jsonUser, User.class);
        System.out.println("user1 = "+user1);

    }

}

 

 

 

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

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

相关文章

什么是 CSR,SSR,SSG 渲染

在Web开发中&#xff0c;网页渲染是一个重要的过程&#xff0c;它关系到网页的渲染速度和SEO排名&#xff0c;下面列举三种常见的网页渲染方式。 一、什么是浏览器端渲染 (CSR) CSR&#xff08;Client-Side Rendering&#xff09;是指将网页的内容生成和渲染都放在客户端&…

什么是真正的骨传导耳机,介绍几款高性价比的骨传导耳机

随着越来越多的人喜欢户外运动&#xff0c;骨传导耳机也逐渐被人们所熟知。骨传导耳机是通过颅骨和内耳传递声音到听觉中枢&#xff0c;所以听感相对较好&#xff0c;不会对耳朵造成任何损伤&#xff0c;因此在户外运动中使用骨传导耳机是一个很好的选择。接下来我会给大家介绍…

弟弟高考考了673分姐姐哭了一小时,大V竟然说是悲哀

大家好&#xff01;我是老洪。 6月23日起&#xff0c;全国各地高考分数线陆续公布中&#xff0c;老洪也一直在关注着。 时常看到有一些分享高考成绩的话题出现在热搜榜上。 比如老洪昨天提到的 女生高考712分查完分就睡觉了 复读女生涨61分坐地嚎啕大哭 女生发烧考618分挨个房间…

Linux——FTP文件传输服务

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。座右铭&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石&#xff0c;故能成其高。 个人主页&#xff1a;小李会科技的…

音视频BUG学习

找Bug流程 1、首先看出现概率是偶现还是必现 2、如果是必现&#xff0c;则复现整个bug过程&#xff0c;看Bug是否出现 如果是偶现&#xff0c;则分析问题视频 3、 问题一 【欧立】【远程抓拍】安卓-远程抓拍的视频&#xff0c;下载到手机本地相册&#xff0c;声音慢放 一、额…

【前端笔记】如何更新项目依赖

Node 软件包管理器&#xff08;NPM&#xff09;提供了各种功能来帮助你安装和维护项目的依赖关系。 由于错误修复、新功能和其他更新&#xff0c;依赖关系可能会随着时间的推移而变得过时。你的项目依赖越多&#xff0c;就越难跟上这些更新。 有时&#xff0c;新的软件包并不…

vm安装使用centos-7安装linux

1. 安装源&#xff0c;选择默认 2. 将网络和主机名&#xff08;以太网&#xff09;打开 3. 设置DHCP的租约 注&#xff1a;如果修改不了那么点击更改设置即可 4. 服务端口号&#xff1a;22 5. 常见报错以及解决方法 6. 安装目录 7. ip位置 8. 换源步骤&#xff08;乌班图的版…

machine code中的条件控制control flow和switch语句,循环Loop

上篇写了machine code基本知识概念&#xff0c;这篇再总结一下其中的流控制、条件判断&#xff0c;循环等实现。 一段machine code引出 在machine code中&#xff0c;通场使用jmp指令来跳转到某个代码块。比如一个机器码可能长这样&#xff1a; decision:subq $8, %rsptestl…

Synchronized锁

概览 锁的实现基于对象头重的MarkWord&#xff0c;分为 无锁 -> 偏向锁 -> 轻量锁 -> 重量锁 四个状态 状态转换 锁的获取与释放 模型&#xff1a; Markword&#xff1a;指向Monitor的指针Monitor&#xff1a;_cxq&#xff0c;_EntryList,_WaitSet,owner,_recurs…

提高透明LED屏幕显示效果设计指南

设计透明LED屏幕时&#xff0c;可以考虑以下几个因素来提高显示效果&#xff1a; 透明度和亮度&#xff1a;透明LED屏幕的设计目标是实现高透明度和足够的亮度。透明度取决于使用的材料和LED的布局方式。选择高透明度的材料&#xff0c;并确保LED的亮度足够高&#xff0c;以确保…

写给毕业季的学生们|我的五次 offer 选择经历

最近临近毕业季&#xff0c;群里有好多朋友在问面试和 offer 选择的问题&#xff0c;我分享下我过往的相关经历&#xff0c;希望能给各位朋友有所启发。 我是谁&#xff1f; 大家好&#xff0c;我是拭心&#xff0c;内蒙古人&#xff0c;16 年本科毕业于西安电子科技大学&#…

AWTK学习笔记

编译&#xff1a;scons 运行&#xff1a;.\bin\demo.exe xml文件存放在工程的design\default\ui文件夹内 c文件存放在工程的src文件夹内 如果代码没有指定修改&#xff0c;默认按照AWTK Designer设置的控件属性动作运行 API函数查看使用说明&#xff1a;https://awtk.zlg.cn/ap…

Pytorch ----注意力机制与自注意力机制的代码详解与使用

注意力机制的核心重点就是让网络关注到它更需要关注的地方 。 当我们使用卷积神经网络去处理图片的时候&#xff0c; 我们会更希望卷积神经网络去注意应该注意的地方&#xff0c;而不是什么都关注 &#xff0c;我们不可能手动去调节需要注意的地方&#xff0c;这个时候&#x…

centos 7.9离线下载安装vscode,以及插件安装下载

文章目录 一、软件的下载1.采取的方法2.下载相应压缩包3.安装过程4.相关知识 二、插件的安装和下载1.查看vscode的版本号2.查找插件的版本号3.安装vscode插件 三、vscode以及依赖安装包&#xff0c;常用插件百度云&#xff1a; 一、软件的下载 1.采取的方法 从一台联网的cento…

SpringBoot2概览-开发实用篇

知识点 热部署 概念&#xff1a;项目刚启动时需要完成重启重载&#xff0c;而热部署只要重启即可(即仅加载当前开发者自定义开发的资源&#xff0c;不加载jar资源) 重启&#xff1a;加载自定义开发代码&#xff0c;包含类、页面、配置文件等&#xff0c;加载位置在restart类加载…

springboot项目如何将配置文件外挂

为什么要将配置文件外挂 因为springboot项目一般打出来的是jar包&#xff0c;如果要对里面的配置做修改&#xff0c;会比较麻烦&#xff0c;所以需要将配置文件外挂&#xff0c;方便操作哦 怎么做呢 我们先看一个常见的springboot项目的配置文件结构&#xff1a; 分为四个配…

InnoDB的三种行锁(提供具体sql执行案例分析)

InnoDB存储引擎有3种行锁的算法&#xff0c;其分别是&#xff1a; Record Lock&#xff08;记录锁&#xff09;&#xff1a;单个行记录上的范围 (锁住某一行记录)Gap Lock&#xff08;间隙锁&#xff09;&#xff1a;间隙锁&#xff0c;锁定一个范围&#xff0c;但不包含记录本…

十大公认音质好的骨传导耳机,几款音质排行靠前的骨传导耳机

骨传导耳机是通过头部骨迷路传递声音&#xff0c;而不是直接通过耳膜的振动来传递声音。与传统的入耳式耳机相比&#xff0c;骨传导耳机不会堵耳朵&#xff0c;在跑步、骑车等运动时可以更好的接收外界环境音&#xff0c;保护听力&#xff0c;提升安全性。此外&#xff0c;骨传…

Canvas基本使用

1.canvas基本使用 1.1.说明&#xff1a; canvas是双标签,h5中新增的属性默认宽高为300*150浏览器默认canvas展示的是一张图片给canvas添加文字内容是没有任何意义的canvas画布&#xff1a;绘制图形&#xff0c;显示一个文字&#xff0c;必须通过js操作 不要通过样式去设置画…

15.OCR

15.1 OCR流水线及七工作原理 Photo OCR&#xff1a;照片 光学字符识别(photo optical character recognition) Photo OCR注重的问题&#xff1a;如何让计算机都出图片中的文字信息&#xff0c;它有以下步骤&#xff1a; 首先给定某张图片&#xff0c;它将图像扫描一遍&#…