Redis快速入门(基础篇)

简介:

  • 是一个高性能的 key-value数据库。

  • 存在内存中

  • 与其他 key-value 缓存产品有以下三个特点:

    1. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

    2. Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

    3. Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

Redis优势:

  1. 高性能

  2. 丰富的数据类型

  3. 原子性

  4. 丰富的特性

redis能干嘛?

与传统数据库MySQL关系:

  • Redis是key-value数据库(NoSQL)的一种,MySQL是关系型数据库

  • Redis数据操作主要在内存,而MySQL主要存储在磁盘

  • Redis在某一场景使用中要明显优于MySQL,比如计数器,排行榜方面

  • Redis通常用于一些特定场景,需要与MySQL一起配合使用

注意:两者并不是相互替代和竞争关系,而是共用和配合

日常使用Linux装redis,使用Linux进行开发

  • Linux环境安装redis必须先具备gcc编译环境

  • 什么是gcc:是Linux下的一个编译程序,是c程序的编译工具。

  1. yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
    yum -y install wget httpd-tools vim
  2. 在window上下载了redis后,使用xfile将其放到linux的 /opt 目录下

  3. 进入到 /opt 目录使用

    tar-zxvf 你的redis压缩包
  4. cd 到 解压后的 redis 目录

  5. 使用

    make && make install

    安装

  6. 会默认安装到

    usr/local/bin
  7. 修改 redis7.conf 文件

    • 让 redis 在后台启动

      daemonize no  改为  daemonize yes
    • protected-mode yes  改为  protected-mode no
    • 允许其他机器访问

      注释 bind 127.0.0.1 -::1
    • 设置redis访问密码

      打开注释

      requirepass 你的密码
  8. 运行redis服务器

    redis-server /myredis/redis7.conf

    出现如下报错:

    67147:C 28 Oct 2023 20:46:34.584 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://githu

    解决方法:

    1. 进入到 /etc/sysctl.conf 文件

    2. 添加

      vm.overcommit_memory=1
    3. 使用命令:

      vm.overcommit_memory=1

      使配置文件生效

  9. 检查端口6379是否被占用:

    ps -ef|grep redis|grep -v grep
  10. 启用redis

     redis-cli -a 123456
  11. 测试

  1. redis服务器关闭方法:

    • 直接在端口号处 SHUTDOWN, 然后quit

    • 远程关闭:

      • 单实例:

        redis-cli -a 123456 shutdown
      • 多实例:

        redis-cli -a 123456 -p 希望关闭的端口号 shutdown 

redis10大数据类型

  1. redis字符串(String

    • 同时设置/获取多个键值

      • mset

      • mget

      • msetnx(可以理解为事务整体,成功则全成功,失败一个则全部失败)

    • 获取指定区间范围内的值

      • getrange

      • setrange

    • 数值增减(一定要是数字

      • 递增数字:INCR key

      • 增加指定的整数:INCRBY Key increment(比如:INCRBY key1 5)

      • 递减数值 DECR key

      • 减少指定的整数 DECR key decrement

    • 获取字符串长度和内容追加:

      • STRLEN key

      • APPEND key value

    • 分布式锁

      • setnx key value

      • setex(set with expire)键秒值/setnx(set if not exist)

    • getset(先get再set)

  1. redis列表(List)

    • 是一个双端链表的结构容量是2的32次方-1大概40多个亿,主要功能有pop/push等,一般用在栈,消息队列等

    • lpush/rpush/lrange

    • lpop/rpop

    • 按照索引下标获得元素(从上到下); lindex

    • 获取列表中元素个数; llen

    • 删除N个值等于v1的元素; lrem key 数字N给定值v1

    • 截取指定范围的值后再赋值给key ;ltrim key 开始index 结束1index

    • rpoploush 源列表 目的列表 (将源列表的末尾值pop,然后将该值添加到目的列表的头)

    • lset key index value

    • linsert key before/after 已有值 插入的新值

  2. redis哈希表(Hash)

    • KV模式不变,但是v是一个新的键值对 Map<String, Map<String, object>>

    • hset/hget/hmset/hmget/hgetall/hdel

    • hlen 获取某个key内的全部数量

    • hexists key 在key里面某个值的key

    • hkeys/hvals

    • hincrby/hincrbyfloat

    • hsetnx

  3. redis集合(Set)

    • 无序无重复

    • 底层是哈希表实现

      • 单值多value,且无重复

      • SADD key member[member ...] 添加元素

      • SMEMBERS key 遍历集合中所有元素

      • SISMEMBER key member 判断元素是否在集合中

      • SREM key member[member ...] 删除元素

      • scard 获取集合里面的元素

      • SRANDMEMBER key [数字] 从集合中随机展现设置的数字个数元素,元素不删除

      • SPOP key[数字] 弹出栈

      • SMOVE key1 key2 在key1已存在的某个值 将key1里已存在某个值付给key2

      • 集合运算

        • 差集 A-B:属于A但不属于B的元素构成的集合 SDIFF keyA [keyB]

        • 集合的并集运算 A ∪ B:属于 A或者属于B的元素构成的集合:SUNION keyA keyB

        • 集合的交集运算 A ∩ B:A,B共有部分

          • SINTER key[key ...]

          • SINTERCARD numkeys key[key ...] [LIMIT limit] (不返回结果集,而只返回结果的基数。返回由所有给定集合的交集产生的集合的基数)

  4. redis有序集合(ZSet)

    • 在set基础上,每个value值前加一个score分数值

    • 添加元素:ZADD key score member [score member ...]

    • 按照元素分数从小到大的顺序返回索引从start到stop之间所有元素:ZRANGE key start stop[WITHSCORES]

    • 按照元素分数从大到小的顺序返回索引从start到stop之间所有元素:ZRERANGE key start stop[WITHSCORES]

    • 获取指定分数范围的元素:ZRANGEBYSCORES key min max [WITHSCORES] [LIMIT offset count]

      • withscores

      • ( 表示不包含

      • limit 作用是返回限制

    • ZSCORE key member 获取元素的分数

    • ZCARD key 获取集合中元素的数量

    • zrem key 某score下对应的value值,作用是删除元素

    • ZINCRBY key increment member 增加讴歌元素的分数,increment为增加分数值

    • ZCOUNT key min max 获得指定分数范围内的元素个数

    • ZMPOP 从键名列表中的第一个非空集排序集中弹出一个或者多个元素,他们是成员分数对

    • ZRANK key values值,获取下标

    • zrerank key values值, 逆序获得下标值

  5. redis地理空间(GEO)

    • GEOADD 多个 经度、纬度、位置名称添加到指定的key中

      • 出现中文乱码需要quit 在登录界面追加 --raw

      • redis-cli -a 123456 --raw
    • GEOPOS 从键里面返回所有给定位置元素的位置(经度和纬度)

    • GEOHASH 返回坐标的geohash表示

    • GEODIST 两个位置间的距离

    • GEORADIUS 以半径为中心查询xxx

      image-20231107211538940

    • GEORADIUSBYMEMBER

  6. redis基数统计(HyperLogLog)

    • 统计某个某个网站UV(UV:Unique Visitor,独立访客,一般理解为客户端ip => 进行去重考虑)

    • 去重复统计功能的基数估计算法-HyperLogLog

    • PFADD key element[element ...] 添加指定元素

    • PFCOUNT key[key ...] 返回给定 HyperLogLog的基数估算值

    • PFMERGE destkey sourcekey [sourcekey ...] 合并多个HyperLogLog

  7. redis位图(bitmap)

    • 是由0和1状态表现的二进制位的bit数组

    • 用String 类型作为底层数据结构实现的一种统计二值状态的数据类型,位图本质是数组

    • setbit key offset value: 解释 setbit 键 偏移位 只能0 或1 btmap偏移量是从0开始的

    • getbit key

    • strlen 统计字节数占用多少(1bit 扩容)

    • bitcount 全部索引里面1占多少

    • bitop

  8. redis位域(bitfield)

    • 将redis字符串看作是 一个由二进制位组成的数组 并且能对变长位宽和任意没有字节对齐的指定整型位域进行寻址和修改。

    • 作用:

      • 位域修改

      • 溢出控制

    • 基本命令:

      • BITFIELD key [GET type offset]

      • BITFIELD key [SET type offset value]

      • BITFIELD key [INCRBY type offset increment]

      • 溢出控制 OVERFLOW [WRAR|SAT|FAI

  9. redis流(Stream)

    • 就是redis版本的mq消息中间件

      • 四个特殊符号:

        • - +: 最小和最大可能出现的id

        • $:表示只消费新的消息,当前流中最大的id,可用于将要来到的消息

        • >:用于 XREADGROUP命令,表示迄今还没有发送给组中使用者的信息,会更新消费组的最后ID

        • *:用于XADD命令中,让系统自动生成id

      • 相关指令:

        • XADD:添加消息到队列末尾

          • 消息id必须大于上个id

          • 默认使用星号表示自动生成规矩

          • * 用于XADD命令中,让系统自动生成id

        • XRANGE:用于获取消息列表(可以指定范围),忽略删除的消息

          • start 表示开始值,-代表最小值

          • end 表示结束值,+代表最大值

          • count 表示最多获取多少个值

        • XREVRANGE

        • XDEL

        • XLEN 用于获取Stream队列的消息长度

        • XTRIM

          • 用于对stream的长度进行截取,如超长会进行截取

          • MAXLEN 允许最大长度,对流进行修剪,限制长度

          • MINID 允许的最小id,从某个id值开始比该id值小将会被抛弃

        • XREAD

          • 用于获取消息(阻塞/非阻塞),只会返回大于指定id的消息

          • 非阻塞

            image-20231107214225201

          • 阻塞

        • XGROUP CREATE 用于创建消费者组

        • XREADGROUP GROUP

          • ">" 表示从第一条尚未被消费的消息开始读取

          • 消费组groupA内的消费组consumer1从mystream消息队列中读取所有消息

          • 但是,不同消费组的消费者可以消费同一条消息

          • XPENDING 查询每个消费组内所有消费者[已读取,但尚未确认] 的消息

          • XACK 像消息队列确认消息已经处理完成

    • redis 键位(key)

    • keys *:查看当前库所有的key

    • exists key:判断某个key是否存在

    • type key:查看你的key是什么类型

    • del key:删除指定的key数据

    • 注意:

    • 命令不区分大小写,而是key区分大小写

    • 帮助命令 help @类型

    • flushdb:清除当前数据库

    • flushall:通杀全部数据库

    • 注意:

    • 命令不区分大小写,而是key区分大小写

    • 帮助命令 help @类型

    • Redis持久化

    • 持化双雄:

      • RDB (Redis DataBase)

      • 如何恢复:

        • 将备份文件(dump.rdb)移动到 redis 安装目录并启动服务即可

        • 备份成功后故意用flushdb清空redis 看看是否可以恢复数据 => 结论:执行flushshell/flushdb命令也会产生dump.rdb文件,但里面是空的,无意义

        • 物理恢复,一定服务和备份分机隔离

      • 手动:Redis提供了两个命令来生产RDB文件,分别是save和bgsave

        • save:在主程序中执行会阻塞当前redis服务器,知道持久化工作完成执行save命令期间,Redis不能处理其他命令,线上禁止使用

        • rdb修复文件,

           redis-check-rdb
    • 如何禁用快照:

      • 动态所有停止RDB保存规则的方法:

        redis-cli config set save ""
      • 配置文件修改

    • 总结:

    • AOF(Append Only File)

    • aof是什么:

      image-20231111091802248

    • 默认情况下,redis是没有开启AOF的,开启AOF功能需要设置配置: appendonly yes

    • aof保存文件是appendonly.aof

    • 工作流程:

  10. 三种写回策略:

  11. Always:同步写回,每个命令执行完立刻同步地将日志写回磁盘

  12. everysec:每秒写回,每个命令执行完,只是先把日志写到AOF文件的内存缓冲区,每隔一秒把缓冲区内容写入磁盘

  13. no:操作系统控制的写回,每个写回命令执行完,只是先把日志写回到AOF文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘

  14. 混合持化
  15. 纯缓存模式:

    • 同时关闭RDB和AOF

      1. save"" 禁用rdb,我们仍然可以使用命令 save,bgsave生成rdb文件

      2. appendonly no 禁用aof,我们仍然可以使用命令 bgrewiteaof 生成aof文件

Redis事务

  • 是什么

    • 可以1次执行多个命令,本质是一组命令集合,一个事务中的所有命令都会序列化,按顺序的串行化执行而不会被其他命令插入,不允许加塞

  • 能干嘛

    • 一个队列中,一次性、顺序性、排他性的执行一系列命令

  • 和传统数据库比较:

使用:

  1. 常用命令:

  2. 正常执行:(MULTI, EXEC)

  3. 放弃事务:(MULTI, DISCARD)

  4. 全体连坐

  5. 冤有头债有主(类似于runtime error, redis不是完全的事务一致性,而且redis没有回滚)

  6. watch监控 :

    • Redis使用Watch来提供乐观锁定,类似于CAS(check and set)

      • 悲观锁

      • 乐观锁

      • CAS
    • watch:

  7. 总结:

    1. 开启:以MULTI开启一个事务

    2. 入队:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里

    3. 执行:由EXEC命令触发事务

Redis管道

  1. 是什么:批处理命令变种优化措施,类似于Redis的原生批命令(mget和mset)

  2. 小总结:

  3. Pipeline与原生批量命令对比:

    • 原生批量命令是原子性(mset等),pipeline是非原子性

    • 原生批量命令一次只能执行一种命令,pipeline支持批量执行不同命令

    • 原生批命令是服务端实现,而pipeline需要服务端和客户端共同完成

  4. Pipeline与事务对比

Redis复制

是什么:

  • 主从复制,master以写为主,Slave以读为主

  • 当master数据发生变化的时候,自动将更新的数据异步同步到其他slave数据库

能干嘛

  • 读写分离

  • 容灾恢复

  • 数据备份

  • 水平扩容,支撑高并发

Redis哨兵

  1. 哨兵的作用

    • 监控redis运行状态,包括master和slave

    • 当master宕机后,自动将slave切换成新的master

  2. 能干嘛:

    • 主从监控:监控主从redis库运行是否正常

    • 消息通知:哨兵可以将故障转移的结果发送给客户端

    • 故障转移:如果Master异常,则会进行主从切换,将其中一个Slave作为新的Master

    • 配置中心:客户端通过连接哨兵来获取当前Redis服务的主节点地址

  3. 哨兵一般是集群存在,多数判断master宕机才进行选举

  4. 怎么使用:

    • 配从库不配主库

    • 权限细节:

      • master如果配置了 requirepass参数,需要密码登录

      • slave 就要配置 masterauth 来设置校验密码,否则的话master会拒绝slave的访问请求

    • 基本操作命令

      • info replication 可以查看复制节点的主从关系和配置信息

      • replicaof 主库IP 主库端口

        • 一般写入到redis.conf配置文件内

      • slaveof 主库IP 主库端口

      • slaveof no one

        • 使当前数据库停止与其他数据库的同步,转成主数据库

  5. 缺点:

    1. 复制延时,信号衰减

    2. master挂了,从机会等待

      • ODown客观下线

        image-20231111150159457

      • 当主节点被判断为客观下线后,集群选出一个哨兵领导来做故障迁移

      • 由领导哨兵开始推动故障切换流程并选出一个新master:

        • 新主登基:

          • 某个Slave被选为新master

          • image-20231111150924569

          • image-20231111151049229

        • 群臣俯首:

          • image-20231111151151675

        • 旧主拜服

          image-20231111151237719

    3. Redis集群

    4. 定义:由于数据量过大,单个master复制集团难以承担,因此需要对多个复制集进行集群,形成水平扩展每个复制集只负责存储整个数据集的一部分,这就是Redis的集群,其作用是提供在多个Redis节点间共享数据的程序集。

    5. 集群可以支持多个Master

    6. Springboot集成Redis

    7. 总体概述:jedis-lettuce-RedisTemplate三者的联系

    8. 集成Jedis:

      • 是什么:

        image-20231111180245133

      • 步骤:

        1. 建module

        2. 改POM

        3. 写YML

        4. 主启动

        5. 业务类

    9. 集成lettuce

      • image-20231111191730399

    10. 能干嘛:

      • Redis集群支持多个Master,每个Master又可以挂载多个Slave

        • 读写分离

        • 支持数据的高可用

        • 支持海量数据的读写存储操作

        • 由于Cluster自带Sentinel的故障转移机制,内置了高可用的支持,无需再去使用哨兵功能

        • 客户端与Redis的节点链接,不再需要连接集群中所有节点,只需要任意连接集群中的一个可用节点即可

        • 槽位slot负责分配到各个物理服务节点,由对应的集群来负责维护节点、插槽和数据之间的关系

      • 集群算法-分片-槽位slot

        • redis集群的槽位slot

          image-20231111153303506

      • redis集群的分片

        • image-20231111153515476

      • 优势:

        • 方便扩容、缩容和数据查找

          image-20231111153730233

      • slot槽位映射,一般业界有三种解决方案:

        1. 哈希取余分区

          • 优点

            image-20231111154101433

          • 缺点

            image-20231111154156935

        2. 一致性哈希算法分区

          • 是什么:分布式缓存数据 变动和映射问题,某个机器宕机了,分母数量改变了,自然取余数不ok了

          • 能干嘛:提出一致性Hash解决方案。目的是当服务器个数发生变化时,尽量减少影响客户端到服务器的映射关系

          • 三大步骤

            1. 算法构建一致性哈希环

            2. 服务器IP节点映射

              image-20231111154909183

            3. key落到服务器的落键规则

          • 一致性哈希算法容错性

            • image-20231111155113776

          • 一致性哈算算法的扩展性

            • image-20231111155156031

          • 缺点:Hash环的数据倾斜问题

            image-20231111155247379

        3. 哈希槽分区

        4. 为什么redis集群的最大槽数是16384个

          image-20231111155704713

          image-20231111155915313

          image-20231111155927801

          image-20231111155956197

        5. Redis集群 不保证强一致性,这意味着在特定条件下,Redis集群可能会丢掉一些被系统收到的写入请求命令

      • 集群环境案例步骤

        image-20231111162445169

        image-20231111165301686

      • image-20231111165311963

      • image-20231111165444368

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

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

相关文章

nodejs+vue+python+PHP+微信小程序-安卓- 电影在线订票系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

uniapp: 实现pdf预览功能

目录 第一章 实现效果 第二章 了解并解决需求 2.1 了解需求 2.2 解决需求 2.2.1 方法一 2.2.2 方法二 第三章 资源下载 第一章 实现效果 第二章 了解并解决需求 2.1 了解需求 前端需要利用后端传的pdf临时路径实现H5端以及app端的pdf预览首先我们别像pc端一样&#…

分类预测 | Matlab实现PSO-BiLSTM粒子群算法优化双向长短期记忆神经网络的数据多输入分类预测

分类预测 | Matlab实现PSO-BiLSTM粒子群算法优化双向长短期记忆神经网络的数据多输入分类预测 目录 分类预测 | Matlab实现PSO-BiLSTM粒子群算法优化双向长短期记忆神经网络的数据多输入分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现PSO-BiLSTM粒子…

详解IP安全:IPSec协议簇 | AH协议 | ESP协议 | IKE协议

目录 IP安全概述 IPSec协议簇 IPSec的实现方式 AH&#xff08;Authentication Header&#xff0c;认证头&#xff09; ESP&#xff08;Encapsulating Security Payload&#xff0c;封装安全载荷&#xff09; IKE&#xff08;Internet Key Exchange&#xff0c;因特网密钥…

【java:牛客每日三十题总结-7】

java:牛客每日三十题总结 总结如下 总结如下 执行流程如下&#xff1a;创建HttpServlet时需要覆盖doGet()和doPost请求 2. request相关知识 request.getParameter()方法传递的数据&#xff0c;会从Web客户端传到Web服务器端&#xff0c;代表HTTP请求数据&#xff1b;request.…

【电路笔记】-戴维南定理(Thevenin‘s Theorem)

戴维南定理&#xff08;Thevenin’s Theorem&#xff09; 文章目录 戴维南定理&#xff08;Thevenins Theorem&#xff09;1、概述与定义2、戴维南模型确定3、一些线性电路的戴维南模型3.1 单电压源3.2 单电流源3.3 多电流/电压源 4、结论 在本文中&#xff0c;我们将介绍一种强…

开发vue3 UI组件库,并且发布到NPM

目录 1.创建vue3工程 2.创建package文件 3.编写组件&#xff0c;并且导出 4.编写package.json 5.npm账号注册登录并发布 6.从npm安装使用 7.注意事项 1.创建vue3工程 &#xff08;1&#xff09;初始化Vue项目 cnpm create vite &#xff08;2&#xff09;进入文件夹…

设计模式之原型模式(Prototype)

原型模式 如果已经有一个对象了&#xff0c;你想创建一个对象&#xff0c;而且对象里面的属性和已经存在的对象的属性差不多&#xff0c;就可以使用clone方法 克隆一个出来 实现原型模式需要实现标记型接口Cloneable -->标记型接口 : 里面没有需要实现的方法(空接口) 一般…

数据运营基础:用户场景营销

一、概述 场景营销模型是顶层模型&#xff0c;是站在用户经营和用户场景角度来制定经营策略的模型。本质上&#xff0c;场景营销模型是在用户使用产品的每个细分场景中通过分析用户需求整合功能、实体和体验等为用户提供服务的模型。 二、场景的起源和特点 数据运营体系在发展…

RHCE第四次作业

题目 架设一台NFS服务器&#xff0c;并按照以下要求配置 1、开放/nfs/shared目录&#xff0c;供所有用户查询资料 2、开放/nfs/upload目录&#xff0c;为192.168.100.0/24网段主机可以上传目录&#xff0c; 并将所有用户及所属的组映射为nfs-upload,其UID和GID均为210 3、将…

ChatGPT重磅升级 奢侈品VERTU推出双模型AI手机

2023年11月7日,OpenAI举办了首届开发者大会,CEO Sam Altman(山姆奥尔特曼)展示了号称“史上最强”AI的GPT-4 Turbo。它支持长达约10万汉字的输入,具备前所未有的长文本处理能力,使更复杂的互动成为可能。此外,GPT-4 Turbo还引入了跨模态API支持,可以同时处理图片、视频和声音,从…

Three.js——基于原生WebGL封装运行的三维引擎

文章目录 前言一、什么是WebGL&#xff1f;二、Three.js 特性 前言 Three.js中文官网 Three.js是基于原生WebGL封装运行的三维引擎&#xff0c;在所有WebGL引擎中&#xff0c;Three.js是国内文资料最多、使用最广泛的三维引擎。既然Threejs是一款WebGL三维引擎&#xff0c;那么…

基于YOLOv8的输电线路异物识别算法应用

基于 YOLOv8 的输电线路异物识别算法应用 输电线路作为电力系统的重要一环&#xff0c;保证其安全稳定运行是十分必要的。由于长期暴露于室外&#xff0c;线路所面临的不安全因素繁多&#xff0c;异物入侵便是其中之一。异物可能会引起线路短路甚至诱发火灾&#xff0c;因此要加…

Unity中雾效的实现方法二

文章目录 前言一、声明雾效所需要的内置变体二、在 v2f 中声明顶点传入片段中的雾效插值器三、 在顶点着色器中计算雾效采样四、在片元着色器中进行雾效颜色混合在这里插入图片描述 五、最终效果 前言 Unity中雾效的实现方法二&#xff0c;使用 Unity 自带的方法实现&#xff…

如何将系统盘MBR转GPT?无损教程分享!

什么是MBR和GPT&#xff1f; MBR和GPT是磁盘的两种分区形式&#xff1a;MBR&#xff08;主引导记录&#xff09;和GPT&#xff08;GUID分区表&#xff09;。 新硬盘不能直接用来保存数据。使用前应将其初始化为MBR或GPT分区形式。但是&#xff0c;如果您在MBR时需…

关于我在配置zookeeper出现,启动成功,进程存在,但是查看状态却没有出现Mode:xxxxx的问题和我的解决方案

在我输入:zkServer.sh status 之后出现报错码. 报错码&#xff1a; ZooKeeper JMX enabled by default Using config: /opt/software/zookeeper/bin/../conf/zoo.cfgClient port found: 2181. Client address: localhost. Error contacting service. It is probably not runni…

基于SpringBoot的SSMP整合案例(开启日志与分页查询条件查询功能实现)

开启事务 导入Mybatis-Plus框架后&#xff0c;我们可以使用Mybatis-Plus自带的事务&#xff0c;只需要在配置文件中配置即可 使用配置方式开启日志&#xff0c;设置日志输出方式为标准输出mybatis-plus:global-config:db-config:table-prefix: tb_id-type: autoconfiguration:…

【自动化测试】Pytest框架 —— 跳过测试和失败重试

1、Pytest跳过测试用例 自动化测试执行过程中&#xff0c;我们常常出现这种情况&#xff1a;因为功能阻塞&#xff0c;未实现或者环境有问题等等原因&#xff0c;一些用例执行不了&#xff0c; 如果我们注释掉或删除掉这些测试用例&#xff0c;后面可能还要进行恢复操作&#…

ObRegisterCallbacks()返回0xC0000022(拒绝访问)解决办法

在开发测试环境下&#xff0c;没有打签名的驱动调用ObRegisterCallbacks会返回0xC0000022&#xff08;拒绝访问&#xff09;的错误码。这是由于该函数内部会进行驱动的签名校验。 具体位置在 因此可以用以下代码绕过该检查 // 以下代码放在DriverEntry中 ULONG_PTR pDrvSectio…

【手动创建UIWindow Objective-C语言】

一、上节课,我们讲了控制器View的懒加载: 1.什么时候会调用这个懒加载呢,用我们直接,控制器self.view self.view的时候: 什么时候,调用它这个self.view, 就要去加载控制器的view, self.view 加载控制器的view 我们给大家演示过了,这个大家已经清楚了,我们给大家说…