Redis数据库 ---- 五种数据类型常用命令汇总

news2024/11/20 20:25:31
  • ❤️ 作者简介:大家好我是小鱼干儿♛是一个热爱编程、热爱算法的大三学生,蓝桥杯国赛二等奖获得者
  • 🐟 个人主页 :https://blog.csdn.net/qq_52007481
  • 个人社区:【小鱼干爱编程】

文章目录

  • Redis
    • Redis键(key)
    • 数据库相关操作
    • Redis字符串(String)
      • 字符串的常用命令
      • 字符串的数据结构
    • Redis列表(List)
      • 列表常用命令
      • 列表的数据结构
    • Redis 集合(Set)
      • 集合的常用命令
      • 集合的数据结构
    • Redis 哈希(Hash)
      • 哈希的常用命令
      • 哈希数据结构
    • Redis有序集合Zset
      • 有序集合的常用命令


Redis

Redis键(key)

命令作用
keys *查看当前库所有key
exists key判断某个键是否存在
type key查看key地数据类型
del key删除指定地key
unlike key根据value选择非阻塞删除 仅将keys从keyspace元数据中删除,真正地删除会在后续异步操作
expire key 10设置key地存活时间,单位秒
ttl key查看还有多少秒过期,-1表示用不过期,-2表示已过期
set key value添加键值对

数据库相关操作

命令作用
select 1切换到数据库1
dbsize查看当前数据库地key
flushdb清空当前库
flushall通杀全部库

redis一共有16个数据库,默认使用的是0号数据库

Redis字符串(String)

String是redis最基本的数据类型,
String类型是二进制安全的,Redis的string可以包含任何数据,如图片。序列化的对象
String 类型是Redis最基本的数据类型,一个Redis中字符value最多可以是512M

字符串的常用命令

set key value 添加键值对

# 清空数据库
flushdb 
# 查看数据库中的键
keys *
#添加新数据
set k1 100
set k2 200
set k3 300

在这里插入图片描述
get key 取值

get k1

append key value 在原有得值后面追加新的内容

# 在键为text的值的后面添加world
append text world

在这里插入图片描述

setnx key value 只有在键不存在的时候可以设置值,能够避免覆盖的情况
在这里插入图片描述
incr key 对于整数,会自增1
decr key 对于整数 会减1
对k1自增或者自减
在这里插入图片描述

设置自增或自减步长
incrby key increment
decrby key increment

# 设置k1的值自增100
incrby k1 100

mset key1 value1 key2 value2 ... 同时设置多个键值对
mget key1 key2 ... 同时获取多个键值对
在这里插入图片描述
同时设置多个数据库中不存在的键值对,如果其中一个键存在,则所有的内容都不会被创建成功
msetnx key1 value1 key2 value2 …
在这里插入图片描述
strlen key 获取字符串的长度
在这里插入图片描述
getrange key start end 遍历输出

getrange name 0 -1

获取第一个字符第3个字符

getrange name 0 2

setrange key 开始位置 value 用新的值覆盖旧值
在这里插入图片描述

setex key 过期时间 value 设置值得同时设置过期时间,单位为秒

# 过期时间20秒 值为v1
setex k5 20 v1

获取旧得值填充新的值
getset key value

getset k1 33

在这里插入图片描述

字符串的数据结构

String的数据结构为简单动态字符串(Simple Dynamic String)是可以修改的字符串,内部的实现结构和python中的list类似,都是先预先分配一些空间,当空间不够用会自动扩充空间的大小,最大长度为512M

Redis列表(List)

Redis列表是简单的字符串列表,按照插入顺序排序,你可以添加应给元素到表头或者尾

它的底部实际是个双向链表,对两端的操作性性能很高,通过索引下标的操作中间节点的性能较差。

列表常用命令

  • lpush/rpush key value1 value2 value3 从左边/右边插入一个或者多个值
  • lpop/rpop key 从左边/右边弹出一个值 值在键在,键光键亡
  • rpoplpush key1 key2 从key1列表右边弹出一个值,插入到key2列表的左边
  • lrange key start stop 按照索引下标获得元素(从左到右)

代码演示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • lindex key index 按照索引下标获得元素

  • llen key 获取列表的长度
    在这里插入图片描述

  • linsert key before value newvalue 在value的前面插入newvalue
    在3的前面插入99

linsert k1 before 3 99

在这里插入图片描述
在99的后面插入55

linsert k1 after 99 55

在这里插入图片描述

  • lrem key n value 从左边删除n个value(删除重复值)

删除k4列表中左面3个2

lpush k4 1 2 2 3 2 1 5 2
lrem k4 3 2
lrange k4 0 -1

在这里插入图片描述

  • lset key index value 将列表key下标为index的值替换成value
lpush k5 1 2 3 4 5
# 将索引为2的值替换成22
lset k5 2 22
# 将索引为3的值替换成44
lset k5 3 44

在这里插入图片描述

列表的数据结构

list的数据结构是快速链表
首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist压缩列表,所有的元素在一块连续的内存空间
元素较多时,才会改成quicklist,
quicklist是将多个ziplist用双向链表的形式链接起来的数据结构

Redis 集合(Set)

是一个无序不重复的序列,集合成员是唯一的
操作类似于list
底层是一个value为null的hash表,添加,删除,查找的复杂度都是O(1)

集合的常用命令

  • sadd key value1 value2 ... 将元素添加到集合key中,如果新添加的元素已经在集合中存在,则会被忽略
# 向s1集合中添加元素
sadd s1 1 2 3 4 4 4
  • smembers key 取出该集合的所有值
# 查看s1中的集合
smembers s1

在这里插入图片描述

  • sismember key value 判断集合中是否存在该值 有返回1 没有返回0
sadd s2 1 2 3 4 5
sismember s2 2  # 返回1
sismember s2 6  # 返回0
  • scard key 返回集合的个数
scard s2

在这里插入图片描述

  • srem key value1 value2 ... 删除集合中的某些元素
sadd s3 1 2 3 4 5 6 7 8
srem s3 3 4 7  # 删除成功
srem s3 3   # 当删除的元素不存在时,返回0,不会报错
  • spop key [count] 随机弹出一个元素,或者多个元素
spop s3  # 随机弹出一个元素
spop s3 2  # 随机弹出2个元素
  • srandmember key [count] 随机从该集合中取出n个值,不会从集合中删除,默认n为1,当n大于集合的长度时,返回集合中的所有元素
srandmember s3  # 随机取出一个值
srandmember s3 2  # 随机取出2个值
  • smove source destination value 将一个值从一个集合移动到另一个集合
sadd s4 1 2 3
sadd s5 6 7 8
# s4中的2移动到s5中
smove s4 s5 2

redis中的集合和数学中的集合一样也有交集并集差集的计算方式

  • sinter key1 key2 返回两个集合的交集

  • sunion key1 key2 返回两个集合的并集

  • sdiff key1 key2 返回两个集合的差集

实例
在这里插入图片描述

集合的数据结构

集合的数据结构dict字典,字典是使用哈希表实现的,所有的的value值都指向同一个外部值

Redis 哈希(Hash)

Redis hash 是一个键值对集合,是string类型和field和value的映射表,hash适合存储对象
在这里插入图片描述

哈希的常用命令

  • hset key field value 将哈希表 key 中的字段 field 的值设为 value 。
  • hget key field 获取在哈希表中指定 key 的所有字段和值
  • hmset key field1 value1 field2 value2同时将多个 field-value (域-值)对设置到哈希表 key 中。
  • hmget key field1 field2 获取所有给定字段的值
  • hexists key filed 查看哈希表 key 中,指定的字段是否存在。
  • hkeys key 获取所有哈希表中的字段
  • hvals key 获取哈希表中所有值。
  • hsetnx key field value 只有在字段 field 不存在时,设置哈希表字段的值。
    hlen key 获取哈希表中字段的数量
  • hincrby key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment
  • hincrbyfloat key field increment为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
  • hdel key field1 [field2] 删除一个或多个哈希表字段

哈希数据结构

Hash类型对应的数据结构是两种,ziplist(压缩列表),hashtable(哈希表)
field-value长度短且个数较少时,使用的是ziplist,否则使用的是hashtable

Redis有序集合Zset

有序集合和普通集合非常相似,都是没有重复元素的序列,区别在于,有序集合的每一个元素都关联了一个评分(score) 这个评分被用来按照最低分到最高分的方式排序有序集合中的元素,
注意:集合中的元素是不可重复的,但是评分可以重复

有序集合的常用命令

  • zadd key key score1 value1 score2 value2 ... 将一个或者多个member元素以及score值加入到有序集合中

  • zrange key start stop 返回有序集合key中下标在start stop之间的元素,添加参数 withscores,连同分数和值返回到结果集

  • zrangebyscore key min max 返回有序集合中所有score 值介于min 和max之间包括min和max的成员 返回的结果是按score从小到大

  • zrevrangebyscore key min max 返回有序集合中所有score 值介于min 和max之间包括min和max的成员 返回的结果是按score从大到小

  • zcard key 获取有序集合的成员数

  • zcount key min max 计算在有序集合中指定区间分数的成员数

  • zincrby key increment member 有序集合中对指定成员的分数加上增量 increment

  • zinterstore destination numkeys key [key ...] 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 destination 中

  • zlexcount key min max 在有序集合中计算指定字典区间内成员数量

  • zrank key member 返回有序集合中指定成员的索引

  • zrem key member [member ...] 移除有序集合中的一个或多个成员

  • zremrangebyscore key min max 移除有序集合中给定的分数区间的所有成员

  • zscore key member 返回有序集中,成员的分数值

在这里插入图片描述

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

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

相关文章

Java面向对象:对象的概念及面向对象的三个基本特征

面向对象简称 OO(Object Oriented),20 世纪 80 年代以后,有了面向对象分析(OOA)、 面向对象设计(OOD)、面向对象程序设计(OOP)等新的系统开发方式模型的研究。…

element-ui 中 el-tree 和 el-table 样式调整

使用 el-tree 和 el-table 时&#xff0c;往往需要根据项目整体环境做一些样式调整&#xff0c;记录一下常用样式。 el-tree <!-- 树结构 --> <el-treeref"tree":data"data":props"defaultProps":default-expand-all"isExpanded&…

51单片机烟雾报警器mq2烟雾报警ADC0832采集实践制作DIY- GC0026-烟雾报警器

一、功能说明&#xff1a; 基于51单片机设计-烟雾报警器 功能介绍&#xff1a; STC89C52单片机&#xff08;AT89C51/52&#xff09;lcd1602adc0832mq2烟雾传感器蜂鸣器2个按键设定报警阈值 1.通过ADC0832采集MQ2烟雾输出的电压换算位烟雾浓度0~100 2.如果烟雾浓度超过设定…

机器学习9衡量线性回归法的指标,MSE,RMS,MAE

文章目录一、衡量线性回归法的指标&#xff0c;MSE,RMS,MAE1、MSE均方误差&#xff08;Mean Squared Error&#xff09;2、RSE均方误差&#xff08;Root Mean Squared Error&#xff09;3、平均绝对误差MAE&#xff08;Mean Absolute Error&#xff09;二、演示&#xff1a;三、…

清华、北大、中科大、UMA、MSU五位博士生畅聊深度学习理论

点击蓝字关注我们AI TIME欢迎每一位AI爱好者的加入&#xff01;伴随着深度学习的蓬勃发展&#xff0c;进入人们视线的好像都是算法或AlphaGo等应用层面的东西。但是在理论上&#xff0c;深度学习似乎却没有很出圈的相关理论。因此&#xff0c;部分人也在批评深度学习是缺乏理论…

易基因课程回顾|表观遗传学和表观育种在品种改良中的应用研究

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 传统作物育种包括杂交、选择所需性状的遗传变异&#xff0c;导致遗传基础缩窄和遗传多样性缺失&#xff0c;从而阻碍作物改良。表型性状受遗传学和表观遗传学影响&#xff0c;利用表观遗传…

简单个人网页设计作业 静态HTML个人主题网页作业 DW个人网站模板下载 大学生简单个人网页作品代码 个人网页制作 学生个人网页Dreamweaver设计作业

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

Spring框架(十二):实现日志功能通过SpringBean后处理器

实现日志功能通过SpringBean后处理器引子需求分析实现Log功能Spring Bean的后置处理器引子 痛定思痛&#xff0c;主要问题出现在自己雀氏不熟悉框架底层、一些面试题&#xff0c;以及sql的一些情况淡忘了。 本章节的开始是对于过去的重新回顾&#xff0c;当然&#xff0c;我也…

技术分享 | 使用 Zabbix + Grafana 搭建服务器监控系统

搭建 Linux 服务器监控的目的是防止以下现象&#xff1a;自己有一台阿里云服务器内存是 2g 的 , 多开一些软件就会把内存和 CPU 使用率弄的很高&#xff0c;最终导致服务器卡死。 所以基于这个痛点&#xff0c;想知道当前的 CPU 和内存是多少。阿里云 ECS 控制台中也提供对服务…

【自适应滤波】基于FxLMS的样条自适应滤波算法分析(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

DockerCompose安装、使用及微服务部署实操

1 什么是DockerCompose DockerCompose是基于Compose文件帮助我们快速的部署分布式应用。 解决容器需手动一个个创建和运行的问题&#xff01; Compose文件本质上是一个文本文件&#xff0c;其通过指令定义集群中的每个容器如何运行。 我们可以将其看做是将多个docker run命令…

RTLinux的介绍

RTLinux RTLinux是由美国新墨西哥州的fsmlabs(finite state machine labs, 有限状态机实验室)公司开发的、利用linux开发的面向实时和嵌入式应用的操作系统。在rtlinux宣言中&#xff0c;这样描述rtlinux &#xff1a; rtlinux is the hard realtime variant of linux that mak…

基于LLVM的AFL分析

简介 Fuzzing是指通过构造测试输入&#xff0c;对软件进行大量测试来发现软件中的漏洞的一种模糊测试方法。当前大多数远程代码执行和特权提升等比较严重的漏洞都是使用Fuzzing技术挖掘的&#xff0c;Fuzzing技术被证明是当前鉴别软件安全问题方面最强大测试技术。 然而Fuzzin…

Linux Shell 脚本的10个高频面试问答

Linux 的浩瀚无垠&#xff0c;使人总能每次都提交与众不同的内容。这些内容不仅对他们的职业生涯很有用&#xff0c;同时也让他们增长知识。在此&#xff0c;我们就尝试这么去做&#xff0c;至于能取得多大的成功&#xff0c;就由我们的读者朋友们来判断吧。 在此&#xff0c;…

CopyOnWriteArrayList真的线程安全吗?

前几天刷博客时&#xff0c;无意中看到一篇名为《CopyOnWriteArrayList真的完全线程安全吗》博客。心中不禁泛起疑问&#xff0c;它就是线程安全的啊&#xff0c;难道还有啥特殊情况&#xff1f; 我们知道CopyOnWrite的核心思想正如其名&#xff1a;写时复制。在对数据有修改操…

只要背着电脑,他可以去任何地方

12月是微软全球开发者月&#xff0c;MSDN 微软开发者社区将在此期间推出特别专栏《技术狂旅》&#xff0c;解读这些技术狂热爱好者的个人经历&#xff0c;循着他们的人生旅程看到我们自己的影子&#xff0c;希望能带给你一些启发或激励&#xff0c;一起探寻自身更多的可能性。 …

Android三种数据存储的方式

文章目录Android数据存储技术持久化技术文件存储将数据存储到文件当中示例_将数据存储到文件当中示例_从文件当中读取数据SharedPreferences存储将数据存储到SharedPreferences1.Context类中getSharedPreferences()方法2.Activity类中的getSharedPreferences()方法往SharedPref…

html+css鼠标悬停发光按钮![HTML鼠标悬停的代码]使用HTML + CSS实现鼠标悬停的一些奇幻效果!

源码如下: <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> <style> *{ /* 初始化 清除页面元素得内外边距 */ paddin…

【HTML期末作业】大学生抗疫感动专题网页设计作业 抗疫最美逆行者网页 致敬疫情感动人物网页设计制作

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

LIN总线入门

文章目录 前言一、LIN简介1.1 什么是LIN&#xff1f;1.2 为什么要LIN总线1.3 LIN的发展历史1.4 LIN子网1.5 LIN节点1.6 LIN总线特点 二、LIN的协议层2.1 帧结构2.1.1 同步间隔段(Break Field)2.1.2 同步段(Sync Byte Field)2.1.3 受保护 ID 段(Protected Identifier Field)2.1.…