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

 

目录

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

猜你喜欢

转载自blog.csdn.net/m0_58719994/article/details/131359279