redis基础(一)

启动与关闭

启动命令在/usr/local/bin目录

服务端后台启动:redis-server opt/redis-6.2.1/redis.conf

在这里插入图片描述

客户端连接:执行 redis-cli

在这里插入图片描述

关闭操作

​ 方式1:进入终端后关闭

在这里插入图片描述

​ 方式2:直接kill 掉进程

在这里插入图片描述

方式3:通过实例关闭

在这里插入图片描述

redis数据库介绍

​ redis的端口默认是6379,默认有16个库,下标从0开始,初始默认使用0号库,使用 select dbid 切换数据库,dbid取值为0-15,比如切换到8号库,下标超过15就会报错:

在这里插入图片描述

其他命令:

​ dbsize:查看当前数据库的key的数量

​ flushdb:清空当前数据库

​ flushall:清空所有数据库

在这里插入图片描述

redis的技术实现:单线程+多路IO复用

​ 多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)。

redis常用的5大数据类型

redis键值

​ keys * :查看当前库所有key

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

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

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

​ expire key 10 10秒钟:为给定的key设置过期时间

​ ttl key :查看还有多少秒过期,-1表示永不过期,-2表示已过期

​ select:命令切换数据库

​ dbsize:查看当前数据库的key的数量

​ flushdb:清空当前库

​ flushall:清空全部库

字符串(String)

String类型是Redis最基本的数据类型。String类型是二进制安全的,因此,String类型可以包含任何数据。类如图片或者序列化的对象。String的数据结构为简单动态字符串,内部结构实现上类似java的arraylist,采取预分配冗余空间的方式来减少内存的频繁分配。当字符串长度小于1M时,通过加倍现有空间的方式进行扩容。当字符串长度超过1M时,扩容时一次只会多扩1M的空间。一个Redis中字符串value最多可以是512M。如下是常用的命令:

​ set :添加键值对

在这里插入图片描述

此命令可以带参数,参数详解如下:

​ *NX:当数据库中key不存在时,可以将key-value添加数据库

​ *XX:当数据库中key存在时,可以将key-value添加数据库,与NX参数互斥

​ *EX:key的超时秒数

​ *PX:key的超时毫秒数,与EX互斥

​ get :查询对应键值

​ append :将给定的 追加到原值的末尾

​ strlen :获得值的长度

​ setnx :只有在 key 不存在时 设置 key 的值

​ incr :将 key 中储存的数字值增1,只能对数字值操作,如果为空,新增值为1

​ decr :将 key 中储存的数字值减1,只能对数字值操作,如果为空,新增值为-1

​ incrby / decrby <步长>:将 key 中储存的数字值增/自减步长值。自定义步长。

​ mset … :同时设置一个或多个 key-value键值对

​ mget …:同时获取一个或多个key的 value 值

​ msetnx … :同时设置一个或多个 key-value 对,条件是当且仅当所有给定 key 都不存在。

​ getrange <起始位置> <结束位置>:获取key对应的value的值的范围,类java中的subString,且首尾都包含。

​ setrange <起始位置> :用 覆写所储存的字符串值,从<起始位置>开始,注意:索引从0开始。

​ setex <过期时间> :设置键值的同时,设置过期时间,单位秒。

​ getset :以新换旧,设置了新值同时获得旧值。

列表(List)

​ redis列表(list)是简单的字符串列表,按照插入顺序排序。它实际是一个双向链表,对两端的操作性能高,但是操作中间节点的性能比较差,可以添加一个元素到列表的头(左边)或者尾(右边)。当数据较少时,会使用一块连续的内存存储,这个链表结构是ziplist,即压缩列表;当数据较多时,使用快速列表quicklist,即链表和ziplist进行组合,将多个ziplist使用双向指针串起来使用。常用命令如下:

​ lpush/rpush … :从左边/右边插入一个或多个值。

​ lpop/rpop :从左边/右边吐出一个值,当所有的值都吐出来,键也就不存在。

​ rpoplpush :从列表右边吐出一个值,插到列表左边。

​ lrange :按照索引下标获得元素(从左到右,下标从0开始)

​ lrange mylist 0 -1 :0左边第一个,-1右边第一个,(0-1表示获取所有)

​ lindex :按照索引下标获得元素(从左到右)

​ llen :获得列表长度

​ linsert before :在的后面插入插入值

​ lrem :从左边删除n个value(从左到右)

​ lset:将列表key下标为index的值替换成value

集合(set)

​ set和list一样,可以存储多个value值,但是set可以实现自动重排。当需要存储一个列表数据,但是又不希望出现重复数据时,set是一个很好的选择。且set可以判断一个成员是否在一个set集合内,list无此功能。它是一个string类型的无序集合,底层是一个value为null的hash表,所以添加,删除,查找的复杂度都是0(1)。set的数据结构是dict字典,字典使用哈希表实现,因此,内部实现是hash结构,所有的value都指向同一个内部值。常用命令如下:

​ sadd … :将一个或多个 member 元素(value1,value2,…)加入到集合 key 中,已经存在的 member 元素将被忽略。

​ smembers :取出该集合key中的所有值。

​ sismember :判断集合是否为含有该值,返回值1表示有,返回值0表示没有。

​ scard:返回该集合的元素个数。

​ srem … :删除集合中的某个元素。

​ spop :随机从集合中吐出一个值。

​ srandmember :随机从集合中取出n个值。这些值不会从集合中删除 。

​ smove value:把集合中一个值value从一个集合source移动到另一个集合destination

​ sinter :返回两个集合的交集元素。

​ sunion :返回两个集合的并集元素。

​ sdiff :返回两个集合的差集元素(key1中的,不包含key2中的)

##哈希(hash)

redis hash是一个键值对集合,是一个string类型的filed和value的映射表,hash特别适合用于存储对象,类似java中的map<String, object>。当filed-value的长度较短且个数较少时,使用ziplist,否则使用hashtable。常用命令如下:

​ hset :表示给集合中的 键赋值。

​ hget :表示从集合键中取出 value 。

​ hmset … :表示批量设置hash的值。

​ hexists:查看哈希表 key 中,给定域 field 是否存在。

​ hkeys :列出该hash集合的所有field。

​ hvals :列出该hash集合的所有value。

​ hincrby :为哈希表 key 中的域 field 的值加上增量 1 。

​ hsetnx :将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在 。

有序集合(zSet)

​ zset与普通set非常类似,都是没有重复元素的字符串集合。不同之处在于有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分是可以重复的。可以根据评分(score)或者次序(position)获取一个范围的元素。常用命令如下:

​ zadd …:将一个或多个 member (value1,value2,…)元素及其 score (score1,score2,…)值加入到有序集 key 当中。

​ zrange [WITHSCORES]:返回有序集 key 中,下标在 之间的元素,如果带WITHSCORES,可以让分数一起和值返回到结果集。

​ zrangebyscore min max [withscores] [limit offset count]:返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。 具有相同score的成员按照字段序来排列。可选的limit参数指定返回结果的数量及区间(类似sql中的select limit offset,count)。

​ zrevrangebyscore max min [withscores] [limit offset count] :同上,改为从大到小排列。

Bitmaps

​ redis提供了bitmaps这个“数据类型”可以实现对位的操作。bitmaps本身不是一种数据类型,可以把它当作字符串(key-value),但是它可以实现对字符串的位进行操作。常用的命令如下:

​ setbit:设置key对应的value值的某个偏移量的值为value(value为0或1),offset是偏移量,从0开始。

​ getbit:获取key对应的value值的某个偏移量的值value(获取到的value为0或者1)

​ bitcount [start end]: 统计key对应的value值中被设置为1的bit数。通过指定额外的 start 或 end 参数,可以让计数只在特定的位上进行。

​ bitop and(or/not/xor) key [key…]:对多个key做and(交集) 、 or(并集) 、 not(非) 、 xor(异或) 操作并将结果保存在destkey中。

redis配置

redis.conf文件是redis的配置文件,重点可以关注如下配置:

​ redis以byte为度量,而不是bit:

在这里插入图片描述

​ bind是网络相关配置,bind用来指定特定ip地址的访问,如果不配置,默认接收任何ip地址的访问,此配置可以与protected-mode使用,如果开启了protected-mode,若没有设定bind且没有设置密码时,redis只接受本机的响应:

在这里插入图片描述

​ protected-mode模式是一种安全保护模式,可以限制哪些客户端可以连接到redis服务器,需要和bind搭配使用。当protected-mode设置为yes时,如果bind没有绑定ip或者未配置密码,将会触发安全保护模式,导致无法远程连接redis:

在这里插入图片描述

​ redis连接的端口号,默认是6379,也可以改成其他:

在这里插入图片描述

​ 设置tcp的backlog,backlog是一个连接队列,backlog队列总和=未完成三次握手队列+已经完成三次握手队列,在高并发情况下需要一个高backlog值来避免慢客户端连接的问题。注意Linux内核会将这个值减小到/proc/sys/net/core/somaxconn的值(128),所以需要确认增大/proc/sys/net/core/somaxconn和/proc/sys/net/ipv4/tcp_max_syn_backlog(128)两个值来达到想要的效果:

在这里插入图片描述

​ 设置timeout,设置一个空闲的客户端维持多少秒会关闭,0表示关闭该功能,即一直维持连接,永不关闭:

在这里插入图片描述

​ tcp-keepalive用来设置对客户端的一种心跳检测,单位为秒。n秒检测一次,如果设置为0,则不会进行心跳检测,建议值为60:

在这里插入图片描述

​ daemonize表示是否为后台进程,yes表示设置为后台进程:
在这里插入图片描述

​ 每个实例会产生一个不同的pid文件,pidfile用来指定存放pid文件的位置:

在这里插入图片描述

​ loglevel用来指定日志记录的级别,Redis总共支持四个级别:debug、verbose、notice、warning。默认是notice,四个级别根据使用阶段来选择,生产环境选择notice 或者warning:

在这里插入图片描述

​ logfile用来指定日志文件名称:

在这里插入图片描述

​ databases用来设定库的数量,默认是16个数据库。默认使用的是0库,可以使用select 命令在连接上指定数据库id,在默认16个数据库的情况下,dbid的值为0-15:

在这里插入图片描述

​ requirepass用来设置密码:
在这里插入图片描述

​ maxclients设置redis同时可以和多少个客户端连接,如果达到了此限制,redis会拒绝新的连接请求,并发送“max number of clients reached”作为回应:

在这里插入图片描述

​ maxmemory用来设置redis可以使用的内存量,这个值必须设置,否则内存不断增加,会造成服务器宕机。设置这个值后,一旦达到内存上限,redis会试图移除内部数据,移除规则可以通过maxmemory-policy指定。如果redis无法根据移除规则来移除内存中的数据,或者设置了"不允许移除",那么,对于那些需要申请内存的指令(比如set,lpush等)返回对应的错误信息;对于不需要申请内存的指令(如get等)正常响应。redis是主从的集群redis,主redis在设置内存使用上限时,需要在系统中留一些内存空间给同步队列缓存(只有在你设置的是“不移除”的情况下,才不用考虑这个因素):

在这里插入图片描述

​ maxmemory-policy用来设置移除算法,有如下算法:

​ volatile-lru:使用LRU算法移除key,只对设置了过期时间的键;(最近最少使用)

​ allkeys-lru:在所有集合key中,使用LRU算法移除key

​ volatile-random:在过期集合中移除随机的key,只对设置了过期时间的键

​ allkeys-random:在所有集合key中,移除随机的key

​ volatile-ttl:移除那些TTL值最小的key,即那些最近要过期的key

​ noeviction:不进行移除。针对写操作,只是返回错误信息

在这里插入图片描述

​ maxmemory-samples用来设置使用算法时的样本数量,上述用到的lru算法和ttl算法并非都是十分精确的算法,而是估算值,因此,可以设置样本的大小,redis默认会基于这个大小数量的key进行算法计算:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++高级特性:C/C++内存结构模型(十一)

1、内存结构 C/C语言一只被认为是一种底层语言&#xff0c;与其他语言不一样&#xff0c;对内存结构理解是C/C程序员从入门到入土的开端。 其他编程语言对内存管理是透明的&#xff0c;程序员无序关心可以认为是一个黑盒&#xff1b;而C/C不一样理解好内存结构有利于编写健壮性…

碎碎念,最近做了几款小产品...

极简番茄时钟 一款 Mac 版「极简番茄时钟」软件。 知识卡片制作工具 主打简单&#xff0c;同时支持 Markdown 语法。 智能微信助手 让管理变得轻松&#xff0c;沟通更加高效。 感兴趣&#xff0c;欢迎来这里一起交流&#xff0c;限时免费 ~

【软件安装】(十六)双系统Ubuntu22.04引导启动菜单的默认项

一个愿意伫立在巨人肩膀上的农民...... 好学的人总是喜欢在电脑上安装双系统&#xff0c;可是安装好系统之后&#xff0c;就会出现默认启动优先级的苦恼&#xff0c;如果在Bios中设置Windows引导启动为优先启动&#xff0c;那么每次想要进如Ubuntu系统就都需要重新设置Bios。如…

基于 Redis 发布订阅实现服务注册与发现

写在前面 其实很少有公司会使用 Redis 来实现服务注册与发现&#xff0c;通常是ETCD、NACOS、ZOOKEEPER等等&#xff0c;但是也不妨碍我们了解。本文会先介绍 Redis 的发布/订阅模式&#xff0c;接着基于这个模式实现服务注册与发现。 Redis发布订阅流程图&#xff1a; Red…

北京半导体展会2024时间(入场时间+闭馆时间)

2024年第二十一届中国国际半导体博览会&#xff08;IC CHINA&#xff09; 时 间&#xff1a;2024 年 9 月 5 一 7 日 地 点&#xff1a;中国北京 北人亦创国际会展中心 作为中国半导体行业协会主办的唯一展览会&#xff0c;自 2003 年起已连续成功举办二十届&#xff0c;是…

ZCT-80零序电流互感器配继电器组合用,电流200/1.5mA JOSEF约瑟

ZCT-80零序电流互感器配继电器组合用,电流200/1.5mA ■ 互感器用于接地保护的装置 ■ 检测零序电流的互感器 ■ 适用于EOCR继电器 功能特点&#xff1a; 专用于剩余电流的检测。 与ELR继电器配合使用。 产品外壳采用ABS阻燃材料&#xff0c;抗干扰能力强&#xff0c;测量…

RFC 6071: IP Security (IPsec) and Internet Key Exchange (IKE) Document Roadmap

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/96882d1fb67b4383bc77c4dd421f7b

Ubuntu中的 Everything 搜索软件 ==> fsearch

本文所使用的 Ubuntu 系统版本是 Ubuntu 22.04 ! 在 Windows 中&#xff0c;我经常使用 Everything 来进行文件搜索&#xff0c;搜索效率比 Windows 自带的高出千百倍。 那么在 Ubuntu 系统中&#xff0c;有没有类似的软件呢&#xff1f;那必须有&#xff0c;它就是 FSearch 。…

【单调栈】3113. 边界元素是最大值的子数组数目

本文涉及的基础知识点 单调栈分类、封装和总结 LeetCode 3113. 边界元素是最大值的子数组数目 给你一个 正 整数数组 nums 。 请你求出 nums 中有多少个子数组&#xff0c;满足子数组中 第一个 和 最后一个 元素都是这个子数组中的 最大 值。 示例 1&#xff1a; 输入&#…

区块链 | OpenSea:Wyvern protocol

目录 Wyvern on the OpenSea 1 交易流程 1.1 卖家 1.2 买家 2 组成部分 2.1 WyvernProxyRegistry 2.2 OwnableDelegateProxy 2.3 NFT Contract 2.4 OpenSea Order Book 2.5 Wyvern Exchange Contract 3 总结 &#x1f951;原文&#xff1a;Wyvern on the …

交通气象站监测站

TH-GQX8交通运输在人们的日常生活中扮演着越来越重要的角色。然而&#xff0c;气候变化、环境污染等因素对交通安全产生了极大的影响。为了应对这些挑战&#xff0c;交通气象站监测站应运而生&#xff0c;成为守护交通安全的重要利器。 一、交通气象站监测站的功能 交通气象站…

路透社:美国SEC将拒绝以太坊ETF

4月25日&#xff0c;据路透社报道&#xff0c;美国SEC在下个月将拒绝以太坊现货ETF申请。根据4位知情人士表示&#xff0c;在最近几周与美国证券交易委员会&#xff08;SEC&#xff09;进行了会议之后&#xff0c;美国发行商和其他公司预计SEC将拒绝他们推出与以太坊价格挂钩的…

OpenMesh 网格高斯曲率计算(二)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 Mesh曲率特征通常指的是在三维几何网格(Mesh)上计算的曲率相关的一系列特征,包括主曲率、高斯曲率、平均曲率等。这些曲率特征提供了对Mesh表面形状的详细描述,对于表面形状分析、形状比较和几何建模等领域非常…

《C++的类型转换》

目录 一、c语言中的类型转换 1、隐式类型转化&#xff1a; 2、强制类型转化&#xff1a; 3、缺点 二、c新的类型转换 1、内置类型转为自定义类型 3、自定义类型转换为内置类型 三、C的规范的强制类型转换 1、C新增四种规范的类型转换的原因 2、static_cast 3、reint…

头歌实践教学平台:CG5-v1.0-简单光照效果

第2关&#xff1a;OpenGL球体镜面反射 一.任务描述 根据提示&#xff0c;在右侧修改代码&#xff0c;并自己绘制出图形。平台会对你编写的代码进行测试。 1.本关任务 为在场景中增加光照&#xff0c;需要执行以下步骤。 (1).设置一个或多个光源&#xff0c;设定它的有关属性…

信息系统项目管理师0074:数据集成(5信息系统工程—5.3系统集成—5.3.3数据集成)

点击查看专栏目录 文章目录 5.3.3数据集成1.数据集成层次2.异构数据集成5.3.3数据集成 数据集成的目的是运用一定的技术手段将系统中的数据按一定的规则组织成为一个整体,使得用户能有效地对数据进行操作。数据集成处理的主要对象是系统中各种异构数据库中的数据。数据仓库技术…

eclipse导入工程提示Project has no explicit encoding set

eclipse导入工程提示Project has no explicit encoding set 文章目录 eclipse导入工程提示Project has no explicit encoding set一、Eclipse的工程导入二、可能的问题1.在工程名下有黄色叹号 一、Eclipse的工程导入 用Eclipse的导入可以将原有工程导入到新环境中 具体方法是&…

1. 房屋租赁管理系统(基于springboot/vue的Java项目)

1.此系统的受众 1.1 在校学习的学生&#xff0c;可用于日常学习使用或是毕业设计使用 1.2 毕业一到两年的开发人员&#xff0c;用于锻炼自己的独立功能模块设计能力&#xff0c;增强代码编写能力。 1.3 亦可以部署为商化项目使用。 2. 技术栈 jdk8springbootvue2mysq5.7&8…

区块链与Web3.0:区块链项目的推广

数字信息时代&#xff0c;一场革命正在酝酿中&#xff0c;那就是区块链与Web3.0的结合。这种结合将会改变我们对于信息传输、存储和使用的方式&#xff0c;并有可能推动媒体行业向新的高度发展。这种转变不仅关系到我们如何获取和使用信息&#xff0c;也涉及到如何用创新的方式…

四、OSPF域间路由

注&#xff1a;区域&#xff08;area&#xff09;是以接口进行划分的 描述&#xff1a; R1的g0/0/1接口属于area 0 √ R1属于区域0和区域1 1.设计原则 1、OSPF区域的设计原则&#xff1a; 骨干区域有且只能存在一个 非骨干区域必须和骨干区域相连 多区域时&#…