redis知识复习

news2024/11/16 21:51:36

redis知识复习

  • redis基础知识
    • redis的认识
      • 一. 非关系型数据库 与 传统数据库 的区别
      • 二. 安装redis并设置自启动
      • 三. 熟悉命令行客户端
      • 四.熟悉图形化工具RDM
    • redis的命令与数据结构
      • 一. 数据结构介绍
      • 二. redis通用命令(熟练掌握)
    • redis的Java客户端
      • 一. Jedis
      • 二. SpringDataRedis
      • 三. StringRedisTemplate(推荐)
  • redis应用(未完结...)
    • 处理登录验证
      • 设计登录拦截
    • 处理热点数据的查询工作
      • 处理缓存穿透
      • 处理缓存雪崩
      • 处理缓存击穿
    • 处理秒杀任务

redis基础知识

redis的认识

一. 非关系型数据库 与 传统数据库 的区别

背会这张表就行了

二. 安装redis并设置自启动

  1. 在Linux环境下 安装redis依赖

    yum install -y gcc tcl
    
  2. (/usr/local/src目录下) 下载对应的redis安装包(本次为v6.2.6,如果有之前下载过的redis,记得提前删除干净,以防配置环境等因素造成安装的异常)

    wget https://download.redis.io/releases/redis-6.2.6.tar.gz
    
  3. 解压压缩包获得 redis程序安装包

    tar -xvf redis-6.2.6.tar.gz
    
  4. 在该程序包目录下执行 编译安装命令(默认该步骤会将redis软件安装到/usr/local/bin目录下)

    make && make install
    
  5. 执行redis服务命令 即可启动redis,该方式为前台启动方式(不友好,不推荐使用)

    redis-server 
    
  6. 修改配置文件,完成指定配置下的启动准备(记得对redis.conf做备份,以防修改失误)

    cp redis.conf redis.conf.bck
    
    vi redis.conf
    ```![添加任意进程可访问](https://img-blog.csdnimg.cn/6538b2acabe1497a8e81542bce06c887.png)
    
    
    ![守护进程开启](https://img-blog.csdnimg.cn/595af5c274fb47dc8ca0bed7da2a5fb6.png)
    
    
    ![开启密码](https://img-blog.csdnimg.cn/decd86dfa5b244c195e9d7f4807801a0.png)
    
    
    ![日志记录](https://img-blog.csdnimg.cn/12f2e571d76a473fad37c77021f690f3.png)
    ```shell
    # 文本内部的修改(供复制粘贴)
    
    # 任意ip可访问
    bind 0.0.0.0 
    # 守护进程打开,可后台运行
    daemonize yes
    # 密码设置123321
    requirepass 123321
    # 打开日志记录,并命名
    logfile "redis.log"
    
  7. 根据指令,完成指定配置文件下的启动

    redis-server redis.conf
    
  8. 查看redis进程命令,以及杀死进程命令

    ps -ef | grep redis
    
    kill -9 PID(PID为对应的进程序列号)
    
  9. 开机自启动(在 system系统文件夹中 新建一个配置类文件)

    vi /etc/systemd/system/redis.service
    

    配置类文件内容如下:

    [Unit]
    Description=redis-server
    After=network.target
    
    [Service]
    Type=forking
    # 这行配置内容要根据redis的安装目录自定义路径
    ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    

    重载系统服务,以便配置文件生效

    systemctl daemon-reload
    

    此时可以使用系统命令实现redis的启动、查看状态或关闭

    systemctl start redis
    
    systemctl status redis
    
    systemctl stop redis
    

    执行下面的命令,实现开机自启:

    systemctl enable redis
    

    查看此时,redis 服务的状态:

    systemctl status redis
    

三. 熟悉命令行客户端

  1. 在/usr/local/bin/目录下,使用redis-cli实现连通redis

    redis-cli -h 192.168.2.190 -p 6379 -a 123321
    
    >ping
    
  2. 存取数据set/get,换库select [index]

    set/get/select命令的输入

四.熟悉图形化工具RDM

RDM工具

redis的命令与数据结构

一. 数据结构介绍

常用数据结构

二. redis通用命令(熟练掌握)

# keys:查看所有key
keys * 
# set:设置添加k-v  mset:批量添加
set k1 v1
mset k1 v1 k2 v2 k3 v3
# del:删除
del k1
# exist 查看是否存在
exist k1
# expire:设置有效期时间,单位s,没有特殊设置则为-1表示永久有效
expire k1 20
# ttl:查看有效期剩余时间(-1表示永久,-2表示过期,正数表示剩余秒数)
ttl k1

String类型(可存string,int,float)

String类型常用命令

redis的key的格式:

层级存储:[项目名]:[业务名]:[类型]:[id],这种存储的方式,有一个好处,那就是在使用gui图形界面能看到层级结构

Hash类型

Hash类型存储结构

Hash类型数据常用命令

List类型(对比Java的双向链表)

List类型存储结构

List类型常用命令

list的总结:可以广泛模拟 栈(同一个方向先进后出) 队列(不同方向进出) 阻塞队列(一头取,一头放,需要设置等待时间)

Set类型(对比Java的hashset,相当于底层使用hashmap实现)

Set类型数据结构

Set类型常用命令

SortedSet类型(功能上类似TreeSet,底层数据结构不同)

SortedSet类型存储数据结构

SortedSet类型常用命令

redis的Java客户端

一. Jedis

单例使用流程

单例使用redis

测试

Jedis连接池用法

Jedis连接池使用redis

创建连接池对象,设置参数,完成连接池的创建,在使用过程中,与上述直接创建连接不同的是直接从连接池中获取一个连接,其他基本一致

// jedis = new Jedis("192.168.2.190",6379);
jedis = JedisConnectionFactory.getJedis(); //直接从连接池中获取一个

二. SpringDataRedis

SpringRedisTemplate

操作

使用流程(写pom,写yml,写测试用例,完成测试)

  1. 创建项目,引入依赖

依赖

  1. 完成配置文件的设置

    yml文件

  2. 注入装配,实施测试

    装配测试

redisTemplate的序列化操作存在的问题

序列化造成的数据不可读

基于可读性差的因素,可以自定义序列化方式,规避序列化造成的可读性问题

  1. 加依赖
<!--jackson序列化工具-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>
  1. 自定义序列化方式(最好能理解!实际上由于该方式进行反序列化的必要操作时,会必定携带@class信息,造成占用内存产生大量冗余,并不推荐使用,后续会使用StringRedisTemplate操作key,value则手动进行序列化与反序列化操作)
/**
 * redis反序列化自定义操作工具类
 */

@Configuration
public class RedisConfig {
    /**
     * @param redisConnectionFactory 引入工厂
     * @return 返回经过处理的redisTemplate模板
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
        // 创建RedisTemplate对象
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        // 设置连接工厂
        template.setConnectionFactory(redisConnectionFactory);
        // 创建JSON序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        // 设置key的序列化
        template.setKeySerializer(RedisSerializer.string());
        template.setHashKeySerializer(RedisSerializer.string());
        // 设置value的序列化
        template.setValueSerializer(jsonRedisSerializer);
        template.setHashKeySerializer(jsonRedisSerializer);
        // 返回RedisTemplate对象
        return template;
    }
}

三. StringRedisTemplate(推荐)

(基于内存占用问题,使用StringRedisTemplate来改善内存问题,StringRedisTemplate操作key,value则手动进行序列化与反序列化操作)

SDR

RedisTemplate与StringRedisTemplate处理后两者存取的数据对比:

对比
对比1

redis应用(未完结…)

处理登录验证

设计登录拦截

在这里插入图片描述

处理热点数据的查询工作

处理缓存穿透

缓存穿透:浏览器不断发送未命中的请求,redis一直未命中,一直查询数据库,给数据库造成很大压力
穿透
实例:用户查询一个热点商铺/商品/文章信息,信息不存在,持续访问造成数据库压力
解决方案:
安排

处理缓存雪崩

在这里插入图片描述
实例:用户分时段查询多个热点商铺/商品/文章信息,结果在某个时间节点该信息全部失效,导致该时间节点需要大量访问数据库造成数据库压力

解决方案:给redis中的缓存数据设置不同的TTL

处理缓存击穿

实例:多名用户在一个定时活动的时间节点访问某个热点商铺/商品/文章信息,结果造成缓存失效,结果造成访问数据库造成数据库的压力过大

  1. 使用互斥锁处理缓存击穿
    在这里插入图片描述
  2. 使用【逻辑过期时间】处理缓存击穿
    在这里插入图片描述

处理秒杀任务

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

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

相关文章

文心一言 VS 讯飞星火 VS chatgpt (38)-- 算法导论5.4 2题

二、假设我们将球投入到b个箱子里&#xff0c;直到某个箱子中有两个球。每一次投掷都是独立的并且每个球落入任何箱子的机会均等。请问投球次数期望是多少? 文心一言&#xff1a; 这是一个典型的鸽巢原理&#xff08;Pigeonhole Principle&#xff09;问题。假设每次投球时&…

2023年上半年系统分析师下午真题及答案解析

试题一(25分) (试题一为必答题&#xff0c;试题二~五选答两题) 某软件公司拟开发一套汽车租赁系统&#xff0c;科学、安全和方便的管理租赁公司的各项业务&#xff0c;提高公司效率&#xff0c;提升利用率。注册用户在使用系统进行车辆预约时需执行以下操作&#xff1a;(a)用…

从0-1一起学习live555设计思想之二 RTSP交互过程

流媒体服务系列 文章目录 流媒体服务系列前言一、OPTION二、DESCRIBE三、SETUP四、PLAY总结前言 本篇文章通过代码去分析rtsp交互过程与工作原理。由于live555的继承关系太过复杂,所以做了个图简单记录一下与h264文件传输相关的类继承关系。 一、OPTION OPTION比较简单,就…

【调制BFSK】二进制频移键控FSK的数字调制(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

ARM学习(22)断点认识以及调试

笔者来聊聊断点以及断点的调试 1、断点原理 断电的原理一般分为两种&#xff0c;插入断点指令或者利用硬件调试寄存器进行断点。 前者程序如果在RAM&#xff08;SRAM、DDR&#xff09;上&#xff0c;则调试器可以直接在断点地址处插入断点指令&#xff0c;例如BKPT&#xff0…

python自动化测试-自动化基本技术原理

1 概述 在之前的文章里面提到过&#xff1a;做自动化的首要本领就是要会 透过现象看本质 &#xff0c;落实到实际的IT工作中就是 透过界面看数据。 掌握上面的这样的本领可不是容易的事情&#xff0c;必须要有扎实的计算机理论基础&#xff0c;才能看到深层次的本质东西。 …

家用电器-空调制冷、制热、除霜、除湿、换新风的基本原理及实现讲解

目录 一、空调历史 二、空调的作用 三、空调类型 四、基本原理 4.1 制冷过程 4.2 制热过程 4.3 除霜过程 4.4 除湿过程 4.5 换气过程 五、电路控制系统 六、核心部件 七、基本指标 1&#xff09;气候类型 2&#xff09;额定制冷量 3&#xff09;能效比 八、市场…

4年功能庸庸碌碌,进阶自动化测试拿到了24k,测试之路不再平凡...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 手工测试如何进阶…

多业务聚合查询设计思路与实践

文章目录 [toc] 1.需求2.方案2.1 方案架构图2.2 选用flink-cdc的原因 3.实践3.1 环境准备3.3 es集群搭建3.4 flink1.14.0环境搭建3.5 准备sql和jar包3.5.1[创建mysql的flink用户并授权](https://ververica.github.io/flink-cdc-connectors/master/content/connectors/mysql-cdc…

【树形DP+直径思想】代码源每日一题div1 三进制循环

三进制循环 - 题目 - Daimayuan Online Judge 题意&#xff1a; 思路&#xff1a; 有点像树的直径 回顾一下我们是怎么求直径的&#xff1a;维护根节点到其子树上的点的最大距离和次大距离&#xff0c;然后答案就是统计所有结点的次大值最大值 的 最大值 这道题也是一样的&a…

C盘爆满时的几个救命无害清理技巧

其实网上也有很多清理C盘的方法 但是很多就是为了弄成空间 不讲原理 也不计后果 很可能坑惨小伙伴 可以看到 我电脑的C盘都已经读红条了 非常危险 对了 可能有些朋友的电脑上没有此电脑的选项 我们可以在桌面上右键选择 个性化 找到 主题 并选择 向下拉 找到 桌面图标设置 …

经验总结:13 条自动化测试框架设计原则!

1.代码规范 测试框架随着业务推进&#xff0c;必然会涉及代码的二次开发&#xff0c;所以代码编写应符合通用规范&#xff0c;代码命名符合业界标准&#xff0c;并且代码层次清晰。特别在大型项目、多人协作型项目中&#xff0c;如果代码没有良好的规范&#xff0c;那么整个框…

微服务之负载均衡

Informal Essay By English I wish the students of the college entrance examination can win the gold toad and win the title of the gold list 参考书籍&#xff1a;“凤凰架构” 负载均衡&#xff08;load balance&#xff09; 负载平衡是指在一组后端服务器&#xf…

《计算机网络——自顶向下方法》精炼——4.4.1-4.4.2

敬教劝学&#xff0c;建国之大本;兴贤育才&#xff0c;为政之先务。——《朱舜水集。劝学》 文章目录 IPv4编址接口IP地址子网 无类别域间路由选择&#xff08;CIDR&#xff09;获取一块地址获取主机地址网络地址转换 IPv4编址 接口 主机或路由器与物理链路的边界称作接口。一…

深度学习卷积神经网络CNN之ResNet模型网络详解说明(超详细理论篇)

1.ResNet背景 2. ResNet论文 3. ResNet模型结构 4. ResNet优缺点 一、ResNet背景 ResNet 在2015 年由微软研究院提出的一种深度卷积神经网络结构&#xff0c;在ILSVRC&#xff08;ImageNet Large Scale Visual Recognition Challenge&#xff09;中取得了冠军&#xff08;分类…

python - kubernetes中grpc服务健康检查实现

概述 kubernetes本身不支持gRPC健康检查&#xff0c;本文记录使用 ‘grpc-health-probe’ 实现grpc服务的健康检查 ‘grpc-health-probe’&#xff0c;这是 Kubernetes 原生的健康检查 gRPC 应用程序的方法 官方参考文档&#xff1a;https://kubernetes.io/zh-cn/blog/2018/1…

45--Django-项目实战-全栈开发-基于django+drf+vue+elementUI企业级项目开发流程-纯手工安装部署和docker一键部署

前期准备: 购买服务器,公网地址访问 服务器有多种选择,阿里云,腾讯云,华为云(可以免费试用几个月) 买阿里云就当成你去电脑市场组装了一台电脑。阿里云按时间计费(账户余额要大于100)。 购买流程: 搜索云服务器 开始创建你的云服务器 按量付费:用多少扣多少 地域…

ORACLE PL/SQL编程总结(一)

目录 1.1 SQL与PL/SQL 1.2 PL/SQL的优点或特征 1.3 PL/SQL 可用的SQL语句 1.4 运行PL/SQL程序 2.1 PL/SQL块 2.2 PL/SQL结构 2.3 标识符 2.4 PL/SQL 变量类型 2.5 运算符和表达式(数据定义) 2.6 变量赋值 2.7 变量作用范围及可见性 2.8 注释 2.9 简单例子 3.1 条件…

算法刷题-哈希表-两数之和

两数之和 1. 两数之和思路总结其他语言版本 1. 两数之和 力扣题目链接 给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那 两个 整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中…

【Leetcode】DP | 买卖股票的最佳时机,DP居然还可以用状态机?

带状态的DP君~ 类型总结&#xff1a;买卖一次、买卖无限次、买卖k次、买卖无限次、含冷冻期。 买卖k次的问题需要不断统计、维护买卖i次的最大收益。 状态较多的题可以借助状态机分析状态转移情况。 121 买卖股票的最佳时机 统计第 i i i天之前的股票最低价格&#xff0c;…