【学习笔记】Redis的基础命令

【学习笔记】Redis的基础命令

前言

本篇文章是博主个人学习 Redis 时所整理的基础命令,同时参考了 菜鸟教程和一些csdn大佬的文章 。希望本篇文章能给屏幕前的你带来所有帮助!

在这里插入图片描述


基础命令

ping: 判断是否链接成功,正常返回PONG。

clear: 清除命令行,提高可读性!

help: 用于查询一些命令的具体用法。

127.0.0.1:6379> help keys

  KEYS pattern
  summary: Find all keys matching the given pattern
  since: 1.0.0
  group: generic

set: 创建键值

127.0.0.1:6379> set name xiaobao
OK

get: 获取值

127.0.0.1:6379> get name
"xiaobao"

keys: 查看数据库中所有的键

127.0.0.1:6379> keys *
1) "age"
2) "name"
3) "gender"

expire: 设置数据的存储时间

127.0.0.1:6379> expire name 20
(integer) 1
127.0.0.1:6379> ttl name
(integer) 17
127.0.0.1:6379> ttl name
(integer) 15
127.0.0.1:6379> ttl name
(integer) 13
127.0.0.1:6379> ttl name
(integer) 10
127.0.0.1:6379> ttl name
(integer) 9
127.0.0.1:6379> ttl name
(integer) 8
127.0.0.1:6379> ttl name
(integer) 6
127.0.0.1:6379> ttl name
(integer) 5
127.0.0.1:6379> ttl name
(integer) 2
127.0.0.1:6379> ttl name
(integer) -2

ttl: 查看数据的生命周期,若返回-2,证明key已过期

127.0.0.1:6379> ttl name
(integer) 17

exists: 判断是否存在键

127.0.0.1:6379> exists name
(integer) 1

type: 判断该数据为什么类型

127.0.0.1:6379> type name
string

move: 移除数据

127.0.0.1:6379> move name 1
(integer) 1
127.0.0.1:6379> get name 
(nil)

FLUSHALL: 清除所有的数据

127.0.0.1:6379> keys *
1) "age"
2) "name"
3) "gender"
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> keys *
(empty list or set)

mset: 创建多条数据

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

mget: 获取多条数据

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

MSETNX: 原子性操作,要不都成功,要不都失败!

127.0.0.1:6379> msetnx k1 v1 
(integer) 0
127.0.0.1:6379> msetnx k4 v4
(integer) 1
127.0.0.1:6379> keys*
(error) ERR unknown command 'keys*'
127.0.0.1:6379> keys *
1) "hello"
2) "str"
3) "k3"
4) "age"
5) "k4"
6) "k2"
7) "name"
8) "k1"

String

strlen: 查看字符串的长度。

127.0.0.1:6379> set name xiaobao
OK
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> strlen name
(integer) 7

append: 给字符串拼接,然后返回总的字符串长度。

127.0.0.1:6379> append name coll
(integer) 11
127.0.0.1:6379> get name
"xiaobaocoll"

getrange: 截取字符串

127.0.0.1:6379> set str "hello world!"
OK
127.0.0.1:6379> getrange str 0 4
"hello"

setrange: 替换字符串

127.0.0.1:6379> get str
"hello world!"
127.0.0.1:6379> setrange str 5 -
(integer) 12
127.0.0.1:6379> get str
"hello-world!"

Hash

Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

hset: 添加或者修改hash类型key的field的值。

127.0.0.1:6379> hset myhash name xioabao age 18
(integer) 2

hget: 获取一个hash类型的key的field的值。

127.0.0.1:6379> hget myhash name
"xioabao"

hmset: 批量添加多个hash类型的key的field的值。

HMSET myhash field1 "Hello" field2 "World"

hmget: 批量获取多个hash类型的key的field值

127.0.0.1:6379> hmget myhash name age
1) "xioabao"
2) "18"

hgetall: 获取一个hash类型中的所有的field和value

127.0.0.1:6379> hgetall myhash
1) "name"
2) "xioabao"
3) "age"
4) "18"

hkeys: 获取一个hash类型的key中所有的field

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

hvals: 获取一个hash类型的key中的所有value

127.0.0.1:6379> hvals myhash
1) "xioabao"
2) "18"

hincrby: 让一个hash类型key的字段值自增并指定步长

127.0.0.1:6379> hincrby myhash age 3
(integer) 21
127.0.0.1:6379> hget myhash age
"21"

hsetnx: 添加一个hash类型的key的field值,前提是这个field不存在。

127.0.0.1:6379> hsetnx myhash sex nan
(integer) 1

1、命令参数

HSET key field value

HSETNX key field value

2、作用区别:

HSET 将哈希表 key 中的域 field 的值设为 value 。如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。如果域 field 已经存在于哈希表中,旧值将被覆盖。

HSETNX 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。若域 field 已经存在,该操作无效。如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。

3、返回值区别:

HSET:如果 field 是哈希表中的一个新建域,并且值设置成功,返回 1 。如果哈希表中域 field 已经存在且旧值已被新值覆盖,返回 0 。HSETNX:设置成功,返回 1 。如果给定域已经存在且没有操作被执行,返回 0 。


List

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

Lpush: 给列表左边添加一个元素。

127.0.0.1:6379> lpush list1 xiaobao
(integer) 1

Rpush: 给列表右边添加一个元素。

127.0.0.1:6379> rpush list1 age xiaobao 18
(integer) 4

lrange: 查看列表中的元素。

127.0.0.1:6379> lrange list1 0 10
1) "xiaobao"
2) "age"

BLPOP: 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

127.0.0.1:6379> lrange list1 0 10
1) "xiaobao"
2) "age"
127.0.0.1:6379> blpop list1 1
1) "list1"
2) "xiaobao"
127.0.0.1:6379> lrange list1 0 10
1) "age"

BRPOP: 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

127.0.0.1:6379> lrange list1 0 10
1) "name"
2) "age"
127.0.0.1:6379> brpop list1 1
1) "list1"
2) "age"

Lindex: 通过索引获取列表中的元素。

127.0.0.1:6379> lindex list1 2
"xiaobao"

Linsert: 用于在列表的元素前或者后插入元素。当指定元素不存在于列表中时,不执行任何操作。

127.0.0.1:6379> linsert list1 before xiaobao dabao
(integer) 5
127.0.0.1:6379> lrange list1 0 10
1) "name"
2) "age"
3) "dabao"
4) "xiaobao"
5) "18"

LLen: 获取列表的长度。

127.0.0.1:6379> lrange list1 0 10
1) "name"
2) "age"
3) "dabao"
4) "xiaobao"
5) "18"
127.0.0.1:6379> llen list1
(integer) 5

LPOP: 删除列表中的第一个元素。

127.0.0.1:6379> lrange list1 0 10
1) "name"
2) "age"
3) "dabao"
4) "xiaobao"
5) "18"
127.0.0.1:6379> llen list1
(integer) 5
127.0.0.1:6379> lpop list1
"name"
127.0.0.1:6379> lrange list1 0 10
1) "age"
2) "dabao"
3) "xiaobao"
4) "18"

Lpushx: 将一个值插入到已存在的列表头部,列表不存在时操作无效。

127.0.0.1:6379> lrange list1 0 10
1) "age"
2) "dabao"
3) "xiaobao"
4) "18"
127.0.0.1:6379> lpushx list1 name
(integer) 5
127.0.0.1:6379> lrange list1 0 10
1) "name"
2) "age"
3) "dabao"
4) "xiaobao"
5) "18"

LREM: LREM key count VALUE

Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。

COUNT 的值可以是以下几种:

  • count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
  • count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
  • count = 0 : 移除表中所有与 VALUE 相等的值。
127.0.0.1:6379> lrange list1 0 10
1) "name"
2) "age"
3) "dabao"
4) "xiaobao"
5) "18"
127.0.0.1:6379> lrem list1 3 name
(integer) 1
127.0.0.1:6379> lrange list1 0 10
1) "age"
2) "dabao"
3) "xiaobao"
4) "18"

Lset: 通过索引来设置元素的值。

127.0.0.1:6379> lrange list1 0 10
1) "age"
2) "dabao"
3) "xiaobao"
4) "18"
127.0.0.1:6379> lset list1 2 erbao
OK
127.0.0.1:6379> lrange list1 0 10
1) "age"
2) "dabao"
3) "erbao"
4) "18"

Ltrim: 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

127.0.0.1:6379> lrange list1 0 10
"age"
"dabao"
"erbao"
"18"
127.0.0.1:6379> ltrim list1 1 2
OK
127.0.0.1:6379> lrange list1 0 10
"dabao"
"erbao"

RPOP: 用于移除列表的最后一个元素,返回值为移除的元素。

127.0.0.1:6379> lrange list1 0 10
"dabao"
"erbao"
127.0.0.1:6379> rpop list1
"erbao"

Rpushx: 命令用于将一个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效。

127.0.0.1:6379> lrange list1 0 10
"dabao"
127.0.0.1:6379> rpushx list1 xiaobao
(integer) 2
127.0.0.1:6379> lrange list1 0 10
"dabao"
"xiaobao"

Set

Redis 的 Set 是 String 类型的 无序集合 。集合成员是 唯一 的,这就意味着集合中不能出现重复的数据。

集合对象的编码可以是 intset 或者 hashtable

Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)

集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

sadd: 将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。

127.0.0.1:6379> smembers myset
1) "xiaobao"
127.0.0.1:6379> sadd myset name age 
(integer) 2
127.0.0.1:6379> smembers myset
1) "age"
2) "xiaobao"
3) "name"
127.0.0.1:6379> sadd myset name
(integer) 0

scard: 返回集合中元素的数量。

127.0.0.1:6379> scard myset
(integer) 3

sdiff: 返回第一个集合与其他集合之间的差异,也可以认为说第一个集合中独有的元素。不存在的集合 key 将视为空集。

127.0.0.1:6379> sadd myset1 name
(integer) 1
127.0.0.1:6379> sdiff myset myset1
1) "age"
2) "xiaobao"

sinter: 返回给定所有给定集合的交集。 不存在的集合 key 被视为空集。

127.0.0.1:6379> sinter myset myset1
1) "name"

Sinterstore: 将给定集合之间的交集存储在指定的集合中。如果指定的集合已经存在,则将其覆盖。

127.0.0.1:6379> sinterstore myset2 myset myset1
(integer) 1
127.0.0.1:6379> smembers myset2
1) "name"

Sismember: 命令判断成员元素是否是集合的成员。

127.0.0.1:6379> sismember myset name
(integer) 1
127.0.0.1:6379> sismember myset no
(integer) 0

Smembers: 命令返回集合中的所有的成员。 不存在的集合 key 被视为空集合。

127.0.0.1:6379> smembers myset
1) "xiaobao"
2) "name"

Smove: 命令将指定成员 member 元素从 source 集合移动到 destination 集合。

SMOVE 是原子性操作。

如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去。

当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。

当 source 或 destination 不是集合类型时,返回一个错误。

127.0.0.1:6379> smove myset myset1 age
(integer) 1
127.0.0.1:6379> smembers myset
1) "xiaobao"
2) "name"

spop: 随机删除集合中的一个随机元素并返回!

127.0.0.1:6379> smembers myset1
1) "age"
2) "name"
127.0.0.1:6379> spop myset 1
1) "name"
127.0.0.1:6379> smembers myset
1) "xiaobao"

Srandmember: 用于返回集合中的一个随机元素。

127.0.0.1:6379> smembers myset
1) "xiaobao"
127.0.0.1:6379> srandmember myset 1
1) "xiaobao"

Srem: 用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。

127.0.0.1:6379> srem myset1 name
(integer) 1
127.0.0.1:6379> smembers myset1
1) "age"

sunion: 返回给定集合的并集。不存在的集合 key 被视为空集。

redis> SADD key1 "a"
(integer) 1
redis> SADD key1 "b"
(integer) 1
redis> SADD key1 "c"
(integer) 1
redis> SADD key2 "c"
(integer) 1
redis> SADD key2 "d"
(integer) 1
redis> SADD key2 "e"
(integer) 1
redis> SUNION key1 key2
1) "a"
2) "c"
3) "b"
4) "e"
5) "d"

Sscan: 命令用于迭代集合中键的元素

> SADD myset1 "Google"
(integer) 1
> SADD myset1 "Runoob"
(integer) 1
> SADD myset1 "Taobao"
(integer) 1
> SSCAN myset1 0 match R*
1) "0"
2) 1) "Runoob"

sorted set

Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

zadd: 用于将一个或多个成员元素及其分数值加入到有序集当中。

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 1 "uno"
(integer) 1
redis> ZADD myzset 2 "two" 3 "three"
(integer) 2
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
7) "three"
8) "3"

Zcard: 用于计算集合中元素的数量。

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZCARD myzset
(integer) 2

Zincrby: 命令对有序集合中指定成员的分数加上增量 increment

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZINCRBY myzset 2 "one"
"3"
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "two"
2) "2"
3) "one"
4) "3"

Zinterstore: 命令计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。

# 有序集 mid_test
redis 127.0.0.1:6379> ZADD mid_test 70 "Li Lei"
(integer) 1
redis 127.0.0.1:6379> ZADD mid_test 70 "Han Meimei"
(integer) 1
redis 127.0.0.1:6379> ZADD mid_test 99.5 "Tom"
(integer) 1

# 另一个有序集 fin_test
redis 127.0.0.1:6379> ZADD fin_test 88 "Li Lei"
(integer) 1
redis 127.0.0.1:6379> ZADD fin_test 75 "Han Meimei"
(integer) 1
redis 127.0.0.1:6379> ZADD fin_test 99.5 "Tom"
(integer) 1

# 交集
redis 127.0.0.1:6379> ZINTERSTORE sum_point 2 mid_test fin_test
(integer) 3

# 显示有序集内所有成员及其分数值
redis 127.0.0.1:6379> ZRANGE sum_point 0 -1 WITHSCORES     
1) "Han Meimei"
2) "145"
3) "Li Lei"
4) "158"
5) "Tom"
6) "199"

Zlexcount: 命令在计算有序集合中指定字典区间内成员数量。

redis 127.0.0.1:6379> ZADD myzset 0 a 0 b 0 c 0 d 0 e
(integer) 5
redis 127.0.0.1:6379> ZADD myzset 0 f 0 g
(integer) 2
redis 127.0.0.1:6379> ZLEXCOUNT myzset - +
(integer) 7
redis 127.0.0.1:6379> ZLEXCOUNT myzset [b [f
(integer) 5

Zrange: 返回有序集中,指定区间内的成员。

redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES             # 显示整个有序集成员
1) "jack"
2) "3500"
3) "tom"
4) "5000"
5) "boss"
6) "10086"

redis 127.0.0.1:6379> ZRANGE salary 1 2 WITHSCORES              # 显示有序集下标区间 1 至 2 的成员
1) "tom"
2) "5000"
3) "boss"
4) "10086"

redis 127.0.0.1:6379> ZRANGE salary 0 200000 WITHSCORES         # 测试 end 下标超出最大下标时的情况
1) "jack"
2) "3500"
3) "tom"
4) "5000"
5) "boss"
6) "10086"

redis > ZRANGE salary 200000 3000000 WITHSCORES                  # 测试当给定区间不存在于有序集时的情况
(empty list or set)

Zrank: 返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。

redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES        # 显示所有成员及其 score 值
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "5000"

redis 127.0.0.1:6379> ZRANK salary tom                     # 显示 tom 的薪水排名,第二
(integer) 1

Zrem: 命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略。

# 测试数据

redis 127.0.0.1:6379> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"


# 移除单个元素

redis 127.0.0.1:6379> ZREM page_rank google.com
(integer) 1

redis 127.0.0.1:6379> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"


# 移除多个元素

redis 127.0.0.1:6379> ZREM page_rank baidu.com bing.com
(integer) 2

redis 127.0.0.1:6379> ZRANGE page_rank 0 -1 WITHSCORES
(empty list or set)


# 移除不存在元素

redis 127.0.0.1:6379> ZREM page_rank non-exists-element
(integer) 0

猜你喜欢

转载自blog.csdn.net/m0_54355125/article/details/125004033