Redis【Redis数据类型(String、List、Set、Hash 、Zset)】(二)-全面详解(学习总结---从入门到深化)

news2025/1/11 23:50:38

 

目录

Redis数据类型_String

set

get

append

strlen 

setex

setnx

getrange

setrange

incr

decr

incrby/decrby key step 

mset

mget

getset 

Redis数据类型_List

lrange 

lpop/rpop

lindex 

llen

lrem

linsert

lset

Redis数据类型_Set

smembers

sismember

scard

srem

spop

srandmember

smove

sinter 

sunion

sdiff

Redis数据类型_Hash 

 简介

常用命令 

hset

 hget

 hmset

 hexists

 hkeys

 hvals key

 hincrby

 hdel

hsetnx 

 Redis数据类型_Zset

 简介

 常用命令

zadd

 zrange

 zrangebyscore

 zincrby

zrem 

zcount 

 zrank


Redis数据类型_String

 简介

String是Redis最基本的类型,一个key对应一个value。String是二进制安全的,意味着String可以包含 任何数据,比如序列化对象或者一张图片。String最多可以放512M的数据。

常用命令

set

用于设置给定 key 的值。如果 key 已经存储其他值, set 就重写旧值,且无视类型。

语法格式:

set key value

示例:

127.0.0.1:6379> set k1 v1
OK

get

用于获取指定 key 的值。如果 key 不存在,返回 nil 。

语法格式:

get key

示例:

127.0.0.1:6379> get k1
"v1"

append

将给定的value追加到key原值末尾。

语法格式:

append key value

示例:

127.0.0.1:6379> APPEND k1 k1
(integer) 4
127.0.0.1:6379> APPEND k1 k2
(integer) 6

注意:

  • 如果 key 已经存在并且是一个字符串, append 命令将 value 追加到 key 原来的值的末尾。
  • 如果 key 不存在, append 就简单地将给定 key 设为 value ,就像执行 set key value 一 样。

strlen 

获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。

语法格式:

strlen key

示例:

127.0.0.1:6379> strlen k1
(integer) 6

setex

给指定的 key 设置值及time 秒的过期时间。如果 key 已经存在, setex命令将会替换旧的值,并设置过 期时间。

语法格式:

setex key time value

示例:

#向Redis中设置一个k1的键值对并且10秒后过期
127.0.0.1:6379> setex k1 10 v1
OK

setnx

只有在key不存在时设置key的值

语法格式:

setnx key value

示例:

127.0.0.1:6379> setnx k1 v1
(integer) 0
127.0.0.1:6379> setnx k4 v4
(integer) 1

getrange

获取指定区间范围内的值,类似between........and 的关系

语法格式:

getrange key start end

示例:

127.0.0.1:6379> set k5 abcd123xxx
OK
127.0.0.1:6379> getrange k5 2 4
"cd1"

setrange

获取指定区间范围内的值,类似between........and 的关系

语法结构:

setrange key offset value

示例:

127.0.0.1:6379> set k6 abcd1234
OK
127.0.0.1:6379> setrange k6 1 xxx
(integer) 8
127.0.0.1:6379> get k6
"axxx1234"

incr

将 key 中储存的数字值增一。

语法格式:

incr key

示例:

#因为Redis中不存在k1,所以先初始化为0,再递增,值为1
127.0.0.1:6379> incr k1
(integer) 1
# incr k1 存在k1,递增后k1的值为2
127.0.0.1:6379> incr k1
(integer) 2
# 如果value不是数字就会报错
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> INCR k2
(error) ERR value is not an integer or out of range

注意:

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 incr 操作。

如字符串类型的值不能表示为数字、或者是其他类型,那么返回一个错误。

decr

将 key 中储存的数字值减一。

语法格式:

decr key

示例:

127.0.0.1:6379> decr k1
(integer) 1
127.0.0.1:6379> decr k1
(integer) 0
127.0.0.1:6379> decr k1
(integer) -1
127.0.0.1:6379> decr k1
(integer) -2
#如果
set k2 v2
decr k2 因为k2不为数值,Redis返回一个错误

注意:

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 decr 操作。

如字符串类型的值不能表示为数字、或者是其他类型,那么返回一个错误。

incrby/decrby key step 

将key存储的数字值按照step进行增减。

127.0.0.1:6379> incrby k1 10
(integer) 20

注意:

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 incrby/decrby 命令。

如字符串类型的值不能表示为数字、或者是其他类型,那么返回一个错误。

mset

同时设置一个或多个 key-value 。

语法格式:

mset key1 value1 key2 value2

示例:

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK

mget

返回所有(一个或多个)给定 key 的值。

语法格式:

mget key1 key2

示例:

127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"

注意:

如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。

getset 

将给定key值设为value,并返回key的旧值(old value),简单一句话(先get然后立即set)。

语法格式:

getset key value

示例:

127.0.0.1:6379> getset k1 wcc
"v1"
127.0.0.1:6379> get k1
"wcc"

使用场景

  • value 除了是字符串以外还可以是数字。
  • 计数器
  • 统计多单位的数量
  • 粉丝数
  • 对象缓存存储
  • 分布式锁

实时学习反馈

1.Redis技术String数据类型中如何设置给定 key 的值。

A get

B append

C set 

D mget

2. Redis技术String数据类型中如何只有在key不存在时设置key的值。

A get

B append

C setnx

D mget

Redis数据类型_List

简介 

List是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右 边)。底层是一个双向链表,对两段操作性能极高,通过索引操作中间的节点性能较差。

一个List最多可以包含 $2^{32}-1$个元素 ( 每个列表超过40亿个元素)。

常用命令 

lpush/rpush

从左边(头部)/右边(尾部)插入一个或多个值。

语法结构:

lpush/rpush key1 value1 value2 value3……

示例:

#从左边放入v1 v2 v3
127.0.0.1:6379> lpush k1 v1 v2 v3
(integer) 3

#从右边放入v4 v5 v6
127.0.0.1:6379> rpush k1 v4 v5 v6
(integer) 6

 

lrange 

返回key列表中的start和end之间的元素(包含start和end)。 其中 0 表示列表的第一个元素,-1表示 最后一个元素。

语法结构:

lrange key start end

示例:

#取出列表里前3个值,结果为v3 v2 v1
127.0.0.1:6379> lrange k1 0 2
#取出列表里全部值,结果为v3 v2 v1 v4 v5 v6
127.0.0.1:6379> lrange k1 0 -1

lpop/rpop

移除并返回第一个值或最后一个值。

语法格式:

lpop/rpop key

示例:

lpop k1 从列表中删除v3,并返回,当前列表全部值v2 v1 v4 v5 v6

rpop k1 从列表中删除v6,并返回,当前列表全部值v2 v1 v4 v5

注意: 值在键在,值光键亡。 

lindex 

获取列表index位置的值(从左开始)。

语法结构:

lindex key index

示例:

lindex k1 0

llen

获取列表长度。

语法结构:

llen key

示例:

127.0.0.1:6379> llen k1
(integer) 6

lrem

从左边开始删除与value相同的count个元素。

语法结构:

lrem key count value

示例:

#从左边开始删除k1列表中2个v1元素
lrem k1 2 v1

linsert

在列表中value值的前边/后边插入一个new value值(从左开始)。

语法结构:

linsert key before/after value newvalue

示例:

linsert k1 before v1 v5 在v1前面插入一个v5

lset

将索引为index的值设置为value

语法结构:

lset key index value

示例:

lset key index value

使用场景

  • 消息队列
  • 排行榜
  • 最新列表

实时学习反馈

1. Redis技术List数据类型中如何插入一个或多个值。

A lpush/rpush

B llen

C lset

D lrem

2. Redis技术List数据类型中如何移除并返回第一个值或者最后一个值。

A lpush/rpush

B llen

C lset

D lpop/rpop

Redis数据类型_Set

简介 

与List类似是一个列表功能,但Set是自动排重的,当需要存储一个列表数据,又不希望出现重复数据 时,Set是一个很好的选择。

Set是String类型的无序集合,它底层其实是一个value为null的hash表,所以添加、删除、查找的时间 复杂度都是O(1)。

常用命令

sadd

将一个或多个元素添加到集合key中,已经存在的元素将被忽略。

语法结构:

sadd key value1 value2……

示例:

#向集合中添加值,最终只有v1 v2 v3 v4 v5 v6
127.0.0.1:6379> sadd k1 v1 v2 v2 v3 v4 v5 v6

smembers

取出该集合的所有元素。

语法结构:

smembers key

示例:

127.0.0.1:6379> smembers k1

sismember

判断集合key中是否含有value元素,如有返回1,否则返回0。

语法结构:

sismember key value

示例:

sismember k1 v1

scard

返回该集合的元素个数。

语法结构:

scard key

示例:

scard k1

srem

删除集合中的一个或多个成员元素,不存在的成员元素会被忽略。

语法结构:

srem key value1 value2……

示例:

# 删除v1 v2
srem k1 v1 v2

spop

随机删除集合中一个元素并返回该元素。

语法结构:

spop key

示例:

spop k1 随机删除一个元素,并返回

srandmember

随机取出集合中count个元素,但不会删除。

语法结构:

srandmember key count

示例:

#随机取出集合中的2个元素
srandmember k1 2

smove

将value元素从sourcekey集合移动到destinationkey集合中。

语法结构:

smove sourcekey destinationkey value

示例:

smove k1 k2 v5 将元素v5从集合k1中移动到集合k2

注意: 如果 sourcekey集合不存在或不包含指定的 value元素,则 smove 命令不执行任何操作,仅返回 0 。

sinter 

返回两个集合的交集元素。

语法结构:

sinter key1 key2

示例:

sinter key1 key2

sunion

返回两个集合的并集元素。

语法结构:

sunion key1 key2

示例:

sunion k1 k2

sdiff

返回两个集合的差集元素(key1中的,不包含key2)

语法结构:

sdiff key1 key2

示例:

sdiff k1 k2

使用场景

  • 黑白名单
  • 随机展示
  • 好友
  • 关注人
  • 粉丝
  • 感兴趣的人集合

实时学习反馈

1. Redis技术Set数据类型中将一个或多个元素添加到集合key中。

A spop

B sinter

C sdiff

D sadd

2. Redis技术Set数据类型中如何取出该集合的所有元素。

A spop

B smembers

C sdiff

D sadd

Redis数据类型_Hash 

 简介

Hash是一个键值对的集合。Hash 是一个 String 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。

常用命令 

hset

给key集合中的field赋值value。

语法结构:

hset key field value

示例:

127.0.0.1:6379> hset user name xiaoton
(integer) 1
127.0.0.1:6379> hset user age 3
(integer) 1

 hget

从key哈希中,取出field字段的值。

语法结构:

hget key field

示例:

127.0.0.1:6379> hget user name
"xiaoton"

 hmset

批量设置哈希的字段及值。

语法结构:

hmset key field1 value1 field2 value2……

示例:

127.0.0.1:6379> hmset user1 name xiaoton age 15
OK

 hexists

判断指定key中是否存在field

语法结构:

hexists key field

示例:

127.0.0.1:6379> hexists user1 name
(integer) 1
127.0.0.1:6379> hexists user1 xxx
(integer) 0

 hkeys

获取该哈希中所有的field。

语法结构:

hkeys key

示例:

127.0.0.1:6379> hkeys user1
1) "name"
2) "age"

 hvals key

获取该哈希中所有的value。

语法结构:

hvals key

示例:

127.0.0.1:6379> hvals user1
1) "xiaoton"
2) "15"

 hincrby

为哈希表key中的field字段的值加上增量increment。

语法结构:

hincrby key field increment

示例:

127.0.0.1:6379> hincrby user1 age 10
(integer) 25

 hdel

删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。

语法结构:

hdel key field1 field2……

示例:

127.0.0.1:6379> hdel user1 age
(integer) 1

hsetnx 

给key哈希表中不存在的的字段赋值 。

语法结构:

hsetnx key field value

示例:

127.0.0.1:6379> hsetnx user1 age 10
(integer) 1

 使用场景 

     1、购物车

     2、存储对象

 实时学习反馈

1. Redis技术Hash数据类型中如何给key集合中的field赋值value。

A hdel

B hsetnx

C hexists

D hset

2. Redis技术Hash数据类型中如何从key哈希中,取出field字段的值。

A hdel

B hsetnx

C hexists

D hget

 Redis数据类型_Zset

 简介

Zset与Set非常相似,是一个没有重复元素的String集合。不同之处是Zset的每个元素都关联了一个分数 (score),这个分数被用来按照从低分到高分的方式排序集合中的元素。集合的元素是唯一的,但分数可以重复。

 常用命令

zadd

将一个或多个元素(value)及分数(score)加入到有序集key中。

语法结构:

zadd key score1 value1 score2 value2……

示例:

zadd k1 100 java 200 c++ 300 python 400 php

 zrange

返回key集合中的索引start和索引end之间的元素(包含start和end)。

语法结构:

zrange key start end [withscores]

示例:

zrange k1 0 -1 返回集合中所有元素
zrange k1 0 -1 withscores 返回集合中所有元素,并携带元素分数

 zrangebyscore

返回key集合中的分数minscore 和分数maxscore 之间的元素(包含minscore 和maxscore )。其中元素的位置按分数值递增(从小到大)来排序。

 语法结构:

zrangebyscore key minscore maxscore [withscores]

示例:

zrangebyscore k1 200 400 返回200-400分之间的元素递增排序

 zincrby

 为元素value的score加上increment的值。

语法结构:

zincrby key increment value

示例:

zincrby k1 50 java 给java元素加上50分

zrem 

删除该集合下value的元素。

语法结构:

zrem k1 php 删除php

zcount 

统计该集合在minscore 到maxscore分数区间中元素的个数。

语法结构:

zcount key minscore maxscore

示例:

zcount k1 100 300 统计100分到300分中间元素的个数

 zrank

返回value在集合中的排名,从0开始。

语法结构:

zrank key value

示例:

zrank k1 c++ 返回c++排名

 实时学习反馈

1. Redis技术Zset数据类型中如何给将一个或多个元素(value)及分数(score)加入到有序集key 中。

A zadd

B zrange

C zrangebyscore

D zcount

2. Redis技术Zset数据类型中如何返回key集合中的索引start和索引end之间的元素。

A zadd

B zrange

C zrangebyscore

D zcount

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

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

相关文章

如何在 JavaScript 中处理 HTML 事件?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言什么是HTML事件Jav…

基于多进程并发-进程通讯之共享内存(shared memmory)

一、什么是共享内存 操作系统对进程内存实现原理: 现代操作系统,对于内存管理,采⽤的是虚拟内存技术,也就是每个进程都有⾃⼰独⽴的虚拟内存空间,不同进程的虚拟内存映射到不同的物理内存中。所以,即使进程…

Python交互式模式的特点和用法

Python交互式(Interactive Mode)是一种Python语言的工作模式,与传统的编写、保存、运行的方式不同,它允许用户直接在控制台窗口中输入和执行Python代码。 Python交互式的特点包括: 实时性:每输入一条语句&a…

黑马程序员前端 Vue3 小兔鲜电商项目——(八)登录页面

文章目录 账号密码路由配置模版代码配置路由跳转 表单校验实现校验要求代码实现统一校验 登录基础业务实现统一错误信息提示Pinia 管理用户数据Pinia 用户数据持久化用户登录状态请求拦截器携带 token退出登录实现Token 失效拦截处理 登录页面的主要功能就是表单校验和登录登出…

【Redis 基础及在 Java 中的应用】

文章目录 Redis 基础及在 Java 中的应用1 Redis 入门1.1 Redis 简介1.2 Redis 下载与安装1.3 Redis服务启动与停止 2 数据类型2.1 介绍2.2 五种常用数据类型 3 常用命令3.1 字符串 string 操作命令3.2 哈希 hash 操作命令3.3 列表 list 操作命令3.4 集合 set 操作命令3.5 有序集…

软件SPI读写W25Q64硬件SPI读写W25Q64

目录 软件SPI读写W25Q64 MySPI W25Q64 主函数 硬件SPI读写W25Q64 软件SPI读写W25Q64 程序整体框架: SPI模块包含通信引脚封装,初始化,SPI三个基本时序单元(起始,终止,交换一个字节) W2…

matlab实现语音信号的频域分析及应用

1.语音信号本质上是非平稳信号。但我们可以假设语音信号在一个短时间内是平稳的,这样我们用稳态分析方法处理非平稳信号。应用在傅立叶分析就是短时傅立叶变换。 语音的频域分析:包括语音信号的频谱、功率谱、倒频谱、频谱包络等. 常用频域分析方法&am…

排序算法之堆排序_20230624

排序算法之堆排序 前言 堆排序是基于比较排序的一类算法,算法重复利用堆(Binary heap)的特性,最大(最小)元素一定位于堆顶的位置,那么就可以提取堆顶元素,放置在数组的尾部位置,后再把剩余的元…

设计模式之状态模式笔记

设计模式之状态模式笔记 说明State(状态)目录状态模式示例类图抽象状态类环境角色类电梯开启状态类电梯关闭状态类电梯运行状态类电梯停止状态类测试类 说明 记录下学习设计模式-状态模式的写法。JDK使用版本为1.8版本。 State(状态) 意图:允许一个对象在其内部状态改变时改…

从零搭建一台基于ROS的自动驾驶车-----4.定位

系列文章目录 北科天绘 16线3维激光雷达开发教程 基于Rplidar二维雷达使用Hector_SLAM算法在ROS中建图 Nvidia Jetson Nano学习笔记–串口通信 Nvidia Jetson Nano学习笔记–使用C语言实现GPIO 输入输出 Autolabor ROS机器人教程 从零搭建一台基于ROS的自动驾驶车-----1.整体介…

【Leetcode60天带刷】day25回溯算法——216.组合总和III,17.电话号码的字母组合

​ 题目: 216. 组合总和 III 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 1…

读书笔记--数据治理之术

继延续上一篇文章,对数据治理之术进行学习思考,这部分内容是本书整体内容的核心细节,内容比较多比较杂,通读了好长时间才动手总结整理,因此更新的慢了一些。数据治理之术是操作层面的技术或方法,数据治理相…

linux系统如何添加硬盘设备

前言: 今天记录一下硬盘方面的知识,主要讲一下分区、挂载方面的知识,心情太郁闷了,假期的最后一天。 1、硬盘的命名规则 现在的硬盘设备一般都会以“/dev/sd”开头,而一台主机上可以有多块硬盘设备,因此系…

6.24全球央行鹰派立场重现,下周黄金是否会继续下跌?

近期有哪些消息面影响黄金走势?下周黄金多空该如何研判? ​黄金消息面解析:周五(6月23日)美市尾盘,现货黄金收报1920.44美元/盎司,上升6.58美元或0.34%,日内最高触及1937.46美元/盎…

Linux基础服务3——samba

文章目录 一、基本了解1.1 服务安装1.2 服务进程和端口1.3 samba用户1.4 配置文件1.4.1 主配置文件1.4.2 配置文件参数 1.5 安全级别 二、访问samba2.1 参数测试2.2 交互式访问2.3 挂载访问2.3.1 临时挂载2.3.2 永久挂载 2.4 配置用户认证共享2.5 匿名共享 一、基本了解 什么是…

VS Code基于服务器中的docker的开发环境配置

VS Code基于服务器中的docker的开发环境配置 基于Dev Containers插件基于Jump Machine(跳板机)服务器通过ssh连接docker容器VS Code配置ssh config文件连接docker容器 基于Dev Containers插件 当然可以在vscode中直接下载Dev Containers插件&#xff0c…

表上作业法一般流程(最小元素法、闭合回路法、位势法)

目录 一、列出物资调运平衡表和运价表 二、编制初始调运方案 三、初始方案的检验与调整 1)闭合回路法 2)位势法 3)调整调运方案 表上作业法一般步骤: ①列出调运物资的供需(产销)平衡表及运价表; ②按最小元素…

mediapipe 谷歌高效ML框架-图像识别、人脸检测、人体关键点检测、手部关键点检测

参考: https://github.com/google/mediapipe https://developers.google.com/mediapipe/solutions/guide 框架也支持cv、nlp、audio等项目,速度很快: 1、图形识别 参考:https://developers.google.com/mediapipe/solutions/vi…

05.内存管理:动态申请和释放内存

动态分配内存,进行内存管理 参考: 伙伴算法原理简介 linux 0.11源码 本文主要针对Linux0.11的malloc和free进行分析。是一种类似伙伴系统的内存管理方法,不过伙伴系统的内存通常是申请大于一页的内存,但是在该内核版本的内存管理&#xff0c…

剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 / LeetCode 235. 二叉搜索树的最近公共祖先(二叉搜索树性质,搜索与回溯)

题目: 链接:剑指 Offer 68 - I. 二叉搜索树的最近公共祖先;LeetCode 235. 二叉搜索树的最近公共祖先 难度:中等 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对…