Redis_五种数据类型及操作命令

5.redis常用的五种数据类型

5.1 Redis String字符串

5.1.1 简介

  • String类型在redis中最常见的一种类型
  • string类型是二制安全的,可以存放字符串、数值、json、图像数据
  • value存储最大数据量是512M

5.1.2 常用命令

  • set < key>< value>:添加键值对(下面指令可以再后添加)
    • nx:当数据库中key不存在时,可以将key-value添加到数据库
    • xx: 当数据库key存在时,可以将key-value添加到数据库,与nx参数互斥
    • ex: 设置key-value添加到数据库,并设置key的超时时间(以秒钟为单位)
    • px:设置key-value添加到数据库,并设置key的超时时间(以豪秒钟为单位),与ex互斥
  • get< key>查询对应键值
  • append < key>< value>:将给定的值追加到key的末尾
  • strlen < key>:获取值的长度
  • setnx < key>< value>:只有在key不存在时,设置key-value加入到数据库
  • setex < key> < timeout>< value>:添加键值对,同时设置过期时间(以秒为单位)
  • incr < key>:将key中存储的数字加1处理,只能对数字值操作。如果是空,添加进key并设值为1
  • decr < key>:将key中存储的数字减1处理,只能对数字值操作。如果是空,值为1
  • incrby < key>< increment>:将key中存储的数字值增加指定步长的数值,如果是空,值为步长。
    (具有原子性)
  • decrby < key>< decrement>: 将key中存储的数字值减少指定步长的数值,如果是空,值为步长。
    (具有原子性)
  • mset < key1>< value1>[< key2>< value2>…]:同时设置1个或多个key-value值
  • mget < key1>[< key2>…]:同时获取1个或多个value
  • msetnx < key1>< value1>[< key2>< value2>…]:当所有给定的key都不存在时,同时设置1个或
    多个key-value值**(具有原子性)**
  • getrange/substr < key>< start>< end> 将给定key,获取从start(包含)到end(包含)的值
  • setrange < key>< offset>< value>:从偏移量offset开始,用value去覆盖key中存储的字符串值
  • getset< key>< value>: 对给定的key设置新值,同时返回旧值。如果key不存在,则添加一个key-value值

5.1.3应用场景

单值缓存

  • 设置值:set key value;
  • 获取值: get key

对象缓存

  • set stu:001 value(json) (把对象转为json串保存)
  • mset stu:001:name zhangsan stu:001:age 18 stu:001:gender 男 (分别对每个字段进行不同key的存储)
  • mget stu:001:name stu:001:age(批量获取)

分布式锁

  • setnx key:001 true //返回1代表加锁成功
  • setnx key:001 true //返回0代表加锁失败,setnx如果存在,则无法存入数据,返回0
  • //…业务操作
    del key:001 //执行完业务释放锁
    set key:001 true ex 20 nx //防止程序意外终止导致死锁

计数器

  • incr article:read:1001 //统计文章阅读数量,其中artcle:read:1001是key

分布式系统全局序列号

  • incrby orderid 100 //批量生成序列号就是基于orderid的value加100

5.2 Redis List列表

5.2.1 简介

  • Redis列表是简单的字符串列表,单键多值,按照插入顺序排序。 可以添加一个元素到列表的头部(左边)或者尾部(右边)
  • 一个列表最多可以包含2^31-1个元素
  • 底层是一个双向链表,对两端的操作新能很高,通过下标的操作中间节点性能较弱

5.2.2 常用命令

  • lpush < key> < value1>[< value2>…]:从左侧插入一个或多个值
  • lpushx < key> < value1>[< value2>…]:将一个或多个值插入到已存在的列表头部 (有一个判断功能,存在的话才做,不存在就不做)
  • lrange < key>< start>< stop>:获取列表指定范围内的元素,0左边第1位,-1右边第1 位,0 ~-1取出所有
  • rpush < key> < value1>[< value2>…]:从右侧插入一个或多个值
  • rpushx < key> < value1>[< value2>…]:将一个或多个值插入到已存在的列表尾部
  • lpop < key>[count]:移除并获取列表中左边第1个元素,count表明获取的总数量,返回的为移除的
    元素
  • rpop < key>[count]:移除并获取列表中右边第1个元素,count表明获取的总数量,返回的为移除的元素
  • rpoplpush < source>< destination>:移除源列表的尾部的元素(右边第一个),将该元素添加到目标列表的头部(左边第一个),并返回该元素
  • lindex < key>< index>:通过索引获取列表中的元素
  • llen < key>:获取列表长度
  • linsert < key> before|after < pivot>< element>:在< pivot>基准元素前或者后面插入< element>,如果key不存在,返回0。如果< pivot>不存在,返回-1,如果操作成功,返回执行后的列表长度
  • lrem < key>< count>< element>:根据count的值,移除列表中与参数相等的元素
    • count=0 移除表中所有与参数相等的值
    • count>0 从表头开始向表尾搜索,移除与参数相等的元素,数量为count
    • count<0 从表尾开始向表头搜索,移除与参数相等的元素,数量为count的绝对值
  • lset < key>< index> < element>:设置给定索引位置的值
  • ltrim< key>< start> < stop>:对列表进行修剪,只保留给定区间的元素,不在指定区间的被删除
  • brpop < key> timeout:阻塞式移除指定key的元素,如果key中没有元素,就等待,直到有元素或超时,执行结束

5.2.3 应用场景

数据队列

  • 堆栈stack=lpush+lpop
  • 队列queue=lpush+rpop
  • 阻塞式消息队列 blocking mq=lpush+brpop

订阅号时间线

  • lrange key start stop(队列就是数据,然后根据想要获取的元素,输入对应元素下标获取数据)

5.3 Redis Hash 哈希

5.3.1 简介

是一个String类型的键和value(对象),特别适合于储存对象,类似于Java中的Map<String, Object>,有以下几种处理方式

  • 用key存储学生id,用value存储序列化之后用户对象(如果用户属性数据需要修改,操作较复杂,开销较大)
  • 用key存储学生id+属性名,用value存储属性值(用户id数据冗余)
  • 用key存储学生id,用value存储field+value的hash。通过key(学生d)+field(属性)可以操作对应数据。

5.3.2 常用命令

  • hset < key>< field>< value>[< field>< value>…]:用于为哈希表中的字段赋值,如果字段在hash表中存在,则会被覆盖
  • hmset:用法同hset,在redis4.0.0中被弃用
  • hsetnx < key>< field>< value>:只有在字段不存在时,才设置哈希表字段中的值(不支持多个)
  • hget < key>< field> 返回哈希表中指定的字段的值
  • hmget < key>< field>[< field>…]:获取哈希表中所有给定的字段值
  • hgetall < key>:获取在哈希表中指定key的所有字段和值
  • hexists < key>< field>:判断哈希表中指定的字段是否存在,存在返回1 ,否则返回0
  • hkeys < key>:获取哈希表中所有的字段
  • hvals < key>:获取哈希表中所有的值
  • hlen < key>:获取哈希表中的field数量
  • hdel < key>< field>[< field>…]:删除一个或多个哈希表字段
  • hincrby < key>< field>< increment>:为哈希表key中指定的field字段的整数值加上增加increment值
  • hincrbyfloat < key>< field>< increment>:为哈希表key中指定的field字段的浮点数值加上增加increment值

5.3.3 应用场景

  1. 对象缓存 hset stu:001 name zhangsan age 20 gender man
  2. 电商购物车操作
    • 以用户id作为key, 以商品id作为field,以商品数量作为value
    • 添加商品:
      • hset user:001 s:001 1
      • hset user:001 s:002 2
    • 增减商品数量:hincrby user:001 s:001 3
    • 查看购物车商品总数: hlen user:001
    • 删除商品 : hdel user:001 s:001
    • 获取所有商品: hgetall user:001

5.4 Redis Set集合

5.4.1 简介

set是String类型元素无序集合,对外提供的功能和list类似

5.4.2 常用命令

  • sadd < key>< member>[< member>…]:将一个或多个成员元素加入到集合中,如果集合中已经包含成员元素,则被忽略
  • smembers < key>:返回集合中的所有成员。
  • sismember < key>< member>:判断给定的成员元素是否是集合中的成员,如果是返回1,否则返回0
  • scard < key>:返回集合中元素个数
  • srem < key>< member>[< member>…]:移除集合中一个或多个元素
  • spop < key>[< count>]:移除并返回集合中的一个或count个随机元素
  • srandmember < key>[< count>]:与spop相似,返回随机元素,不做移除
  • smove < source> < destination> < member>:将member元素从source源移动到destination目标
  • sinter < key>[< key>…]:返回给定集合的交集(共同包含)元素
  • sinterstore < destination> < key1>[< key2>…]:返回给定所有集合的交集,并存储到destination目标中
  • sunion < key>[< key>…]:返回给定集合的并集(所有)元素
  • sunionstore < destination> < key1>[< key2>…]:返回给定所有集合的并集,并存储到destination目标中
  • sdiff < key>[< key>…]:返回给定集合的差集(key1中不包含key2中的元素)
  • sdiffstore < destination> < key1>[< key2>…]:返回给定所有集合的差集,并存储到destination目标中

5.4.3 应用场景

  • 抽奖
    • 参与抽奖:sadd cj001 user:13000000000 user:13455556666 user:13566667777 (将参与抽奖用户放入set中)
    • 查看所有参与用户: smembers cj001 (查看set数组所有数据)
    • 实现抽奖: spop cj001 3(弹出任意三个数据) / srandmember cj001 3 (返回任意三个数据)
  • 朋友圈点赞 快手/抖音
    • 点赞 (向set数组中添加元素)
      • sadd like:friend001 user:001
      • sadd like:friend001 user:002
    • 取消点赞 srem like:friend001 user:001 (移除此元素)
    • 判断用户是否已点赞 sismember like:friend001 user:001 (查看此元素是否存在set中)
    • 显示点赞用户 smembers like:friend001 (查看set中的元素)
    • 获取点赞次数 scard like:friend001 (获取set长度)
  • 关注模型: sinter交集 sunion并集 sdiff 差集
    • 微博 sadd g:list:u001 1001 sadd g:list:u002 1001 你们共同关注的 sinter交集
    • QQ 你们有共同好友 sinter交集
    • 快手 可能认识的人 sdiff差集

5.5 Redis ZSet有序集合

5.5.1 简介

  • 有序集合是String的有序结合,不允许重复出现成员
  • 每个元素关联一个double类型的分数,redis通过分数为集合中的成员进行从小到大的排序
  • 有序集合成员是唯一的,但是分数可以重复
  • 成员因为有序,可以根据分数或者次序来快速获取一个范围内的元素

5.5.2常用命令

  • zadd < key> < score>< member>[< score>< member>…]:将一个或多个元素及其分数加入到有序集合中
  • zrange < key>< min>< max> [byscore|bylex] [rev] [ limit offset count] [withscores]:返回有序集合指定区间的成员,
    • byscore按分数区间,使用此方法通过分数排序获取所有的数据zrange z1 -inf +inf byscore
    • bylex按字典区间[其中如果想要全部查询,min和max是-和+],
    • rev 反向排序(分数大的写前边,小的写后边),
    • limit分页(offset偏移量,count返回的总数),
    • withscores返回时带有对应的分数)
  • zrevrange < key>< start>< stop>[ limit offset count]:返回集合反转后的成员
  • zrangebyscore < key>< min>< max> [withscores] [ limit offset count]:参考zrange用法
  • zrevrangebyscore< key>< max>< min> [withscores] [ limit offset count]:参考zrange用法
  • zrangebylex < key>< min>< max>] [ limit offset count]:通过字典区间返回有序集合的成员
    • zrangebylex k2 - +:减号最小值,加号最大值
    • zrangebylex k2 [aa (ac:[ 中括号表示包含给定值,( 小括号表示不包含给定值
  • zcard < key>:获取集合中的成员数量
  • zincrby < key> < increment>< member> :为集合中指定成员分数加上增量increment
  • zrem < key> < member>[< member>…]:移除集合的一个或多个成员
  • zcount < key>< min>< max>:统计集合中指定区间分数(都包含)的成员数量
  • zrank < key>< member>:获取集合中成员的索引位置
  • zscore < key>< member>:获取集合中成员的分数值

5.3.3 应用场景

  1. 按时间先后顺序排序:朋友圈点赞 zadd 1656667779666(以时间作为分数) value
  2. 热搜: 微博 今日头条 快手 (主要使用分数做处理,每点击一次分数就加一,然后获取热点)
  3. 获取topN zrevrange k1 300 10 limit 0 10

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

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

相关文章

构造函数——初始化列表

初始化列表的引入。 #include<iostream> using namespace std;//栈类 typedef int DataType; class Stack { public://默认构造&#xff1a;Stack(size_t capacity ){cout << "Stack()" << endl;_array (DataType*)malloc(sizeof(DataType) * ca…

【golang】怎样判断一个变量的类型?

怎样判断一个变量的类型&#xff1f; package mainimport "fmt"var container []string{"zero", "one", "two"} func main() {container : map[int]string{0: "zero", 1: "one", 2: "two"}fmt.Printf…

享元模式(C++)

定义 运用共享技术有效地支持大量细粒度的对象。 使用场景 在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中&#xff0c;从而带来很高的运行时代价——主要指内存需求方面的代价。如何在避免大量细粒度对象问题的同时&#xff0c;让外部客户程序仍…

JavaWeb过滤器

目录 接口中的方法 init destroy doFilter 在web.xml中配置 作用 Filter也称之为过滤器&#xff0c;它是Servlet技术中最实用的技术&#xff0c;WEB开发人员通过 Filter技术&#xff0c;对web服务器管理的所有web资源&#xff1a;例如Servlet, 从而实现一些 特殊的功能。…

虚拟ip地址软件 怎么修改自己的网络ip地址

修改自己的网络IP地址在日常生活中&#xff0c;有时候我们可能需要修改自己的网络IP地址&#xff0c;这可能是由于网络问题、安全性考虑、建议使用第三方深度ip转换器切换ip地址。不用担心&#xff0c;下面将为大家介绍几种常见的修改网络IP地址的方法。 1. 通过重新连接网络&a…

128.【Maven】

Maven仓库 (一)、Maven 简介1.传统项目管理的缺点2.Maven是什么3.Maven的作用 (二)、Maven 的下载与安装1.下载与认识目录2.配置Maven的全局环境 (三)、Maven 的基础概念1.Maven 仓库(1).仓库分类 2. Maven 坐标3.Maven 本地仓库配置(1).改变默认的仓库地址(2).改变远程仓库地址…

mac电脑 node 基本操作命令

1. 查看node的版本 node -v2. 查看可安装的node版本 sudo npm view node versions3. 安装指定版本的node sudo n 18.9.04. 安装最新版本node sudo n latest5. 安装最新稳定版 sudo n stable6. 清楚node缓存 sudo npm cache clean -f7. 列举已经安装的node版本 n ls 8. 在…

代码随想录算法训练营第46天| 139.单词拆分 关于多重背包,你该了解这些! 背包问题总结篇!

今日学习的文章链接&#xff0c;或者视频链接 第九章 动态规划part08 自己看到题目的第一想法 看完代码随想录之后的想法 139: class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> wordSet(wordDict.b…

【并发编程】无锁环形队列Disruptor并发框架使用

Disruptor 是苹国外厂本易公司LMAX开发的一个高件能列&#xff0c;研发的初夷是解决内存队列的延识问顾在性能测试中发现竟然与10操作处于同样的数量级)&#xff0c;基于Disruptor开发的系统单线程能支撑每秒600万订单&#xff0c;2010年在QCn演讲后&#xff0c;获得了业界关注…

c++11-14-17_内存管理(RAII)_多线程

文章目录 前言&#xff1a;什么是RAII&#xff1f;指针/智能指针&#xff1a;使用智能指针管理内存资源&#xff1a;unique_ptr的使用&#xff1a;自定义删除器&#xff1a; shared_ptr的使用&#xff1a;shared_ptr指向同一个对象的不同成员&#xff1a;自定义删除函数&#x…

期权定价模型系列【2】—期权的希腊字母计算及应用

本篇文章旨在介绍期权常见希腊字母的计算及应用 本专栏更多侧重于理论及文字方面的展示&#xff0c;文章具体的代码可以参考我的另一个专栏【期权量化】。 【期权量化】专栏有同名文章&#xff0c;并且给出了文章的具体代码。 专栏地址&#xff1a; http://t.csdn.cn/Y30Hk…

谈谈Java开发语言

目录 1.概念 2.特点 3.应用领域 4.就业情况 1.概念 Java是一种面向对象的编程语言&#xff0c;它由James Gosling和他的团队在1995年于Sun Microsystems&#xff08;现在是Oracle Corporation&#xff09;开发出来。Java的设计目标是让开发者能够编写一次代码&#xff0c;在…

Arcgis中POI找到建筑面内距离最近的标准地址通过模型构建器来实现

背景 之前写过一篇文章 Arcgis通过矢量建筑面找到POI对应的标准地址 这里面的大致思路跟本篇文章是类似的&#xff0c;不过上一篇文章有部分有瑕疵&#xff0c;就是在POI去找建筑面内的标准地址时&#xff0c;找到的虽然是建筑面内的&#xff0c;但是不一定是距离最近的&#…

登录界面中图片验证码的生成和校验

一、用pillpw生成图片验证码 1、安装pillow pip install pip install pillow2、下载字体 比如&#xff1a;Monaco.ttf 3、实现生成验证码的方法 该方法返回一个img ,可以把这个img图片保存到内存中&#xff0c;也可以以文件形式保存到磁盘&#xff0c;还返回了验证码的文字…

走出象牙塔:李郓梁的区块链实践之路丨对话MVP

如何从科研走向实践&#xff1f;李郓梁在社区找到了答案。 作为西安工业大学的硕士研究生&#xff0c;李郓梁从学校的实验室接触区块链技术。通过研读大量论文&#xff0c;李郓梁为区块链多中心化、不可篡改等前沿理论深深着迷&#xff0c;并选择将区块链作为主要研究方向&…

[前端系列第1弹]HTML入门教程:从零开始学习Web页面的基础知识

HTML是一种用于描述Web页面内容和结构的标记语言&#xff0c;它由一系列的标签&#xff08;tag&#xff09;组成&#xff0c;每个标签都有特定的含义和功能。HTML标签可以嵌套使用&#xff0c;形成一个树状的文档对象模型&#xff08;Document Object Model, DOM&#xff09;。…

使用gewe框架进行微信群组管理(一)

友情链接&#xff1a;geweapi.com 点击访问即可。 管理员操作 小提示&#xff1a; 添加、删除、转让多个wxid时仅限于添加/删除管理员&#xff0c;1添加 2删除 3转让 请求URL&#xff1a; http://域名地址/api/group/admin 请求方式&#xff1a; POST 请求头&#xff1a…

PlayCanvas初学问题汇总

pc.Application类型错误 // Expose prototype methods and create a default tween manager on the application (function () {// Add pc.Application#addTweenManager methodpc.Application.prototype.addTweenManager function () {this._tweenManager new pc.TweenManag…

C++实现一键关闭桌面

方法一&#xff1a; C关闭桌面,explorer.exe #include<Windows.h> #include <TlHelp32.h> #include"resource.h" #pragma warning(disable:4996) void taskkill(const char * name) {HANDLE info_handle CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,…

Jmeter —— jmeter设置HTTP信息头管理器模拟请求头

HTTP信息头管理器 HTTP信息头管理器是在有需要模拟请求头部的时候进行设置的&#xff0c;添加方式 是 右击线程组 -- 配置元件 -- HTTP信息头管理器 可以通过抓包工具或者F12获取http请求的header头部信息&#xff1b;如下图&#xff1a; 复制并点击jmeter中的从剪贴板添加&am…