Redis 基础之常用数据类型及命令

常用数据类型及命令

  • String(字符串)
  • Hash(哈希)
  • List(列表)
  • Set(集合)
  • zset ( sorted set:有序集合 )
  • Redis setbit 命令
  • HyperLogLogs ( 基数统计 )

Redis 比 Memcached 更优秀的地方之一就是支持更丰富的数据类型

Redis 支持七种数据类型
1、 string(字符串);
2、 hash(哈希);
3、 list(列表);
4、 set(集合);
5、 zset(sortedset:有序集合);
6、 Bitmaps(位图);
7、 HyperLogLogs(基数统计);
redis 常用键命令如下:
在这里插入图片描述

String(字符串)

string 是 Redis 最基本的数据类型,一个 key 对应一个 value

string 类型是二进制安全的

Redis 的 string 可以包含任何数据,比如 jpg 图片或者序列化的对象

string 类型的一个键最大能存储 512 MB 数据

1270.0.1:6379> SET site "test"
OK
1270.0.1:6379> GET site
"test"

上面的范例中我们使用了 Redis 的 SET 和 GET 命令
下表列出了 Redis 字符串命令
在这里插入图片描述

Hash(哈希)

Redis Hash 是一个键名对集合

Redis Hash 是一个 string 类型的 field 和 value 的映射表

Redis Hash 特别适合用于存储对象

Redis 每个 hash 可以存储 232-1 键值对(40多亿)

1270.0.1:6379> HMSET user:1 username penglei password 123456 points 200
OK
1270.0.1:6379> HGETALL user:1
1) "username"
2) "penglei"
3) "password"
4) "123456"
5) "points"
6) "200"
1270.0.1:6379> 

上面的范例中 hash 数据类型存储了包含用户脚本信息的用户对象

范例中我们使用了 Redis HMSET, HGETALL 命令, user:1 为键
下表列出了 redis hash 命令
在这里插入图片描述

List(列表)

Redis List ( 列表 ) 是简单的字符串列表,按照插入顺序排序

我们可以添加一个元素到列表的头部 ( 左边 ) 或者尾部 ( 右边 )

Redis List( 列表 ) 最多可存储 232- 1 元素 (4294967295, 每个列表可存储40多亿)

1270.0.1:6379> lpush database redis
(integer) 1
1270.0.1:6379> lpush database mongodb
(integer) 2
1270.0.1:6379> lpush database rabitmq
(integer) 3
1270.0.1:6379> lrange database 0 10
1) "rabitmq"
2) "mongodb"
3) "redis"
1270.0.1:6379>

下表列出了列表相关命令
在这里插入图片描述

Set(集合)

Redis Set 是 string 类型的无序集合

Redis Set 是通过哈希表实现的,所以添加,删除,查找的时间复杂度都是 O(1)

Redis Set 最大的成员数为 232- 1(4294967295, 每个集合可存储40多亿个成员)

Redis Set 内元素具有唯一性,不管插入多少次都只会有一份

sadd 命令
Redis sadd 添加一个 string 元素到 key 对应的 set 集合

Redis sadd 语法

sadd key member

范例

1270.0.1:6379> sadd database redis
(integer) 1
1270.0.1:6379> sadd database mongodb
(integer) 1
1270.0.1:6379> sadd database rabitmq
(integer) 1
1270.0.1:6379> sadd database rabitmq
(integer) 0
1270.0.1:6379> smembers database1) "rabitmq"
2) "mongodb"
3) "redis"

上面的范例,rabitmq 添加了两次,但最后只存储了一份
下表列出了 Redis 集合相关命令
在这里插入图片描述

zset ( sorted set:有序集合 )

Redis zset 和 set 一样也是 string 类型元素的集合

Redis zset 不同的是每个元素都会关联一个 double 类型的分数

Redis zset 通过分数来为集合中的成员进行从小到大的排序

Redis zset 的成员是唯一的,但分数( score ) 却可以重复

Redis zadd 命令
Redis zset 添加元素到集合,如果元素在集合中存在则更新对应 score

Redis zadd 命令语法格式

zadd key score member

Redis zset 范例

1270.0.1:6379> zadd lang_rank 0 redis
(integer) 1
1270.0.1:6379> zadd lang_rank 0 mongodb
(integer) 1
1270.0.1:6379> zadd lang_rank 0 rabitmq
(integer) 1
1270.0.1:6379> zadd lang_rank 0 rabitmq
(integer) 0
1270.0.1:6379> ZRANGEBYSCORE lang_rank 0 10001) "redis"
2) "mongodb"
3) "rabitmq"

Redis sorted set 和 set 一样也是 string 类型元素的集合,且不允许重复的成员

Redis sorted set 的每个元素都会关联一个 double 类型的分数(score)

Redis sorted set 通过分数(score) 来为集合中的成员进行从小到大的排序

Redis sorted set(有序集合) 的成员是唯一的,但分数 (score) 却可以重复

Redis sorted set 是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)

Redis sorted set 中最大的成员数为 232 – 1

下表列出了 Redis 有序集合的基本命令
在这里插入图片描述

Redis setbit 命令

Redis setbit 命令用于设置或者清除一个 bit 位

Redis setbit 命令语法格式

SETBIT key offset value

范例

1270.0.1:6379> setbit aaa:001 10001 1 # 返回操作之前的数值
(integer) 0
1270.0.1:6379> setbit aaa:001 10002 2 # 如果值不是01就报错
(error) ERR bit is not an integer or out of range
1270.0.1:6379> setbit aaa:001 10002 0
(integer) 0
1270.0.1:6379> setbit aaa:001 10003 1
(integer) 0

HyperLogLogs ( 基数统计 )

Redis HyperLogLog 可以接受多个元素作为输入,并给出输入元素的基数估算值

基数
集合中不同元素的数量,比如 {’apple’, ‘banana’, ‘cherry’, ‘banana’, ‘apple’} 的基数就是 3

估算值
算法给出的基数并不是精确的,可能会比实际稍微多一些或者稍微少一些,但会控制在合 理的范围之内

HyperLogLog 的优点是

即使输入元素的数量或者体积非常非常大,计算基数所需的空间总是固定的、并且是很小的

在Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数

这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比

因为HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素

Redis PFADD 命令
Redis PFADD 命令将元素添加至 HyperLogLog

Redis PFADD 命令语法格式

PFADD key element [element ...]

范例

1270.0.1:6379> PFADD unique::ip::counter '192.168.0.1'
(integer) 1
1270.0.1:6379> PFADD unique::ip::counter '127.0.0.1'
(integer) 1
1270.0.1:6379> PFADD unique::ip::counter '255.255.255.255'
(integer) 1
1270.0.1:6379> PFCOUNT unique::ip::counter
(integer) 3

Redis 在 2.8.9 版本添加了 HyperLogLog 结构

Redis HyperLogLog 是用来做基数统计的算法
什么是基数?
假如我们有一个数据集 {1, 3, 5, 7, 5, 7, 8}
那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数 (不重复元素个数) 为5

基数估计 就是在误差可接受的范围内,快速计算基数

范例
下面的范例演示了 HyperLogLog 的工作过程

1270.0.1:6379> PFADD language "PHP"
1) (integer) 1
1270.0.1:6379> PFADD language "Python"
1) (integer) 1
1270.0.1:6379> PFADD language "Perl"
1) (integer) 1
1270.0.1:6379> PFCOUNT language
(integer) 3

下表列出了 Redis HyperLogLog 命令
在这里插入图片描述

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

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

相关文章

(python)经典的数学和逻辑谜题-汉诺塔

前言 在贝纳雷斯的大寺庙里在标志着世界中心的圆顶下,有一块黄铜板,上面固定着三根钻石针,每根针高一肘,粗细如蜜蜂的身体.在其中一根针上,上帝在创世时放置了六十四个纯金的圆盘,最大的圆盘放在黄铜板上,其他的圆盘逐渐变小,直到最上面的一个.这就是布拉马之塔.日夜不停地,祭司…

sqli-labs靶场第十四关

目录 1:分析 找闭合符: 2:开始注入 报错注入: 注入数据库名: 注入表名: 注入列名: 注入具体值: 1:分析 经过我们的实验发现当我们输入的密码后面存在双引号时会报…

消费增值:绿色积分引领电商潮流

消费增值的玩法确实为电商平台提供了一种新颖的用户激励机制,通过积分返利和增值机制,吸引消费者持续参与并提升用户粘性。以下是对您提供的信息的进一步解析和扩展: 消费增值玩法解析 商城消费返利: 每笔消费订单,商…

上海计算机学会2023年9月月赛C++丙组T2Z形填充

题目描述 给定一个整数 n,再给定 n2 个字符,请将这些字符以 z 形排成一个 nn 的矩阵。 z 形的定义是,第一个字符在左上角,然后沿对角线以 z 形放置字符。对于 n4 ,z 形排列的先后顺序标记如下: 输入格式 …

未来办公新方式--智能体与程序完美配合

Agent AI智能体的未来 工作中,有时候我们就像是在不停地踩着缝纫机,重复地做着那些单调乏味的任务,不仅耗时费力,还特别容易出错。可是,咱们现在可是生活在数字化时代啊!这时候,Python编程语言…

STC -PWM

一.STC8H1K16初始化,以下一步配置后就会有波形输出. // // 函数: PWMB_Output_init // 描述: 用户初始化程序. // 参数: None. // 返回: None. // 版本: V1.0, 2020-09-28 //u16 PWM8__setDuty25000;u16 PWM8__setPeriod50000; void PWMB_Output_init(void) {PWMx_InitDefi…

如何让组织充满活力?你需要做好这七步

组织活力,通俗点说就是: 从竞争对手角度看,组织活力强的组织能做到竞争对手做不到的事情; 从客户角度看,组织活力强的组织,客户感受好; 从员工角度看,组织活力强的组织&#xff0c…

Mapreduce | 案例

根据提供的数据文件【test.log】 数据文件格式:姓名,语文成绩,数学成绩,英语成绩 完成如下2个案例: (1)求每个学科的平均成绩 (2)将三门课程中任意一门不及格的学生过滤出来 (1)求每…

抖音小店怎么做?做店笔记分享来了,新手可学习!

大家好,我是电商糖果 抖音小店怎么做?这个问题是所有新手商家都会提问的问题。 很多朋友可能店开好几个月了,一直都不会运营,店铺没有流量,迟迟不出单。 下面糖果就来分享一下我自己做店总结的笔记,新手…

半小时搞懂STM32面经知识点——系统架构与启动流程

1.Cortex-M系统 1.1系统结构 1.处理器核心: Cortex-M3 2.存储器系统: Flash,SRAM,FSMC等 3.总线接口: 核心通过总线接口与外设设备和存储器进行通信。 总线矩阵:总线矩阵是一种硬件结构,用于连…

Java——类与对象

目录 一、面向对象的初步认识 1.1 什么是面向对象 1.2 面向对象与面向过程 二、类的定义与使用 2.1 简单认识类 2.2 类的定义格式 三、类的实例化 3.1 什么是实例化 3.2 类和对象的说明 四、this引用 4.1 为什么要有this引用 4.2 什么是this引用 ​编辑 4.3 this引用…

揭秘全网都在搜索的抖音快速涨10000粉的方法,打造真实粉丝海洋!巨量千川投流

抖音作为当下最热门的社交媒体平台之一,拥有数以亿计的用户。对于许多用户来说,快速涨粉成为了一个追逐的目标。在这篇文章中,我们将揭秘一些全网都在搜索的抖音快速涨粉方法,帮助你打造属于自己的真实粉丝海洋。巨量千川投流&…

决策管理中的数学方法

需要注意的是,用excel求解的时候需要导入线性规划加载项如下: pert分析需要DecisionTools中的RiskSolver插件 1.链接:https://pan.baidu.com/s/1wKhUFWgNmQ7U33kl5AypZw 提取码:zqkn 2.“Palisade_Book_expires_Aril_10_2025.lic”文件复制到以下路径: C:\Program Files …

我必须要吹一波MATLAB 2024a,太牛逼了!|福利:附安装教程及下载地址

最近逛MATLAB官网,发现MATLAB 2024a版本已经Pre-release了,翻了下release note,不得不感叹,实在是太强了! 这次重点更新了四个工具箱: Computer Vision Toolbox Deep Learning Toolbox Instrument Contro…

没有公网ip,如何实现外网访问内网?

目前拨号上网是最广泛的上网方式,这种方式优点是价格便宜,缺点是没有固定公网ip,每次重新您拨号ip地址都会变。如果有一台服务器,需要实现外网访问,在没有固定公网ip的环境下,该如何实现呢?使用…

14.跳跃游戏Ⅱ

文章目录 题目简介题目解答解法一:贪心算法动态规划代码:复杂度分析: 题目链接 大家好,我是晓星航。今天为大家带来的是 跳跃游戏Ⅱ 相关的讲解!😀 题目简介 题目解答 解法一:贪心算法动态规划…

【MySQL 数据宝典】【事务锁】- 002 事务控制的演进

一、事务处理思路 1.1 排队 排队处理是事务管理最简单的方法,就是完全顺序执行所有事务的数据库操作,不需要加锁,简单的说就是全局排队。序列化执行所有的事务单元,数据库某个时刻只处理一个事务操作,特点是强一致性…

用HAL库改写江科大的stm32入门例子8-1 DMA数据转运

实验目的:通过DMA把buffer的数据搬运到buffer2当中 //declare a buffer to store the data uint32_t buffer[3] {1,2,3};//declare a buffer to store the data uint32_t buffer2[3] {0,0,0}; DMA:是个搬运数据的小助手。 相关设置: main…

探索国外静态住宅代理:保护网络安全与隐私的利器

随着互联网的日益发展,网络安全和隐私保护成为越来越多用户关注的焦点。在这个信息爆炸的时代,如何确保网络活动的匿名性和安全性成为了我们必须面对的问题。国外静态住宅代理作为一种新兴的网络技术,为我们提供了有效的解决方案。 &#xf…

接口自动化入门: Requests请求头设置详解!

在进行接口自动化测试时,设置请求头是非常重要的一步。请求头可以包含各种信息,例如身份验证、内容类型、接受语言等。在实际的测试中,我们使用Python的Requests库来发送HTTP请求,并设置请求头来模拟不同的场景和需求。 下面将通…