redis数据结构基本语法

news/2024/5/5 20:14:12/文章来源:https://blog.csdn.net/jgdabc/article/details/126939712

Redis Study

学到技巧

快捷键

ctrl + [

typora很好用,有个问题就是换行会自动跟上面的格式,按删除键也无效

ctrl + [就会把前面的格式给稀释掉。

经验

有关typora上传博客园图片缩放的问题,办法就是在typora中粘贴图片以后发现缩放没有效果,然后就是去先点击缩放一下,然后就会出现style字段样式,这里指定的是zoom,我们把它改成width ,height这样的样式就可以起到效果。

the basic grammar of redis

String类型

  • Switching databases(切换数据库)

    select 1 
  • 将值移动到其它数据库

    将key这个键移动到一号数据库

    move key1 1
    

    image-20220919185425409

  • Clearing the database(清空数据库)

  1. flushall
    
  2. flushdb
    

1、flushAll 清空数据库并执行持久化操作,也就是RDB文件会发生改变,变成76个字节大小(初始状态下为76字节),所以执行flushAll之后数据库真正意义上清空了。

2、flushDB 清空数据库,但是不执行持久化操作,也就是说RDB文件不发生改变.而redis的数据是从RDB快照文件中读取加载到内存的,所以在flushDB之后,如果想恢复数据库,则可以直接kill掉redis-server进程,然后重新启动服务,这样redis重新读取RDB文件,数据恢复到flushDB操作之前的状态。

注意:要直接kill 掉redis-server服务,因为shutdown操作会触发持久化。

  • 查看端口占用

    1. lsof(list open files )

      lsof -i : 6379
      

      lsof -i 需要 root 用户的权限来执行

    2. netstat -tunlp | grep 8080
      

      参数说明如下

      -t (tcp) 仅显示tcp相关选项

      -u (udp)仅显示udp相关选项

      -n 拒绝显示别名,能显示数字的全部转化为数字

      -l 仅列出在Listen(监听)的服务状态

      -p 显示建立相关链接的程序名

  • 查看数据库当中所有的键

    keys *
    
  • 查看当前数据库的大小

    dbsize
    

    测试代码段

    127.0.0.1:6379> select 1
    OK
    127.0.0.1:6379[1]> dbsize
    (integer) 0
    127.0.0.1:6379[1]> set 2 3
    OK
    127.0.0.1:6379[1]> dbsize
    (integer) 1
    127.0.0.1:6379[1]>

  • 一些与键值有关的命令

    1. 一般赋值

      set hello helloword   
      
    2. 不存在就赋值

      setnx hello helloword
      
    3. 进行批量的赋值

      mset key1 value1 key2 value2 
      
    4. 原子性的批量赋值

      原子性的批量赋值的特点就是这些多个赋值之中,如下,结合不存在这种赋值的话,也就是当这种多个赋值之中,有的已经存在了,那么就不会进行赋值成功,那么另外一个页不会成功,这里类似sql中的事务

      msetnx hello helloword hello3 helloword3
    5. 设置对象类型的赋值

      set user:1 {name:sail,age:27}
      set user:2 {name:hello,age:28}
      

      获取到对应键的值

      get user:1
      
    6. 取值赋值

      getset hello "nice to meet you"
      
    7. 获取键对应的长度

      strlen hello
      
    8. 获取所有的键

      keys *
      
    9. 删除key

      del  hello
      
    10. 判断键是否存在

      exists hello
      
    11. 自增

      自增单位1(incr)

      先设定一个数字的值

      set num 1
      

      让这个数字的值自增

      incr num
      

      再重新获取到这个值

      get num
      

      image-20220919185443479

      自增设置步长(incrby)

      incrby num 10
      

      自减(decr)

      decr num1
      
    12. 截取键索引范围字段

      getrange hello 0 -1
      

      image-20220914212933164

    13. 指定索引位置替换

      setrange hello 2 r
      
    14. 设置过期时间

      setex hello 60 "hello word"
      
    15. 查看过期时间

      ttl hello
      

      image-20220919185524914

List 类型

redis这里这个类型其实可以认为是一个双端队列

所有的list命令都是以l开头

相关的命令

  • 从左边插入,相当于从双端对比、列额左边插入到列表的头部可以插入多个值

    lpush list one two three
    

    这样插入的话再从一个方向获取值的话就是按照先进后出的规则

    lrange list 0 -1
    

    image-20220915145927715

  • 还可与从右边进行push

    rpush list 2 3 4
    

    获取到值

    lrange list 0 -1
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q6JDIh68-1663585401083)(https://img2022.cnblogs.com/blog/2145006/202209/2145006-20220919185537039-353541965.png)]

​ 这样从右边push进去的话,然后lrange 取得话,就会变成先进先出了。这里可以理解为从右边进的话,其实还是lrange还是从左边取,这样就可以发现符合这样的规律。

  • 还可以给元素的前后进行插入赋值

    linsert list before 2 1
    

    image-20220919185602166

    linsert list after 4 5
    
    image-20220915153436256
  • 元素指定下标进行赋值

    lset list 0 one

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rBv4RNFl-1663585401084)(https://img2022.cnblogs.com/blog/2145006/202209/2145006-20220919185606817-2095471764.png)]

    • 索引范围取值

    lrange list 0 -1

    
    *  获取指定索引的值```redis 
    lindex list 0
    

    image-20220919185716577

    • 获取列表的长度

    llen list

    
    ![image-20220919185734415](https://img-blog.csdnimg.cn/img_convert/682751a20f79736dcd1d10e4c881614d.png)* 判断列表是否存在```redis
    exists list
    

    image-20220915155911882

    • 移除操作

      从左边进行移除

    lpop

    
    从右边移除```redis
    rpop 
    

    image-20220919185749643

    • 一次移除多个元素(需要指定元素移除)

      这种情况出现在list里面存在重复元素的时候,一次可以指定移除多个这样的元素

    lrem list 2 4

    
    ![image-20220919185801334](https://img-blog.csdnimg.cn/img_convert/d61b2be3b765c9d879644e453a8e750e.png)*  `截取指定索引范围当中的元素(这样的截取其实就是类似于一次lpop掉多个元素)```redis
    ltrim list 0 -1
    

    image-20220919185822311

    • 移除最后一个元素到新的列表当中

    这里其实将列表中头部的元素push到另外的一个列表当中

    rpoplpush list list2
    

    image-20220919185837598

set(无序不重复集合)

  • 基本的一些语法

    set集合添加元素

    sadd set set1
    sadd set set2
    

    查看集合当中存放的元素

    smembers set
    

    判断集合当中的元素是否存在

    存在返回1,不存在返回0

    sismember set hello
    

    计算出集合当中的元素个数

    scard set
    

    查找出集合当中随机的一个元素

    srandmember set
    

    集合运算逻辑

    • 1 求两个集合的差集

      sdiff set1 set2
      

      image-20220919185950764

    • 2 求两个集合的交集

      sinter set1 set2
      

      image-20220919190003170

    • 3 求两个集合的并集

      sunion set1 set2
      

      image-20220919190012650

  • 删除元素

    srem set1 hello
    
  • 删除随机元素

    spop set1
    

    image-20220919190025317

  • 移动元素

    将set1 集合当中的name移动到set集合当中

    smove  set1 set name
    

哈希

提供思维的理解图

image-20220919190036076

哈希赋值

  • 单个哈希赋值
hset hash f1 sail

获取到键对应的值

  • hget hash f1
    
  • 多个hash赋值

    hset hash f1 sail f2 sail1
    
  • 不存在才赋值

    hsetnx hash f4 1
    
  • 自增

    自增1

    hincrby hash f3 1
    

    设置自减的时候只需要将后面的数值设置为负数就可以

  • 取值

    hget hash f1
    
  • 取多个键值

    hmget hash f1 f2
    
  • 取到所有的值

    hgetall hash
    
  • 取到所有的键

    hkeys hash
  • 取到所有的值

    hvals hash
    
  • 获取长度

hlen hash
  • 判断字段是否存在

    hexists hash f1
    
  • 删除字段

hdel hash f1

zset

思维图

image-20220919175212628

zset是set的有序集合,set集合是无序不重复的,zset是有序不重复。

相比set,zset变得有序。

添加一个键的时候会对应一个值,二值对应的会有数字。这些数字其实就是可以作为排序的条件。

  • 赋值
zadd set1 1 one 2 two 3 three

image-20220919190053883

  • 取值(取所有的值)

    zrange set1 0 -1
    

    image-20220919190103271

  • 倒序取值

zrevrange set1 0 -1

image-20220919190113850

  • 统计元素到的个数
zcard set1

image-20220919190125372

  • 指定区间查看元素数量
zrange set1 0 -1
  • 进行排序

    • 正序排列

      zrangebyscore set1 -inf +inf
      

      image-20220919190135888

    • 从负无穷排序到指定的数字

       zrangebyscore set1 -inf 2
      

      image-20220919190151073

    • 排序限定结果条数

      从负无穷排序到2,然后限定条数是0~2条

       zrangebyscore set1 -inf 2 limit 0 2

      image-20220919190205782

    • 排序附带分数

      zrangebyscore set1 -inf +inf withscores
      

      image-20220919190216266

    • 倒序

      zrevrangebyscore

      语法格式一样

    • 删除元素

      • 删除指定的元素

        zrem set1 three
        

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WRy9bbTd-1663585401096)(C:/Users/jgdabc/AppData/Roaming/Typora/typora-user-images/image-20220919190226560.png)]

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

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

相关文章

Windows中使用SMB共享文件夹

SMB共享文件夹 简单步骤:打开【控制面板】 打开【启动或关闭windows功能】 打开【SMB1.0/CIFS 文件共享支持】 重启电脑 到磁盘中选择需要共享的文件夹 选中文件夹【属性】-> 【共享】->【共享】->添加【Everyone】用户 -> 权限【读取/写入】->确定共享 打开【…

那么我们应该如何优化Youtube的视频呢?

除了ins,Facebook,Twitter这类日常发帖分享型的社交网站外,还有其他的视频类网站也可以用于跨境电商的营销推广。作为视频类的社媒网站,YouTube可以说是全球第一大视频类社媒营销网站,在拓展视频内容的同时&#xff0c…

第3章 Kafka架构深入

3.1 Kafka工作流程及文件存储机制 Kafka中消息是以topic进行分类的,生产者生产消息,消费者消费消息,都是面向topic的。 topic是逻辑上的概念,而partition是物理上的概念,每个partition对应于一个log文件,该…

java线程池

目录 一、浅谈对线程池的理解 二、线程池常用类和接口 三、线程池的核心参数 四、线程池的状态 五、线程池的执行流程 六、常见的线程池 FixedThreadPool:线程数固定的线程池 CachedThreadPool:可缓存线程池,线程数根据任务动态调整的…

肯德尔(Kendall)相关系数概述及计算例

目录 1. 何谓相关(correlation)? 2. 肯德尔相关 3. 肯德尔相关的假设 4. 计算公式及代码示例 4.1 Tau-a 4.2 Tau-b 1. 何谓相关(correlation)? 相关是指一种双变量分析(bi-variate analysis&#xff…

不知道数字化转型有什么意义?实现数字化转型价值都有哪些路径

近些年来,随着人工智能、云计算、大数据、物联网、区块链等新一代前沿技术的普及应用,社会的方方面面都有了信息化、数字化的身影,并通过相关技术、理念、应用创造了从未体验过的数字化社会,对整个社会形式进行了一次深层次的转型…

JVM原理及优化_垃圾回收器

文章目录JVM原理及调优_垃圾回收器什么是垃圾收集器?垃圾回收器详解SerialParNewParallel ScavengeSerial OldParallnel oldCMSG1JVM原理及调优_垃圾回收器 什么是垃圾收集器? 垃圾收集器是垃圾回收算法(引用计数法、标记清除法、标记整理法…

PLM是什么?为什么要上PLM?有什么好处?

PLM是什么?或许早在五年前还有这个疑问,但如今已成为行业竞争的必需品。 PLM即对产品从创建、使用到最终报废,是一种对全生命周期产品数据信息进行管理的理念;是一种应用于在单一地点的企业内部、分散在多个地点的企业内部&#…

SpringBoot JavaBean对象拷贝 orika

前言: 日常开发中,经常会遇到将一个对象bean值复制到另一个bean,一般通过set方法一个一个属性写上去,比较麻烦。当然也有spring、apache的属性拷贝工具,这里介绍一下orika orika 是什么? Orika 是一个 Java Bean 映射框架,它可以递归地将数…

Oracle 11g第一次启动SQL Developer所出现的问题

Oracle 11g第一次启动SQL Developer提示缺少快捷方式 1)问题复刻 当第一次启动SQL Developer的时候提示我 :“Windows 正在查找SQLDEVELOPER.BAT。如果想亲自查找文件,请单击"浏览” 。这个时候如果没有点击浏览,过一会他会自动跳到图二,此时就算点击了修复也无济于事…

zabbix服务器搭建

文章目录zabbix1. 环境准备2. zabbix服务器安装3. 监控本机4. 通过zabbix-agent监控远程机器5. zabbix用户与用户群组6. 监控项与应用集7. 为监控项创建图形8. 自定义监控项9. 为自定义监控项创建图形10zabbix zabbix官网 1. 环境准备 主机ipzabbix_server192.168.44.10agen…

什么是自动采矿卡车autonomous mining trucks

自动采矿卡车 (AMT) 是无人驾驶的矿山重型车辆,可以感知环境并在矿山运输路面上导航,无需任何人工干预。AMT 降低了设备与辅助设备或配备的手动车辆 (EMV) 接触的风险。 矿业在世界经济中发挥着重要作用。随着发达国家追求零伤亡,进入技术工人…

Jenkins Pipeline项目实战

一、项目流程 Jenkins从git拉取指定tag代码 Jenkins构建代码、镜像以及推送镜像到镜像库 Jenkins通过Publish Over SSH通知远程服务器拉取镜像、远程服务器通过镜像启动容器二、实现流程 1、从代码仓中拉取Jenkinsfile文件 2、从git拉取指定tag代码 配置Git参数: 剩下的部分需…

Spring学习的第二天

1. Spring 管理第三方资源导入Druid 坐标<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency> <dependency>配置数据源对象作为Spr…

【牛客刷题】每日一练—ArrayList的实例强化

✨hello&#xff0c;进来的小伙伴们&#xff0c;你们好呐&#xff01;✨ &#x1f362;&#x1f362;系列专栏&#xff1a;【牛客刷题】 &#x1f32f;&#x1f32f;作者简介&#xff1a;一名大三在读的科班Java编程小白&#xff0c;星夜漫长&#xff0c;你我同行! &#x1f37…

383.赎金信

题目来源&#xff1a; 力扣https://leetcode.cn/problems/ransom-note/题目简介&#xff1a; 判断字符串a中的字母能不能构成字符串b&#xff0c;能的话就返回true&#xff0c;不能就返回false&#xff0c;字符串a里的字母每个都只能用一次&#xff0c;不能重复使用 思路&am…

Endpoint Central的IT资产管理(ITAM)

什么是 IT 资产管理 (ITAM) IT 资产管理 (ITAM) 是识别、发现、采购、管理、监控和处置企业网络中存在的所有公司拥有的数据、设备和软件元素的过程。ITAM 工具可确保集中查看网络中存在的所有资产以及软件和硬件详细信息。拥有完整的 ITAM 流程可以使您能够就收购新资产做出有…

笨方法学Python

前言 这本书指导你在Python中通过练习和记忆等技巧慢慢建设和建立技能,然后应用它们解决越来越困难的问题。在这本书的最后&#xff0c;你需要拥有必要的工具开始进行更多复杂程序的学习。我喜欢告诉大家&#xff0c;我的书带给你们“编程黑带”。意思是说你知道的基础知识足够…

『华强买瓜』奇袭好莱坞!Jupyter也能创建可交互仪表板啦!超全面的英语论文写作套路;神经辐射场NeRF工具包;前沿论文 | ShowMeAI资讯日报

&#x1f440;日报合辑 | &#x1f4c6;电子月刊 | &#x1f514;公众号下载资料 | &#x1f369;韩信子 &#x1f4e2; 好莱坞全明星版『华强买瓜』&#xff1a;你这 AI 保熟吗&#xff1f; https://weibo.com/2395607675/M61L994kN 一起来看看 AI 最近又搞出了什么好玩意儿…

gradle缓存路径

gradle缓存路径网上有很多配置教程,但是实际使用过程中发现不是很准确,验证下缓存配置 1.个人认为最优雅 在gradle的安装目录&#xff0c;编辑bin文件夹下的gradle文件&#xff0c;然后找到如下语句: # Add default JVM options here. You can also use JAVA_OPTS and GRADLE…