redis学习(二)——redis常见命令及基础数据类型

数据类型
基础数据类型
  • 字符串 String abc
  • Map集合 Hsah {name:“zhangsan”,age:18}
  • 列表 List [a, b, c, d]
  • Set集合 Set {a,b,c}
  • 有序Set集合 SortSet {a:1,b:2,c:3}
特殊数据类型
  • GEO 地理坐标 {A:(100.2,35.1)}
  • BitMap 位图,只存储0和1 01101011101
  • HyperLog 基数,两个数据集不重复元素的个数 01101011101
通用命令
  • KEYS 查看符合条件的KEY
127.0.0.1:6379[1]> KEYS *
1) "zhangsan"
2) "lisi"
3) "wangwu"
  • DEL 删除指定的KEY,可跟多个参数
127.0.0.1:6379[1]> DEL zhangsan
(integer) 1
127.0.0.1:6379[1]> KEYS *
1) "lisi"
2) "wangwu"
  • EXISTS 判断KEY是否存在,可跟多个参数
127.0.0.1:6379[1]> EXISTS zhangsan
(integer) 0
127.0.0.1:6379[1]> EXISTS lisi wangwu
(integer) 2
  • EXPIRE:给KEY设置一个过期时间
  • TTL:查看KEY的剩余有效期(过期后返回-2)
127.0.0.1:6379[1]> EXPIRE lisi 20
(integer) 1
127.0.0.1:6379[1]> TTL lisi
(integer) 16
127.0.0.1:6379[1]> EXISTS lisi 
(integer) 1
127.0.0.1:6379[1]> TTL lisi
(integer) -2
127.0.0.1:6379[1]> EXISTS lisi 
(integer) 0
127.0.0.1:6379[1]> KEYS *
1) "wangwu"
String类型

字符串类型,value为字符串,格式有三种,本质上都是字符串

  • string:普通字符串

  • int:整数类型,可以做自增、自减操作

  • float:浮点类型,可以做自增、自减操作

String类型常见命令
  • SET 添加String类型键值对,如果已存在KEY则修改VALUE
127.0.0.1:6379[1]> KEYS *
1) "wangwu"
127.0.0.1:6379[1]> SET zhangsan 20
OK
127.0.0.1:6379[1]> KEYS *
1) "zhangsan"
2) "wangwu"
127.0.0.1:6379[1]> SET zhangsan 15
OK
127.0.0.1:6379[1]> GET zhangsan
"15"
  • GET 根据KEY值获取对应VALUE
127.0.0.1:6379[1]> GET wangwu
"18"
  • MSET 批量添加String类型键值对
127.0.0.1:6379[1]> KEYS *
1) "zhangsan"
2) "wangwu"
127.0.0.1:6379[1]> MSET lisi 20 zhangsan 25 zhaoliu 22 
OK
127.0.0.1:6379[1]> KEYS *
1) "zhangsan"
2) "lisi"
3) "zhaoliu"
4) "wangwu"
  • MGET 批量获取VALUE
127.0.0.1:6379[1]> MGET zhangsan lisi zhaoliu
1) "25"
2) "20"
3) "22"
  • INCR 让一个整形的KEY自增1
127.0.0.1:6379[1]> GET zhangsan
"25"
127.0.0.1:6379[1]> INCR zhangsan
(integer) 26
127.0.0.1:6379[1]> INCR zhangsan
(integer) 27
  • INCRBY 让一个整形KEY自增指定数
127.0.0.1:6379[1]> GET zhangsan
"27"
127.0.0.1:6379[1]> INCRBY zhangsan 2
(integer) 29
127.0.0.1:6379[1]> INCRBY zhangsan -1
(integer) 28
127.0.0.1:6379[1]> INCRBY zhangsan -1
(integer) 27
  • INCRBYFLOAT 让一个浮点类型自增指定数
127.0.0.1:6379[1]> SET float 17.5
OK
127.0.0.1:6379[1]> GET float
"17.5"
127.0.0.1:6379[1]> INCRBYFLOAT float 1.5
"19"
127.0.0.1:6379[1]> 
127.0.0.1:6379[1]> INCRBYFLOAT float 1.5
"20.5"
  • SETNX 添加一个String类型的键值对,前提是这个key不存在,否则不执行
127.0.0.1:6379[1]> KEYS *
1) "zhangsan"
2) "lisi"
3) "zhaoliu"
4) "wangwu"
127.0.0.1:6379[1]> SETNX zhangsan 11
(integer) 0
127.0.0.1:6379[1]> GET zhangsan
"27"
127.0.0.1:6379[1]> SETNX child 11
(integer) 1
127.0.0.1:6379[1]> GET child
"11"
  • SETEX 添加一个String类型的键值对,并且指定有效期 参数为key second value
127.0.0.1:6379[1]> SETEX tom 10 aaa
OK
127.0.0.1:6379[1]> TTL tom
(integer) 5
KEY结构

如果想存储两个相同的KEY,可以用:隔开多个单词形成层级结构,在图形化的页面上可以看到层级结构

127.0.0.1:6379[1]> set com:redisStudy1:zhangsan 20
OK
127.0.0.1:6379[1]> set com:redisStudy2:zhangsan 22
OK
127.0.0.1:6379[1]> set com:redisStudy1:lisi 20
OK
127.0.0.1:6379[1]> set com:redisStudy2:lisi 30
OK

在这里插入图片描述

HASH类型

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时需要将整个字符串替代,很不方便。Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD。

Hash类型常见命令
  • HSET key field value [field value …]添加或修改hash类型key的field的值
127.0.0.1:6379[2]> hset zhangsan age 18 sex 0
(integer) 2
127.0.0.1:6379[2]> KEYS *
1) "zhangsan"
  • HGET key field 获取hash类型key的field值
127.0.0.1:6379[2]> HGET zhangsan age
"18"
  • HMSET 批量添加一个hash类型的多个key和field,redis 4.0.0之后已被弃用,用HSET也可达到相同效果
  • HGETALL 获取一个hash类型的所有key和field值
127.0.0.1:6379[2]> HGETALL zhangsan
1) "age"
2) "18"
3) "sex"
4) "0"
  • HKEYS 列出hash类型key的所有field值
127.0.0.1:6379[2]> HKEYS zhangsan
1) "age"
2) "sex"
  • HVALS 列出hash类型key的所有field的值
127.0.0.1:6379[2]> HVALS zhangsan
1) "18"
2) "0"
  • HINCRBY 让一个hash类型的key的field的value值按指定数增长
127.0.0.1:6379[2]> HINCRBY zhangsan age 1
(integer) 19
127.0.0.1:6379[2]> HINCRBY zhangsan age 1
(integer) 20
  • HSETNX 添加一个hash类型的key的field的value值,前提是这个field不存在,否则不执行
List类型

Redis中的list类型类似双向链表结构,支持正向搜索和反向搜索。特点:

  • 有序
  • 元素可以重复
  • 插入和删除快
  • 查询速度一般
List类型常见命令
  • LPUSH 在list左侧插入元素,如果没有,则创建list再插入,注意是左侧插入,所以顺序和输入的属性相反
127.0.0.1:6379[3]> LPUSH namelist zhangsan lisi
(integer) 2
127.0.0.1:6379[3]> LRANGE namelist 0 1
1) "lisi"
2) "zhangsan"
  • LPOP 移除并返回list左侧第一个元素,如果没有返回nil
127.0.0.1:6379[3]> LPOP namelist
"lisi"
127.0.0.1:6379[3]> LRANGE namelist 0 2
1) "zhangsan"
  • RPUSH 在list右侧插入元素
127.0.0.1:6379[3]> RPUSH namelist wangwu zhangsan zhaoliu 
(integer) 4
127.0.0.1:6379[3]> LRANGE namelist 0 5
1) "zhangsan"
2) "wangwu"
3) "zhangsan"
4) "zhaoliu"
  • RPOP 移除并返回list右侧第一个元素,如果没有返回nil
127.0.0.1:6379[3]> RPOP namelist
"zhaoliu"
127.0.0.1:6379[3]> LRANGE namelist 0 5
1) "zhangsan"
2) "wangwu"
3) "zhangsan"
  • LRANGE 返回范围内的所有list元素,左闭右闭
127.0.0.1:6379[3]> LRANGE namelist 0 5
1) "zhangsan"
2) "wangwu"
3) "zhangsan"
  • BLPOP 移除并返回list左侧第一个元素,可以设置等待时间,在没有元素时先等待一段时间,不会立刻返回
  • BRPOP 移除并返回list右侧第一个元素,可以设置等待时间,在没有元素时先等待一段时间,不会立刻返回
  • LSET value index element 设置list下标为index的元素为element
127.0.0.1:6379[3]> LRANGE namelist 0 5
1) "lisi"
2) "zhangsan"
127.0.0.1:6379[3]> LSET namelist 0 wangwu
OK
127.0.0.1:6379[3]> LRANGE namelist 0 5
1) "wangwu"
2) "zhangsan"
SET类型

set可以看做一个value都为空的hashMap,set类型特点:

  • 无序
  • 不可重复
  • 查找快
  • 支持交集、并集、差集
SET类型常见命令
  • SADD 往SET类型里面添加元素
127.0.0.1:6379[4]> SADD zhangsan lisi wangwu
(integer) 2
127.0.0.1:6379[4]> SADD lisi wangwu zhangsan zhaoliu mazi
(integer) 4
127.0.0.1:6379[4]> SMEMBERS zhangsan
1) "lisi"
2) "wangwu"
127.0.0.1:6379[4]> SMEMBERS lisi
1) "zhangsan"
2) "mazi"
3) "zhaoliu"
4) "wangwu"
  • SREM 从SET类型中移除元素
127.0.0.1:6379[4]> SREM zhangsan wangwu
(integer) 1
127.0.0.1:6379[4]> SMEMBERS zhangsan
1) "lisi"
  • SCARD 返回SET中元素个数
127.0.0.1:6379[4]> SCARD lisi
(integer) 4
  • SISMEMBER 判断元素是否存在
127.0.0.1:6379[4]> SISMEMBER zhangsan wangwu
(integer) 0
127.0.0.1:6379[4]> SISMEMBER lisi wangwu
(integer) 1
  • SMEMBERS 获取SET类型中的所有元素
127.0.0.1:6379[4]> SMEMBERS lisi
1) "zhangsan"
2) "mazi"
3) "zhaoliu"
4) "wangwu"
  • SINTER 求交集
127.0.0.1:6379[4]> SINTER zhangsan lisi
(empty array)
  • SDIFF 求差集
127.0.0.1:6379[4]> SDIFF zhangsan lisi
1) "lisi"
127.0.0.1:6379[4]> SDIFF lisi zhangsan
1) "zhangsan"
2) "wangwu"
3) "zhaoliu"
4) "mazi"
  • SUNION 求并集
127.0.0.1:6379[4]> SUNION zhangsan lisi
1) "zhangsan"
2) "lisi"
3) "zhaoliu"
4) "mazi"
5) "wangwu"
ZSET类型

ZSET是一个可排序的SET,SET里面的每一个元素有一个score属性,可以根据score属性排序,ZSET特点:

  • 可排序
  • 元素不重复
  • 查询速度快

ZSET常被用来实现排行榜功能

ZSET类型常见命令
  • ZADD key score member 给ZSET添加元素
127.0.0.1:6379[5]> ZADD nameset 100 zhangsan  98 lisi 
(integer) 2
  • ZREM 删除ZSET中的元素
127.0.0.1:6379[5]> ZREM nameset zhangsan
(integer) 1
  • ZSCORE 获取ZSET元素的score值
127.0.0.1:6379[5]> ZSCORE nameset lisi
"98"
  • ZRANK 获取ZSET中指定元素的排名,从0开始,正序
  • ZREVRANK 获取ZSET中指定元素的排名,从0开始,逆序
127.0.0.1:6379[5]> ZRANGEBYSCORE nameset 1 100
1) "wangwu"
2) "zhangsan"
3) "zhaoliu"
4) "mazi"
5) "lisi"
127.0.0.1:6379[5]> ZRANK nameset mazi
(integer) 3
127.0.0.1:6379[5]> ZREVRANK nameset mazi
(integer) 1
  • ZCARD 获取ZSET中元素数量
127.0.0.1:6379[5]> ZCARD nameset
(integer) 5
  • ZCOUNT key min max 获取score值在min和max之间的元素数量
127.0.0.1:6379[5]> ZCOUNT nameset 0 100
(integer) 5
  • ZINCRBY 让ZSET中的指定元素按照指定数递增
127.0.0.1:6379[5]> ZSCORE nameset zhangsan
"66"
127.0.0.1:6379[5]> ZINCRBY nameset 2 zhangsan
"68"
127.0.0.1:6379[5]> ZINCRBY nameset 2 zhangsan
"70"
  • ZRANGE key min max 获取排序之后的下标从 min到max的元素,正序
  • ZREVRANGE key start end 获取排序之后的下标从start到end的元素,逆序
127.0.0.1:6379[5]> ZRANGE nameset 0 3
1) "wangwu"
2) "zhangsan"
3) "zhaoliu"
4) "mazi"
127.0.0.1:6379[5]> ZREVRANGE nameset 0 3
1) "lisi"
2) "mazi"
3) "zhaoliu"
4) "zhangsan"
  • ZRANGEBYSCORE key min max 获取排序后的score值再min和max之间的元素,正序
  • ZREVRANGEBYSCORE key max min 获取排序后的score值再min和max之间的元素,逆序,注意参数不同
127.0.0.1:6379[5]> ZRANGEBYSCORE nameset 0 100
1) "wangwu"
2) "zhangsan"
3) "zhaoliu"
4) "mazi"
5) "lisi"
127.0.0.1:6379[5]> ZREVRANGEBYSCORE nameset 100 0
1) "lisi"
2) "mazi"
3) "zhaoliu"
4) "zhangsan"
5) "wangwu"
  • ZINTER,ZDIFF,ZUNION 交集,差集,并集

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

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

相关文章

详解CAN通信的标识符掩码和标识符列表两种过滤机制

CAN 通信的应用非常广泛,本文不涉及CAN通信的基础配置,重点分析一下STM32和GD32的CAN通信两种ID过滤方式。 首先,不管是STM32还是GD32,实现CAN通信ID过滤的机制和原理一定是一样的,只是用到的寄存器有差别。 1. ID过…

计算机视觉简介(1)

任何计算机视觉处理流程都始于成像系统,它从景物中捕获反射出来的光线,并将光信号转换成计算机可以读取和处理的图像格式 在计算机成像技术发展的早期,图像通过把胶卷或印刷图像素 化后获得;而现在图 像通常直接由数码相机获取&a…

消息驱动 —— SpringCloud Stream

Stream 简介 Spring Cloud Stream 是用于构建消息驱动的微服务应用程序的框架,提供了多种中间件的合理配置 Spring Cloud Stream 包含以下核心概念: Destination Binders:目标绑定器,目标指的是 Kafka 或者 RabbitMQ&#xff0…

记录一次springboot使用定时任务中@Async没有生效的场景

环境说明 jdk21springboot 3.0.11 springcloud 2022.0.0 spring-cloud-alibaba 2022.0.0.0 在开发一个定时触发的任务的时候,由于开发执行任务的函数比较耗费时间,所以采用异步解决问题。 发现并没有按照预期的触发 经询问后,发现当前类的…

2023年中国隆鼻行业发展历程及趋势分析:隆鼻手术市场将实现进一步增长[图]

隆鼻术就是以各种植入材料置入为主要方法,隆起或抬高鼻部形态为主要目的的鼻整形术式。隆鼻术可能是开展最多的整形美容手术之一。隆鼻术也是一种很成熟的美容手术,操作较为简单、安全、风险较小,也易于接受。 隆鼻行业分类 资料来源&#x…

这道面试题工作中经常碰到,但 99% 的程序员都答不上来

小时候都被问过一个脑筋急转弯,把大象放进冰箱有几个步骤?我们一开始都会抓耳挠腮,去想着该如何把大象塞进冰箱。最终揭晓的答案却根本不关心具体的操作方法,只是提供了 3 个步骤组成的流程,「把冰箱打开,把…

Notepad++提取含有特定字符串的行

ctrl M快捷键,进入"标记" 页面 标记所在行–循环查找-- 正则表达式 – 输入关键字 – 全部标记 – Copy Marked Text 关键字格式如下: .*关键字.*ctrl v,粘贴即可。

深度学习基础知识 nn.Sequential | nn.ModuleList | nn.ModuleDict

深度学习基础知识 nn.Sequential | nn.ModuleList | nn.ModuleDict 1、nn.Sequential 、 nn.ModuleList 、 nn.ModuleDict 类都继承自 Module 类。2、nn.Sequential、nn.ModuleList 和 nn.ModuleDict语法3、Sequential 、ModuleDict、 ModuleList 的区别…

阿里云数据库MongoDB恢复到本地

共两种方式,建议使用第二种的逻辑恢复,比较方便快捷 一、下载物理备份文件 下载的格式是xb的,主要跟实例创建时间有关,2019年03月26日之前创建的实例,物理备份文件格式为tar,后面全部都是xb的格式了&#…

PTE阶段规划

目录 复习的各个阶段 线下应该如何 rs应对 从来都是流利度大于内容 推荐的练习网站 口语 DI 关键词是不能念错 口语 RL rl每日练习方法 ASQ 写作 swt 阅读 一半靠机经 听力 口语和听力 考模版来熟悉 熟悉模版 强调的是,整个的逻辑思维 字字和句句都…

【数据结构】排序

🐇 🔥博客主页: 云曦 📋系列专栏:数据结构 💨吾生也有涯,而知也无涯 💛 感谢大家👍点赞 😋关注📝评论 文章目录 前言一、排序的概念及运用二、常…

基于vue框架的uniapp小程序开发发现了新大陆

项目场景: 在基于vue框架的uniapp小程序开发中,在页面跳转时,当前页路径带参数,在跳转页中接受数据除了用官方推荐的保留当前页面,跳转到应用内的某个页面,使用onLoad(option)接受数据,但是我发…

TensorFlow入门(十四、数据读取机制(1))

TensorFlow的数据读取方式 TensorFlow的数据读取方式共有三种,分别是: ①预加载数据(Preloaded data) 预加载数据的方式,其实就是静态图(Graph)的模式。即将数据直接内嵌到Graph中,再把Graph传入Session中运行。 示例代码如下: import tensorflow.compat.v1 as tf tf.disabl…

CDN,DNS,ADN,SCDN,DCDN,ECDN,PCDN,融合CDN的介绍

一、CDN是什么? CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之…

Windows系统搭建VisualSVN服务结合内网穿透实现公网访问

文章目录 前言1. VisualSVN安装与配置2. VisualSVN Server管理界面配置3. 安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4. 固定公网地址访问 前言 SVN 是 subversion 的缩写,是一个开放源代码的版本控制系统…

Ubuntu右上角不显示网络的图标解决办法

一.line5改为true sudo vim /etc/NetworkManager/NetworkManager.conf 二.重启网卡 sudo service network-manager stop sudo mv /var/lib/NetworkManager/NetworkManager.state /tmp sudo service network-manager start

超高频RFID模具精细化生产管理方案

近二十年来,我国的模具行业经历了快速发展的阶段,然而,模具行业作为一个传统、复杂且竞争激烈的行业,企业往往以订单为导向,每个订单都需要进行新产品的开发,从客户需求分析、结构确定、报价、设计、物料准…

大数据-玩转数据-Flink 海量数据实时去重

一、海量数据实时去重说明 借助redis的Set,需要频繁连接Redis,如果数据量过大, 对redis的内存也是一种压力;使用Flink的MapState,如果数据量过大, 状态后端最好选择 RocksDBStateBackend; 使用布隆过滤器,…

企业门户的必备选择,WorkPlus的定制化解决方案

在当今数字化时代,企业门户成为了企业内外沟通与协作的重要基础设施。WorkPlus作为领先的品牌,为企业提供了一站式的企业门户解决方案,旨在提升企业形象、改善内外部沟通与协作效率。本文将深入探讨WorkPlus如何通过定制化的设计,…

使用运放产生各种波形

目录复制 文章目录 RC正弦振荡电路文氏电桥振荡电路移项式正弦波振荡电路 集成函数发生器运算放大器驱动电容性负载峰值检波多通道运放未使用的运放接法 RC正弦振荡电路 文氏电桥振荡电路 这个振荡器起振条件RF > 2R1,起振后又希望RF 2R1产生矛盾怎么办? 将RF换…