Redis入门指南学习笔记(2):常用数据类型解析

一.前言

本文主要介绍Redis中包含几种主要数据类型:字符串类型、哈希类型、列表类型、集合类型和有序集合类型

二.字符串类型

字符串类型是Redis中最基本的数据类型,它是其他4种数据类型的基础,其他数据类型与字符串类型的差别从某种角度来说只是组织字符串的形式不同。

赋值和取值

SET key value命令用来设置键值对,GET value用来根据键取值,当键不存在时返回nil

> SET JAPAN Tokyo
"OK"
> GET JAPAN
"Tokyo"
> GET RUSSIA
(nil)

Redis对键的命令最好采用对象类型:对象ID:对象属性的形式,例如student:1:scores表示存储ID为1的学生的成绩列表。

递增/减数字

当存储的字符串是整数形式时,使用INCR命令可以使当前键值递增并返回递增后的值。

> SET money 5
"OK"
> INCR money
(integer) 6
> DECR money
(integer) 5

除了使用INCR,还可以使用INCRBY key increment来指定单次递增的数值,使用DECRBY key decrement来指定单次减去的数值。

> DECRBY money 15
(integer) -10
> INCRBY money 20
(integer) 10

通过INCRBYFLOAT key increment可以递增一个双精度浮点数。

> INCRBYFLOAT money 3.14
"13.14"

向末尾追加

通过APPEND key value可以向键值的末尾追加value,若键不存在,则可以将该键的值设置为value,该命令的返回值是追加后字符串的总长度。

> APPEND program Java
(integer) 4
> APPEND program " Python"
(integer) 11

第二次追加添加双引号是因为该参数包含空格,在redis-cli种需要用双引号以示区分。

获取字符串长度

通过STRLEN key可以获取键值的长度,若键不存在会返回0。

> GET program
"Java Python"
> STRLEN program
(integer) 11

同时设置/获取多个键值

通过MSET key val [key1 val1 ...]可以同时设置多个键值,通过MGET key [key1 ...]可以同时获取多个键对应的值。

> MSET python 1 cpp 2 java 3
"OK"
> MGET python cpp java
1) "1"
2) "2"
3) "3"

三.哈希类型

哈希类型的键值与Reids一样都采用了字典结构,其存储了字段(field)和字段值的映射,其中字段值只能是字符串

哈希类型适合存储对象,使用对象类别和ID构成键名,使用字段表示对象的属性,字段值存储属性的值。若要存储ID为1的学生三门功课math、chinese和english的成绩,存储结构可以表示为:

student:1 #键
--math 90 # 字段 字段值
--chinese 87
--english 78

赋值与取值

哈希类型的赋值与取值语法形式为:

HSET key field value
HGET key field
HMSET key field value [field value ...]
HMGET key field [field ...]
HGETALL key # 获取键所有的字段和字段值

HSET不区分插入和更新操作,这使得在更新数据时不需要事先判断字段是否存在。

具体用法:

> HSET student:1 math 90
(integer) 1
> HGET student:1 math
"90"> HMSET student:1 chinese 87 english 78
"OK"
> HMGET student:1 chinese english
1) "87"
2) "78"> HGETALL student:1
1) "math"
2) "90"
3) "chinese"
4) "87"
5) "english"
6) "78"

判断字段是否存在

通过HEXISTS key field可以判断字段是否存在,存在返回1,否则返回0。

> HEXISTS student:1 math
(integer) 1
> HEXISTS student:1 physics
(integer) 0

字段不存在时赋值

使用HSETNX key field value可以在字段field不存在时赋值,存在则不进行任何操作。

> HSETNX student:1 physics 88
(integer) 1
> HGET student:1 physics
"88"

删除字段

使用HDEL key field [field1 ...]可以删除一个或多个字段,并返回删除字段的个数。

> HDEL student:1 physics english
(integer) 2

获取字段名/字段值/长度

通过HKEYS key可以获取键中所有的字段名,通过HVALS key可以获取键中所有的字段值,通过HLEN key可以获取键所包含的字段数量。

> HKEYS student:1
1) "math"
2) "chinese"> HVALs student:1
1) "90"
2) "87"> HLEN student:1
(integer) 2

四.列表类型

列表类型可以存储一个有序的字符串列表,列表基于双向链表实现,可以向列表两端快速添加元素,但其索引速度比较慢,要获取列表中间某个位置的元素则必须要从头开始遍历到该位置。

向列表两端增加元素

通过LPUSH key value [value1 ...]RPUSH key value [value1 ...]可以分别往列表左边和右边添加元素,命令的返回值是列表的长度。

> LPUSH arr 3 2 1
(integer) 3
> RPUSH arr 4 5 6
(integer) 6
# arr
# 1 2 3 4 5 6

从列表两端弹出元素

通过LPOPRPOP可以分别从列表左端和右端弹出一个元素,返回值是弹出的元素。

> LPOP arr
"1"
> RPOP arr
"6"

获取列表中元素的个数

通过LLEN key可以获取列表中元素的个数,当键不存在时LLEN会返回0。

> LLEN arr
(integer) 4

获取列表片段

通过LRANGE key start stop可以获取列表索引从startstop之间的所有元素,索引从0开始。

> LRANGE arr 0 3
1) "2"
2) "3"
3) "4"
4) "5"

同Python一样,LRNAGE支持负索引,其中-1表示从右边开始第一个元素,-2表示从右边开始第二个元素,以此类推。

> LRANGE arr -3 -1
1) "3"
2) "4"
3) "5"

start大于stop会返回空列表,若stop超出列表索引大小,会返回到列表最右边的元素。

删除列表中指定的值

利用LREM可以删除列表中前count个值为value的元素,返回值为实际删除的元素个数:

  • count > 0时,LREM会删除从列表左边开始前count个值为value的元素。
  • count < 0时,LREM会删除从列表右边开始前count个值为value的元素。
  • count = 0时,LREM会删除列表中所有值为value的元素。
> LPUSH arr1 6 3 4 3 2 3 3
(integer) 7> LRANGE arr1 0 -1
1) "3"
2) "3"
3) "2"
4) "3"
5) "4"
6) "3"
7) "6"> LREM arr1 1 3
(integer) 1
# 3 2 3 4 3 6> LREM arr1 -1 3
(integer) 1
# 3 2 3 4 6> LREM arr1 0 3
(integer) 2
# 2 4 6

获取/设置指定索引的元素值

通过LINDEX key index可以获取指定索引的元素,通过LSET key index value可以修改指定索引位置的元素的值。

# arr: 2 3 4 5
> LINDEX arr 2
"4"> LSET arr 2 5
"OK"
> LINDEX arr 2
"5"

五.集合类型

Redis中的集合是基于哈希表实现的,集合中的元素都各不相同,往集合中增加删除、增加和查询都是常数时间复杂度。此外,集合还支持并、交和差运算。

增加/删除元素

通过SADD key member [member1 ...]可以往集合中添加一个或多个元素,通过SREM key member [member1 ...]可以删除一个或多个元素。

> SADD fruits app
(integer) 1
> SADD fruits banana peach
(integer) 2 # 返回值为成功添加的元素个数> SREM fruits app
(integer) 1 # 返回值为删除成功的元素个数

获取集合中的所有元素

通过SMEMBERS key可以获取集合中的所有元素。

> SMEMBERS fruits
1) "banana"
2) "peach"

判断元素是否在集合中

通过SISMEMBER key member可以判断元素member是否在集合中。

> SISMEMBER fruits app
(integer) 0
> SISMEMBER fruits banana
(integer) 1

集合间的元素

集合支持交、并和差运算。

# 交
SINTER key [key ...]
# 并
SUNION key [key ...]
# 差
SDIFF key [key ...]

给定集合A和B,交、并和差三种运算从左到右的示意图如下所示:

集合运算示意图

使用示例如下:

> SADD sa 1 3 4 5 7
(integer) 5
> SADD sb 2 4 6 8
(integer) 4> SINTER sa sb
1) "4"> SUNION sa sb
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"> SDIFF sa sb
1) "1"
2) "3"
3) "5"
4) "7"

六.结语

参考资料:

  • 《Redis入门指南》 李子骅编著

以上便是文本的全部内容,若有任何错误敬请批评指正,要是觉得不错可以点赞或关注一下,后续会持续更新。

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

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

相关文章

设计模式-访问者模式

访问者模式是一种行为设计模式&#xff0c;它允许你在不修改现有对象结构的情况下&#xff0c;定义新的操作。访问者模式通过将操作封装在一个访问者对象中&#xff0c;使得可以在不同的对象上执行不同的操作&#xff0c;从而实现了操作和对象的解耦。 在Java中&#x…

有关MySQL的联合查询

在 MySQL 中&#xff0c;联合查询&#xff08;也称为 JOIN 查询&#xff09;是一种用于将多个表中的数据联接在一起的操作。这使得你可以从多个表中获取相关的数据&#xff0c;并创建复杂的查询。 以下是一些常见的联合查询类型和示例&#xff1a; 内连接&#xff08;INNER J…

【Linux学习笔记】进程概念(上)

1. 冯诺依曼体系结构2. 操作系统的作用3. 进程 1. 冯诺依曼体系结构 如图&#xff0c;这是一个冯诺依曼体系结构简图 其中这里的存储器指的是内存&#xff01; 用通俗的话来解释这个图&#xff0c;就是数据从输入设备进入&#xff0c;然后进入到存储器&#xff0c;CPU从存储器…

神经网络气温预测

#引用所需要的库 import numpy as np import pandas as pd import matplotlib.pyplot as plt import torch import torch.optim as optim#优化器 #过滤警告 import warnings warnings.filterwarnings(“ignore”) %matplotlib inline featurespd.read_csv(‘temps.csv’) feat…

求矩阵高次幂的两种“另类”方法

文章目录 【方法一】运用哈密顿凯莱定理相关例题 【方法二】运用特征方程二阶矩阵求解通法三阶矩阵求解通法相关例题 市面上许多资料给出的计算矩阵高次幂的方法&#xff0c;无外乎有这几种&#xff1a; 分块矩阵求解高次幂&#xff1b;先求低次方幂&#xff0c;然后通过找规律…

阿里云OS系统Alibaba Cloud Linux 3系统的安全更新命令

给客户部署的服务&#xff0c;进入运维阶段&#xff0c;但是经常被客户监测到服务器漏洞&#xff0c;现在整理一下&#xff0c;服务器漏洞问题更新命令步骤。 服务器系统&#xff1a; 阿里云linux服务器&#xff1a;Alibaba Cloud Linux 3 漏洞类型和描述&#xff1a; #3214…

新体验:万圣节夜晚的新游戏!--愤怒的南瓜

引言&#xff1a; Chatgpt4.0 所带来的冲击似乎远超出人们想象&#xff0c;网页小游戏《愤怒的南瓜》在昨日&#xff08;万圣节夜晚&#xff09;火爆了外网。一位名为 Javi Lopez 的外国小哥使用 Midjourney、DALL•E 3 和 GPT-4 打开了一个无限可能的世界&#xff0c;重新演绎…

【Python全栈_公开课学习记录】

一、初识python (一).Python起源 Python创始人为吉多范罗苏姆&#xff08;荷兰&#xff09;&#xff0c;Python崇尚优美、清晰、简明的编辑风格。Python语言结构清晰简单、数据库丰富、运行成熟稳定&#xff0c;科学计算统计分析领先。目前广泛应用于云计算、Web开发、科学运算…

DSP 开发例程(5): tcp_server

目录 DSP 开发例程(5): tcp_server创建工程源码编辑tcp_echo.chelloWorld.c 调试说明 DSP 开发例程(5): tcp_server 此例程实现在 EVM6678L 开发板上创建 TCP Server进程, 完成计算机与开发板之间的 TCP/IP 通信. 例程源码可从我的 gitee 仓库上克隆或下载. 点击 DSP 开发教程…

【机器学习合集】模型设计之注意力机制动态网络 ->(个人学习记录笔记)

文章目录 注意力机制1. 注意力机制及其应用1.1 注意力机制的定义1.2 注意力机制的典型应用 2. 注意力模型设计2.1 空间注意力机制2.2 空间注意力模型2.3 通道注意力机制2.4 空间与通道注意力机制2.5 自注意力机制2.5 级联attention 动态网络1. 动态网络的定义2. 基于丢弃策略的…

jquery控制easyui中combobox、textbox显示隐藏

//combobox下拉框 $("#下拉框id.combo").hide();//textbox输入框 $("#输入框id.textbox").hide(); 参考网址&#xff1a; https://blog.csdn.net/Coldmood/article/details/128279727

PostgreSQL逻辑管理结构

1.数据库逻辑结构介绍 2.数据库基本操作 2.1 创建数据库 CREATE DATABASE name [ [ WITH ] [ OWNER [] user_name ] [ TEMPLATE [] template ] [ ENCODING [] encoding ] [ LC_COLLATE [] lc_collate ] [ LC_CTYPE [] lc_ctype ] [ TABLESPACE [] tablespace ] [ CONNECTION L…

Day17力扣打卡

打卡记录 参加会议的最多员工数&#xff08;拓扑排序 分类讨论&#xff09; 链接 计算内向基环树的最大基环&#xff0c;基环树基环为2的情况分类讨论。 class Solution { public:int maximumInvitations(vector<int> &favorite) {int n favorite.size();vector…

mac下的vscode配置编译环境

基础开发环境 创建Dockerfile文件&#xff0c;内容如下&#xff1a; FROM ubuntu:20.04RUN apt update & apt install make gcc cmake git ninja-build -y CMD [ "sleep", "infinity" ]创建docker-compose.yml文件&#xff0c;内容如下&#xff1a; …

4.多层感知机-3GPT版

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 多层感知机一、感知机1、感知机2、训练感知机3、图形解释4、收敛定理5、XOR问题6、总结 二、多层感知机1、XOR2、单隐藏层3、单隐藏层-单分类4、为什么需要非线性激活函数5、Sigmoid函数6、Tanh函数7、ReLU函数8、多类分…

SDK是什么

SDK 是“Software Development Kit”&#xff08;软件开发工具包&#xff09;的缩写&#xff0c;它是一组用于开发特定软件应用、硬件平台、计算机系统或操作系统的开发工具的集合。SDK 通常包括一组开发工具、库、文档和示例代码&#xff0c;以帮助开发者更快地开发和部署应用…

SAML- 安全断言标记语言

一、概念 安全断言标记语言&#xff08;SAML&#xff09;是一种开放标准&#xff0c;用于在各方之间&#xff08;特别是身份提供商和服务提供商之间&#xff09;交换身份验证和授权数据。SAML 是一种基于XML的安全断言标记语言&#xff08;服务提供商用来做出访问控制决策的语句…

HTML标签、CSS介绍

标签的分类: 块级/行内 # 块级标签: 独占一行 h1~h6 p div """ 块儿级标签可以修改长宽. 行内标签不可以, 就算修改了也不会变化.块级标签内部可以嵌套任意的块级标签和行内标签. 特例: 是p标签虽然是块级标签 但是它只能嵌套行内标签 不能嵌套块级标签. 如…

linux安装apache并配置userid站点

目录 一、linux安装apache的方式 1、安装wget 2、下载CentOS 7的repo文件 3、更新镜像源 二、安装apache 1.通过命令直接安装apache(linux的软件包为httpd) 2.启动httpd服务 3.访问一下 三、apache配置文件 1.主配置文件 2.修改根目录 3.修改下端口 4.apache的工作…

华为OD面经Java

机试400分&#xff0c;部门流程与IT&#xff0c;base西安 分享面经攒人品 10.27 一面 深挖项目&#xff0c;面试官很友好&#xff0c;根据项目的每个技术点和场景来提问&#xff0c;比如项目中数据库数据量级有多大&#xff0c;什么时候会出现缓慢&#xff0c;如何解决的&…