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

news2024/11/19 18:35:49

常用数据类型及命令

  • 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 database

1) "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 1000

1) "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://www.coloradmin.cn/o/1663785.html

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

相关文章

命名规范总结Java

小驼峰命名 主要用于变量和方法的命名,当标识符是一个单词时首字母小写,当标识符为多个单词时第一个单词首字母小写,其他单词首字母大写 大驼峰命名 主要用于类(Class)名等。标识符各个单词首字母大写。 全部大写命名 常量名 全部小写命…

Blazor入门-调用js+例子

参考: Blazor入门笔记(3)-C#与JS交互 - 半野 - 博客园 https://www.cnblogs.com/zxyao/p/12638233.html 本地环境:win10, visual studio 2022 community 其他例子写了再更新! 调用js函数并传递参数 首先要加上injec…

品鉴中的挑战与探索:如何勇敢尝试不同类型的云仓酒庄雷盛红酒

品鉴云仓酒庄雷盛红酒不仅是一种感官的享受,更是一种挑战与探索的过程。不同类型的云仓酒庄雷盛红酒具有各自与众不同的风味和特点,通过勇敢尝试不同类型的红酒,我们可以拓展自己的品鉴视野,发现更多未知的美妙滋味。 首先&#x…

day-33 收集垃圾的最少总时间

思路 利用一个二维数组(数组行数为3,分别对应三种垃圾)记录垃圾数量,arr[0][i]表示第i个房子的金属、纸和或玻璃垃圾。 解题方法 将三种垃圾数量(值与时间相同)相加,最后对应垃圾车最远需要走到…

智能交通仿真平台介绍

随着城市化进程的加速和汽车不断的增加,交通问题日益突出。为了应对这一挑战,智能交通和自动驾驶技术应运而生。智能交通与自动驾驶技术的结合将改善交通安全和减少拥堵,智能交通系统提供实时路况信息和信号控制,帮助自动驾驶车辆…

YOLOv8预测流程-原理解析[目标检测理论篇]

接下来是我最想要分享的内容,梳理了YOLOv8预测的整个流程,以及训练的整个流程。 关于YOLOv8的主干网络在YOLOv8网络结构介绍-CSDN博客介绍了,为了更好地介绍本章内容,还是把YOLOv8网络结构图放在这里,方便查看。 1.前言…

后端的一些科普文章

后端开发一般有4个方面 后端开发流程 1阶段 域名认证 是每一个计算机在网络上有一个ip地址,可以通过这个地址来访问102.305.122.5(举例), 但是这个公网ip地址,比较难记忆,所以大家使用域名来更好的记忆…

品鉴中的价值认知:如何理解红酒在生活中的地位与意义

红酒作为一种富有文化内涵的产品,在人们的生活中扮演着重要的角色。品鉴云仓酒庄雷盛红酒不仅是对其品质的欣赏,更是对其中蕴含的价值认知的认同。通过品鉴红酒,我们可以理解其在生活中的地位与意义,以及它所传递的文化和精神价值…

《动手学机器学习》资源

图书资源获取https://www.epubit.com/ 《动手学机器学习》配套资源获取方式: 配套源代码下载地址:https://github.com/boyu-ai/Hands-on-ML 教学PPT课件下载地址:http://hml.boyuai.com 理论解读视频课程:可扫描书中二维码观看&am…

干货分享:搭建AI知识库的5款工具推荐

如何有效地管理、整合和利用信息是每个人都会遇到的问题。AI知识库凭借其强大的智能化管理和便捷的AI搜索功能,成为了很多人会选择的工具。今天,我将分享5款搭建AI知识库的实用工具给大家,帮助大家选择最适合的搭建AI知识库的工具&#xff0c…

相同的树——java

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入:p [1,2,3], q [1,2,3] 输出:true示例 2&…

基于Python+Django+MySQL实现Web版的增删改查

Python Web框架Django连接和操作MySQL数据库学生信息管理系统(SMS),主要包含对学生信息增删改查功能,旨在快速入门Python Web。 开发环境 开发工具:Pycharm 2020.1开发语言:Python 3.8.0Web框架:Django 3.0.6数据库:…

15. 三数之和(双指针+去重优化)

文章目录 前言一、题目描述二、代码原理1.暴力解法2.双指针优化 三.代码编写总结 前言 在本篇文章中,我们将会讲到leetcode中15. 三数之和,我们将会用到双指针的方式解决这道问题,同时注意掌握算法原理的去重操作。 一、题目描述 给你一个…

程序员的归宿。。

大家好,我是瑶琴呀。 相信每个进入职场的人都考虑过自己的职业生涯规划,在不同的年龄段可能面临不同挑战,这点对于 35 的人应该更为感同身受。 对于程序员来说,大部分人的职业道路主要是下面三种:第一条,…

Android11 InputReader分析

InputReader线程主要负责读取输入数据,并把数据交给InputDispatcher线程。本文以多指触摸屏为例,梳理一下InputReader的流程。 InputReader线程主要完成以下工作: 处理已有的输入设备处理新增或者移除的输入设备对输入设备产生的输入数据进行…

K8s 多租户管理

一、K8s 多租户管理 多租户是指在同一集群中隔离多个用户或团队,以避免他们之间的资源冲突和误操作。在K8s中,多租户管理的核心目标是在保证安全性的同时,提高资源利用率和运营效率。 在K8s中,该操作可以通过命名空间&#xff0…

代码随想录算法训练营第六十三天| LeetCode84. 柱状图中最大的矩形

一、LeetCode 84. 柱状图中最大的矩形 题目链接/文章讲解/代码讲解:https://programmercarl.com/0084.%E6%9F%B1%E7%8A%B6%E5%9B%BE%E4%B8%AD%E6%9C%80%E5%A4%A7%E7%9A%84%E7%9F%A9%E5%BD%A2.html 状态:已解决 1.思路 这道题跟上道接雨水的题基本上是反…

掌握这些服务器知识点,你可以在领导面前吹一波了!

如何保证服务器可以支持百万用户访问?服务器品牌有哪些?如何选购服务器?对于这些问题,今天我们就一起来看下关于服务器的相关知识。 假如你开发了一个网站或者一个app把他放到服务器上,之后你把它发布到了网上&#x…

机器学习面试篇

如何理解机器学习数据集的概念 数据集是机器学习的基础,它包括了用于训练和测试模型所需的数据。数据集通常以矩阵的形式存在,其中每一行代表一个样本(或实例),每一列代表一个特征(或属性)。…

云效 Pipeline as Code 来了!这些场景,用好它效率翻倍!

从可视化编排到支持 YAML 编排 云效流水线 Flow 是开箱即用的企业级持续集成和持续交付工具,支持丰富的代码源、构建、自动化测试工具、多种部署类型和部署方式,与阿里云深度集成,还提供多种企业级特性,助力企业高效完成从开发到…