Redis基础——Redis常用命令

news2024/11/27 12:48:04

Redis基础

1.1 Redis通用命令

通用指令是部分数据类型的,都可以使用的指令,常见的有:

  • KEYS:查看符合模板的所有key
  • DEL:删除一个指定的key
  • EXISTS:判断key是否存在
  • EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
  • TTL:查看一个KEY的剩余有效期

通过help [command] 可以查看一个命令的具体用法,例如:

# 查看keys命令的帮助信息:
127.0.0.1:6379> help keys

KEYS pattern
summary: Find all keys matching the given pattern
since: 1.0.0
group: generic

1.2 String类型

String类型,也就是字符串类型,是Redis中最简单的存储类型。

其value是字符串,不过根据字符串的格式不同,又可以分为3类:

  • string:普通字符串
  • int:整数类型,可以做自增、自减操作
  • float:浮点类型,可以做自增、自减操作

不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512m.

1.2.1 String的常见命令

String的常见命令有:

  • SET:添加或者修改已经存在的一个String类型的键值对
  • GET:根据key获取String类型的value
  • MSET:批量添加多个String类型的键值对
  • MGET:根据多个key获取多个String类型的value
  • INCR:让一个整型的key自增1
  • INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2
  • INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
  • SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
  • SETEX:添加一个String类型的键值对,并且指定有效期

1.2.2 Key结构

Redis没有类似MySQL中的Table的概念,我们该如何区分不同类型的key呢?

例如,需要存储用户、商品信息到redis,有一个用户id是1,有一个商品id恰好也是1,此时如果使用id作为key,那就会冲突了,该怎么办?

我们可以通过给key添加前缀加以区分,不过这个前缀不是随便加的,有一定的规范:

Redis的key允许有多个单词形成层级结构,多个单词之间用’:'隔开,格式如下:

项目名:业务名:类型:id

这个格式并非固定,也可以根据自己的需求来删除或添加词条。这样以来,我们就可以把不同类型的数据区分开了。从而避免了key的冲突问题。

例如我们的项目名称叫 heima,有user和product两种不同类型的数据,我们可以这样定义key:

  • user相关的key:heima:user:1

  • product相关的key:heima:product:1

如果Value是一个Java对象,例如一个User对象,则可以将对象序列化为JSON字符串后存储:

KEYVALUE
heima:user:1{“id”:1, “name”: “Jack”, “age”: 21}
heima:product:1{“id”:1, “name”: “小米11”, “price”: 4999}

1.3 Hash类型

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。

String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便:

在这里插入图片描述

Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD:

在这里插入图片描述

Hash的常见命令有:

  • HSET key field value:添加或者修改hash类型key的field的值

  • HGET key field:获取一个hash类型key的field的值

  • HMSET:批量添加多个hash类型key的field的值

  • HMGET:批量获取多个hash类型key的field的值

  • HGETALL:获取一个hash类型的key中的所有的field和value

  • HKEYS:获取一个hash类型的key中的所有的field

  • HINCRBY:让一个hash类型key的字段值自增并指定步长

  • HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

1.4 List类型

Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。

特征也与LinkedList类似:

  • 有序
  • 元素可以重复
  • 插入和删除快
  • 查询速度一般

常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。

List的常见命令有:

  • LPUSH key element … :向列表左侧插入一个或多个元素
  • LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil
  • RPUSH key element … :向列表右侧插入一个或多个元素
  • RPOP key:移除并返回列表右侧的第一个元素
  • LRANGE key star end:返回一段角标范围内的所有元素
  • BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

1.5 Set类型

Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:

  • 无序

  • 元素不可重复

  • 查找快

  • 支持交集、并集、差集等功能

Set的常见命令有:

  • SADD key member … :向set中添加一个或多个元素
  • SREM key member … : 移除set中的指定元素
  • SCARD key: 返回set中元素的个数
  • SISMEMBER key member:判断一个元素是否存在于set中
  • SMEMBERS:获取set中的所有元素
  • SINTER key1 key2 … :求key1与key2的交集

例如两个集合:s1和s2:

在这里插入图片描述

求交集:SINTER s1 s2

求s1与s2的不同:SDIFF s1 s2

在这里插入图片描述

练习:

  1. 将下列数据用Redis的Set集合来存储:
  • 张三的好友有:李四、王五、赵六
  • 李四的好友有:王五、麻子、二狗
  1. 利用Set的命令实现下列功能:
  • 计算张三的好友有几人
  • 计算张三和李四有哪些共同好友
  • 查询哪些人是张三的好友却不是李四的好友
  • 查询张三和李四的好友总共有哪些人
  • 判断李四是否是张三的好友
  • 判断张三是否是李四的好友
  • 将李四从张三的好友列表中移除
127.0.0.1:6379> SADD zs lisi wangwu zhaoliu
(integer) 3
127.0.0.1:6379> SADD ls wangwu mazi ergou
(integer) 3
127.0.0.1:6379> SCARD zs
(integer) 3
127.0.0.1:6379> SINTER zs ls
1) "wangwu"
127.0.0.1:6379> SDIFF zs ls
1) "zhaoliu"
2) "lisi"
127.0.0.1:6379> SUNION zs ls
1) "lisi"
2) "wangwu"
3) "ergou"
4) "zhaoliu"
5) "mazi"
127.0.0.1:6379> SISMEMBER zs lisi
(integer) 1
127.0.0.1:6379> SISMEMBER lisi zhangsan
(integer) 0
127.0.0.1:6379> SREM zs lisi
(integer) 1
127.0.0.1:6379> 

1.6 SortedSet类型

Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。

SortedSet具备下列特性:

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

因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。

SortedSet的常见命令有:

  • ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值
  • ZREM key member:删除sorted set中的一个指定元素
  • ZSCORE key member : 获取sorted set中的指定元素的score值
  • ZRANK key member:获取sorted set 中的指定元素的排名
  • ZCARD key:获取sorted set中的元素个数
  • ZCOUNT key min max:统计score值在给定范围内的所有元素的个数
  • ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值
  • ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
  • ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
  • ZDIFF、ZINTER、ZUNION:求差集、交集、并集

注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可,例如:

  • 升序获取sorted set 中的指定元素的排名:ZRANK key member

  • 降序获取sorted set 中的指定元素的排名:ZREVRANK key memeber

练习题:

将班级的下列学生得分存入Redis的SortedSet中:

Jack 85, Lucy 89, Rose 82, Tom 95, Jerry 78, Amy 92, Miles 76

并实现下列功能:

  • 删除Tom同学
  • 获取Amy同学的分数
  • 获取Rose同学的排名
  • 查询80分以下有几个学生
  • 给Amy同学加2分
  • 查出成绩前3名的同学
  • 查出成绩80分以下的所有同学
127.0.0.1:6379> ZADD stus 85 Jack 89 Lucy 82 Rose 95 Tom 78 Jerry 92 Amy 76 Miles
(integer) 7
127.0.0.1:6379> ZREM stus Tom
(integer) 1
127.0.0.1:6379> ZRANK stus Rose
(integer) 2
127.0.0.1:6379> ZREVRANK stus Rose
(integer) 3
127.0.0.1:6379> ZCOUNT stus 0 80
(integer) 2
127.0.0.1:6379> ZINCRBY stus 2 Amy
"94"
127.0.0.1:6379> ZRANGE stus 0 2
1) "Miles"
2) "Jerry"
3) "Rose"
127.0.0.1:6379> ZREVRANGE stus 0 2
1) "Amy"
2) "Lucy"
3) "Jack"
127.0.0.1:6379> ZRANGEBYSCORE stus 0 80
1) "Miles"
2) "Jerry"
127.0.0.1:6379> 

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

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

相关文章

C++动态规划模板汇总大全

前言 如果你不太了解dp(动态规划)是个什么东西,请回到上次dp。 链接:动态规划算法详解 数字三角形模型 问题 A: 【一本通基础DP基础模型】【例9.2】数字金字塔 【题目描述】 观察下面的数字金字塔。写一个程序查找从最高点到…

【计算机图形学】三维图形投影和消隐(三视图构造)

模块4-1 三维图形投影和消隐 一 实验目的 编写三维图形各种变换的投影算法 二 实验内容 1:自行选择三维物体(不能选长方体),建立坐标系,给定点的三维坐标值,建立边表结构。完成三视图。 实验结果如下图所…

如何解决服务器认证失败

服务器认证失败是指在连接服务器时,由于身份认证失败而无法访问服务器。其实这是一种非常常见的问题,这种问题的原因很多,多方面导致的,但是我们又该如何解决这种问题呢?接下来就让小编为大家介绍服务器认证失败的原因…

41.Java单列集合LinkedList

单列集合LinkedList 1.LinkedList集合2.源码3. ArrayList和LinkedList的区别 1.LinkedList集合 在许多情况下,ArrayList效率更高,因为通常需要访问列表中的某一个元素,但是LinkedList提供了几种方法来更有效地执行某些操作。 2.源码 3. Arr…

【Java笔试强训 4】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥计算糖…

Dubbo 的引入(1)

目录 认识RPC Dubbo 认识RPC RPC是解决不同JVM之间数据调用的一个思想,比如说现在有2台不同的机器,业务代码需要在这2台机器间调用后台业务代码,RPC就可以解决这2台机器业务代码调用的问题: 而RPC实现流程是什么样的呢&#xff…

无脑005----在mmyolo框架下复现RTMDet-R

背景 win11系统wsl虚拟机Ubuntu下GTX1060显卡 cuda 10.1 pytorch 1.7.1 python 3.8 耗时 两个小时 参考github链接:https://github.com/open-mmlab/mmyolo 1.安装环境 首先安装pytorch conda install pytorch1.7.1 torchvision0.8.2 torchaudio0.7.2 cudatoolkit…

最新发布!面向开发者的 ChatGPT Prompt Engineering 免费教程,吴恩达与OpenAI合作打造!...

就在几小时之前,吴恩达在Twitter上宣布了与OpenAI合作的最新免费教程:《ChatGPT Prompt Engineering for Developers》 我们可以通过下面的链接,直达官网网站: https://www.deeplearning.ai/short-courses/chatgpt-prompt-enginee…

当下常见的企业文件管理工具都有哪些?

随着数字化的发展,企业在日常办公中会产出大量文件,高效管理办公文件十分重要。当下常见文件管理工具都有哪些呢? 1.Zoho WorkDrive 高性价比,多设备支持,安全性能高。Zoho Workdive 是一个团队协作多人内容编辑平台&…

“递归三要素”寻踪(浅析递归“经典”框架,领略递归优雅秀气;看到有“递归算法优化”的操作,余试剖之)

浅析递归“经典”框架,领略递归优雅秀气。看到有“递归算法优化”的操作,余试剖之。 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是…

mulesoft MCIA 破釜沉舟备考 2023.04.29.27 (易错题)

mulesoft MCIA 破釜沉舟备考 2023.04.29.27 (易错题) 1. An insurance company has an existing API which is currently used by customers.2. An organization has deployed both Mule and non-Mule API implementations to integrate its customer and order management s…

《2023中国各地区科创之星势力图1.0版》重磅发布

数据猿出品 本次“数据猿2023年度三大媒体策划活动——《2023中国各地区科创之星势力图1.版》”的发布,是数据猿在2022年3.0版本的基础上,迭代升级的2023开年的第一个版本。本年度下一次版本迭代将于2023年8月底发布2023年2.0版,敬请期待&…

51 - 自写操作系统

简易OS 1> 版本1:任务建立与切换2> 版本2:定时器切换2.1> main.c2.2> task.c2.3> sleep.c 3> 版本3:加时间片轮转 🔗 //--------- 参考视频链接 ------// 通过实验, 学习理解操作系统的大概&#xf…

【MySQL入门指南】外键约束使用详解

一、为什么需要外键? MySQL是一种关系型数据库,现实中的业务往往是相互关联的,这也就决定了数据库中的表也是存在相互关系的。而表与表之间的相互关系就是通过外键来维护的。给大家举一个现实的例子来帮助理解: 现在我们需要在数据…

IPsec中IKE与ISAKMP过程分析(主模式-消息1)

IPsec协议族中IKE(Internet Key Exchange)是一种基于ISAKMP的协议,它为建立IPSec安全通信隧道提供了一种无痕密钥交换的机制。简单来说,IKE就是ISAKMP的扩展,为ISAKMP提供了更加高效、灵活和安全的密钥协商机制。 GMT …

什么是大数据?如何入门学习大数据?

什么是大数据?在互联网技术快速发展的今天,大量日常生活和经营活动中产生的数据都已经信息化。我们产生的数据量相比以前有了爆炸式的增长,传统的数据处理技术已经无法胜任,需求催生技术,一套用来处理海量数据的软件工…

TCP报文结构以及三次握手以及四次握手

源端口号: 目标端口号:用来标识接收方计算机的具体应用进程 序号:发送数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。例如:一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序…

vmware安装redhat 8

vmware安装redhat 8 1、下载镜像文件1.1 镜像文件 2、安装系统2.1、选择自定义安装2.2、兼容性选择2.3、选择镜像文件导入2.4、设置用户名密码2.5、选择虚拟机在磁盘上的位置2.6、选择处理器数量2.7、选择内存大小2.8、选择桥接或NAT2.9、选择SCSI控制器类型2.10、选择虚拟机磁…

第十二章 Transform组件(下)

上一章节中我们介绍了Transform组件的属性和方法。我们发现 Transform 中有right,up和forward,而 Vector3 类中也有right,up和forward,他们是一回事嘛?我们使用Forward来说明两者之间的区别。我们知道,改变…

【web基础】html常用标签+作品展示

前言 小亭子正在努力的学习编程,接下来将开启javaEE的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~ 说明:此部分是java web基础知识&a…