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.mzph.cn/news/97171.shtml

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

相关文章

js查询月份开始和结束日期

js查询月份开始和结束日期 月份开始和结束 月份开始和结束 整体不是很复杂,使用new Date()方法自带获取最后一天的时间 new Date(a,b,c),传递参数 参数a:是要获取的年份 参数b:是要获取的月份 参数c:是要获取的日期 传递日期为…

地图资源下载工具数据在线、离线查询及数据激活功能

哨兵相关产品,工具提供了表示系统是否为归档离线的信息!您可以利用下载[定时重试]功能激活并下载哨兵相关离线产品数据!

Java中栈实现怎么选?Stack、Deque、ArrayDeque、LinkedList(含常用Api积累)

目录 Java中的Stack类 不用Stack有以下两点原因 1、从性能上来说应该使用Deque代替Stack。 2、Stack从Vector继承是个历史遗留问题,JDK官方已建议优先使用Deque的实现类来代替Stack。 该用ArrayDeque还是LinkedList? ArrayDeque与LinkList区别&#xff1…

node安装,nvm管理器

一、下载nvm,nvm-setup.exe https://github.com/coreybutler/nvm-windows/releases 二、配置NodeJS下载代理镜像(可选) 可以在NVM安装根目录下的setting.txt文件中,配置NodeJS下载代理镜像,解决在线安装NodeJS时速度…

Java-多线程

摘要 多线程编程是现代软件开发中的一个重要概念,它允许程序同时执行多个任务,提高了程序的性能和响应性。本博客深入探讨了多线程编程的关键概念、原理和最佳实践。 线程、进程、多线程、并发、并行 进程 进程是计算机中运行的程序的实例。每次打开一…

《人间失格》阅读笔记

《人间失格》读书笔记 2023年10月7日读完,在过去的三个月时间内,有忙碌申博、从杭州辞职回家、准备入学、到澳门入学的事情,终于忙完了这些所有事情,回到了横琴的小房子里读完了这本书。 这本书前半部分讲了主角,作为…

Delphi编程:pagecontrol组件的tab字体变大

1、将pagecontrol组件属性中的font的字体变成四号。 2、将tabsheet1属性中的font的字体设置成八号。 结果如下:

水果种植与果园监管“智慧化”,AI技术打造智慧果园视频综合解决方案

一、方案背景 我国是水果生产大国,果园种植面积大、产量高。由于果园的位置大都相对偏远、面积较大,值守的工作人员无法顾及到园区每个角落,因此人为偷盗、野生生物偷吃等事件时有发生,并且受极端天气如狂风、雷暴、骤雨等影响&a…

山东省赛二阶段第一部分解题思路

提交攻击者的IP地址 192.168.1.7 这个直接awk过滤一下ip次数,这个ip多得离谱,在日志里面也发现了它的恶意行为,后门,反弹shell 识别攻击者使用的操作系统 Linux 找出攻击者资产收集所使用的平台 shodan 提交攻击者目…

C#,数值计算——数据建模Fitab的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Fitting Data to a Straight Line /// </summary> public class Fitab { private int ndata { get; set; } private double a { get; set; } …

CTF之信息收集

什么是信息收集 信息收集是指通过各种方式获取所需要的信息&#xff0c;以便我们在后续的渗透过程更好的进行。最简单的比如说目标站点的IP、中间件、脚本语言、端口、邮箱等等。我觉得信息收集在我们参透测试的过程当中&#xff0c;是最重要的一环&#xff0c;这一环节没做好…

Android 13.0 遥控器点击输入框 弹不出输入法

1.前言 在13.0设备定制化开发中,遇到奇怪的现象,就是遥控器操作输入框的时候,始终弹不出输入法,刚开始怀疑是输入法的问题,换输入法发现还是一样 ,这时候又连接鼠标来操作发现可以弹出输入法 ,那么就不是输入法的问题,就要从遥控器焦点入手了,接下来看下关于EditText…

conda命令大全

conda list 查看环境中已经安装了的软件包 conda list --name your_env_name(虚拟环境名) 查看某个环境下的包 conda config --show 查看现有源 conda env list 或者 conda info -e 查看当前存在那些虚拟环境 conda update conda 更新至最新的conda版本 conda update [pac…

Java-Exception

目录 异常概念ErrorException 体系图常见运行时异常NullPointerExceptionArithmeticExceptionArrayIndexOutOfBoundExceptionClassCastExceptionNumberFormatException 常见的编译异常异常处理机制自定义异常throw和throws对比 异常是Java编程中的常见问题&#xff0c;了解如何…

与epoll媲美的异步io机制io_uring

io_uring 是 Linux 内核提供的一种高性能的异步 I/O 框架。它旨在提供一种效率更高、更灵活的 I/O 模型&#xff0c;以满足现代应用程序对高吞吐量和低延迟 I/O 操作的需求。 传统的 I/O 模型&#xff08;如阻塞 I/O 和非阻塞 I/O&#xff09;在处理大量并发 I/O 操作时可能存…

C++11 Qt之QFutureWatcher lambda

Lambda 介绍 Lambda 函数也叫匿名函数&#xff0c; 是C 11中新增的特性;谁用谁知道&#xff0c;哈&#xff1b; 1. Lambda函数的好处 Lambda函数使代码变得更加紧凑、更加结构化和更富有表现力&#xff1b; lambda在c作用主要是作为内嵌函数&#xff0c;逻辑更加清楚&#xf…

nsoftware Cloud SMS 2022 .NET 22.0.8 Crack

nsoftware Cloud SMS 能够通过各种流行的消息服务&#xff08;包括 Twilio、Sinch、SMSGlobal、SMS.to、Vonage、Clickatell 等&#xff09;发送、接收和安排 SMS 消息&#xff0c;从而提供了一种简化且高效的消息服务方法。 Cloud SMS 提供单个 SMS 组件&#xff0c;允许通过…

JDBC-day02(使用PreparedStatement实现CRUD操作)

所需的数据库数据要导入到自己的数据库库中 三&#xff1a;使用PreparedStatement实现CRUD操作 数据库连接被用于向数据库服务器发送命令和 SQL 语句&#xff0c;并接受数据库服务器返回的结果。其实一个数据库连接就是一个Socket连接。CRUD操作&#xff1a;根据返回值的有无…

uboot启动流程-uboot代码重定位说明一

一. uboot启动流程 本文学习 uboot 的启动流程中涉及的 uboot 代码重定位部分。 _main 函数中会调用 relocate_code 函数&#xff0c;本文继续简单分析一下 relocate_code 函数。 relocate_code 函数分两个部分&#xff1a; 1. 拷贝 uboot 代码部分 2. 有关 " 重定…

如何实现矩阵的重采样问题

文章目录 前言一、问题描述二、回答 前言 记录知乎的自问自答。 一、问题描述 我的问题是这样的&#xff0c;有两个列向量E和F&#xff0c;需要注意的是&#xff0c;E和F是连续的&#xff0c;可任意插值&#xff0c;得到包含其中的子向量。E和F通过一个mn的矩阵联系起来&…