Redis 常用命令以及结构

目录

1、目的

2、分析

[2.1 String (字符串)](#2.1 String (字符串))

[2.2 List(列表)](#2.2 List(列表))

在右侧插入数据

获取,返回列表里指定元素。

获取索引为N的元素

设置指定索引位置的元素值

[2.3 Hash (哈希)](#2.3 Hash (哈希))

[Redis---Hash 底层结构介绍](#Redis---Hash 底层结构介绍)

[设置hash 值](#设置hash 值)

[删除Hash 值](#删除Hash 值)

[2.4 ZSET](#2.4 ZSET)

[1、添加 先写权重,可更新覆盖](#1、添加 先写权重,可更新覆盖)

[获取键zset 的集合中所有元素:](#获取键zset 的集合中所有元素:)

[列出所有元素以及 他们对应的score](#列出所有元素以及 他们对应的score)

[返回score 值在 min 和 max 之间的成员](#返回score 值在 min 和 max 之间的成员)

[返回成员member 的score 值](#返回成员member 的score 值)

[统计分支范围内的元素个数 [默认指闭区间]](#统计分支范围内的元素个数 [默认指闭区间])

获取对应的下标值

删除

[2.5 SET](#2.5 SET)


1、目的

梳理了redis 的相关结构,以及其对应的用法。

2、分析

2.1 String (字符串)

string 类型是redis 最近的类型,一个key 对应一个value

Redis 中String 类型是二进制安全的 ,可以包含任何数据,例如序列化的对象或者图片

String 类型一个键最大能存储 512M

Redis 中对String 类型的赋值命令是SET, 取值命令是GET

set myKey "testString"
​
get myKey

通过set 命令,加入key 为mykey,对应的值为testString 的缓存数据

2.2 List(列表)

Redis 列表类型是最简单的字符串列表啊,按照插入的顺序排序

每个List 最多存储 2^32-1 个元素(40多亿)

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

列表的元素类型为string

按照插入顺序排序

使用场景:

消息队列

排行榜

最新列表

Redis 中List 类型通过Push 命令赋值,通过lrang 命令取值

lpush test-list Java
​
    
lpush test-list PHP
 
lrange test-list  0 5 

key 值为test-list ,存入的 value 值分别为java PHP C++

在右侧插入数据

从右边(尾部) 插入一个或者多个值

rpush key value1 value2 ...
获取,返回列表里指定元素。

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

lrange key start stop

start stop 为元素的下标索引。索引从左侧开始,第一个元素为0,索引可以是负数,表示从尾部开始计数,如 -1 表示最后一个元素

获取索引为N的元素

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

lindex key index
设置指定索引位置的元素值

将索引为index 的值设置为value

索引从左侧开始,第一个元素为0。 索引可以是负数,表示尾部开始计数,如 -1 表示最后一个元素

lset key index value

修改键为a1的列表中下标为1的元素值为z:

lset a1 1 z

2.3 Hash (哈希)

Redis 的hash 是一个键值对集合,特别适合用于存储对象

每个hash 最多可存储 2^32 - 1 个元素(40多亿)

Redis 中的hash 类型通过HMSET 命令赋值, H

Redis---Hash 底层结构介绍

Redis 的hash 类型的底层实现是一个非常优化的数据结构,它会根据实际情况选择使用紧凑的压缩列表(zipList) 或者 散列表(hashtable) 作为底层 实现。

设置hash 值

Redis 中设置 Hash 值的命令是HSET

HSET key field value

其中,key 是哈希表的名称,field 是哈希表中的字段名,value 是字段对应的值,如果哈希表中原本不存在该字段,则会创建 一个新的字段,并将其值设置为指定的值,如果该字段已经存在, 则会覆盖原有的值。

例如,我们可以使用以下命令设置一个 user:1001 的哈希表中的字段 name 的值Alice :

HSET user:1001 name Alice

如果需要设置多个字段值,可以使用HMSET 的命令,它的语法如下:

HMSET key field1 value1 [field1 value2 ...]

例如,我们可以使用以下命令同时设置user:1001 哈希表中的name 和age 字段的值

HMSET user:1001 name Alice age 25

这样就可以一次性设置多个字段的值了

在Redis中获取Hash 值的命令是HGET ,它的语法如下:

HGET key field

其中,key 是哈希表的名称,field 是哈希表中的字段名

例如,我们可以使用以下命令获取一个名为user:1001 的哈希表中的字段name 的值:

HGET user:1001 name

如果需要获取哈希表中的多个字段值,可以使用HMGET 命令,它的语法如下:

HMGET key field1 [field2 ...]

例如,我们可以使用以下命令获取 user:1001 哈希表中的name 和 age 字段的值:

HMGET user:1001  name age

如果需要获取哈希表中所有的字段和值,可以使用HGETALL 命令,它的语法如下:

HGETALL key

例如,我们可以使用以下命令获取 user:1001 哈希表中的所有字段和值

HGETALL user:1001
删除Hash 值

在 Redis 中,删除Hash 值命令是HDEL ,它的语法如下:

HDEL key field [field ...]

其中, key 是哈希表的名称, field 是要删除的字段名,你可以一次删除一个或者多个字段。

例如,我们可以使用如下 命令删除一个名为user:1001 的哈希表中的字段 name:

HDEL user:1001 name

或者

HDEL user:1001 name age

这个命令会删除 user:1001 哈希表中的name 和age 字段

需要注意的是,HDEL 命名只会删除指定的字段以及其值, 而不会删除整个哈希表,如果你想要删除整个哈希表,可以使用 DEL 命令,例如

DEL user:1001

这个命令会删除 user:1001 哈希表

2.4 ZSET

集合的元素是唯一的,但是分数可以重复。

① 元素为string 类型

② 每个元素都会关联一个double类型的score,表示权重,通过权重将元素从小到大排序

1、添加 先写权重,可更新覆盖

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

zadd key score1 member1 score2 member2 ...

向键zset 的集合中添加元素test1 ,test2 ,test3 权重分别为 4, 5 ,3

zadd zset 4 test1 5 test2 3 test3

如果某个元素已经是有序集的元素,那么更新这个元素的分数值,并通过重新插入这个元素来保证该元素在正确的位置上。

分数值可以是整数值或者双精度浮点数

如果有序集合key 不存在,则创建一个空的有序集合并执行zadd操作

获取键zset 的集合中所有元素:
zrange  key start stop 

获取键值zset 的集合中所有元素

zrange zset 0 -1
列出所有元素以及 他们对应的score
zrange key start end withscores 

其中 0 表示列表的第一个 元素, -1 表示最后一个元素。 withScores 是可选参数,是否返回分数

zrange zset 0 -1 withscores 
返回score 值在 min 和 max 之间的成员
zrangescore key min max

获取键zset 的集合中权限值在 5和 6 之间的成员:

zrangebyscore zset 5 6
返回成员member 的score 值
zscore key member 

获取键zset 的集合元素 zhangsan的权重

zscore zset zhangsan
统计分支范围内的元素个数 [默认指闭区间]

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

zcount zset 4 5
获取对应的下标值

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

zrank zset lisi
删除

删除指定元素

删除钙元素下value 的元素

zrem key member1 member2 ...

删除集合zset 中元素zhangsan:

zrem zset zhangsan

删除权重在指定范围的元素 [包括最小值和最大值]

zremrangebyscore key min max

删除集合zset 中权限在 5 ,6 之间的元素

zremrangebyscore zset 5  6

2.5 SET

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

sadd key value1 value2添加一个或者多个元素到集合中

**smembers <key>**取出该集合的所有值

scard <key> 返回该集合的元素个数

srem <key> <value1> <value> 删除集合中 的某几个元素

spop <key> 随机从该集合吐出一个元素

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

sunion <key1> <key2> 返回两个集合并集元素

sinter <key1> <key2> 返回两个集合的交集元素

**srandmember <key> <n>**随机从该集合中取出n个值,不会从集合中删除

smove <source> <desctination> <value> 把集合中一个值从一个集合移动到另外一个集合

相关推荐
tyler_download几秒前
golang 实现比特币内核:实现基于椭圆曲线的数字签名和验证
开发语言·数据库·golang
编程、小哥哥16 分钟前
设计模式之抽象工厂模式(替换Redis双集群升级,代理类抽象场景)
redis·设计模式·抽象工厂模式
weixin_4493108426 分钟前
高效集成:聚水潭采购数据同步到MySQL
android·数据库·mysql
Cachel wood1 小时前
Github配置ssh key原理及操作步骤
运维·开发语言·数据库·windows·postgresql·ssh·github
standxy1 小时前
如何将钉钉新收款单数据高效集成到MySQL
数据库·mysql·钉钉
Narutolxy3 小时前
MySQL 权限困境:从权限丢失到权限重生的完整解决方案20241108
数据库·mysql
Venchill3 小时前
安装和卸载Mysql(压缩版)
数据库·mysql
Humbunklung3 小时前
一种EF(EntityFramework) MySQL修改表名去掉dbo前缀的方法
数据库·mysql·c#
PGCCC4 小时前
【PGCCC】postgresql 缓存池并发设计
数据库·缓存·postgresql
小爬虫程序猿4 小时前
如何利用Python解析API返回的数据结构?
数据结构·数据库·python