目录
[2.1 String (字符串)](#2.1 String (字符串))
[2.2 List(列表)](#2.2 List(列表))
[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> 把集合中一个值从一个集合移动到另外一个集合