Redis数据结构(命令操作)

Redis数据结构

redis数据结构包括:字符串、哈西、列表、集合、有序集合

基本类型

字符串

# key = string value = string || int || bits (limit 512MB)

# get set del o(1)
# 获取 设置 删除
27.0.0.1:6381> set hello world
OK
127.0.0.1:6381> get hello
"world"
127.0.0.1:6381> del hello
(integer) 1
127.0.0.1:6381> get hello
(nil)
127.0.0.1:6381>

# incr decr incrby decrby o(1)
# 加1 减1 加n 减n (单线程,适合做计数器)
127.0.0.1:6381> set count 1
OK
127.0.0.1:6381> incr count
(integer) 2
127.0.0.1:6381> decr count
(integer) 1
127.0.0.1:6381> incrby count 99
(integer) 100
127.0.0.1:6381> decrby count 100
(integer) 0
127.0.0.1:6381> del count
(integer) 1
127.0.0.1:6381> get count
(nil)

# set setnx setxx o(1)
# 设置 空时才设置(添加) 不为空时才设置(更新)
# 正常操作
127.0.0.1:6381> exists flag
(integer) 0
127.0.0.1:6381> setnx flag add
(integer) 1
127.0.0.1:6381> get flag
"add"
127.0.0.1:6381> set flag update xx
OK
127.0.0.1:6381> get flag
"update"
# 操作失败
127.0.0.1:6381> get flag
"update"
127.0.0.1:6381> setnx flag add
(integer) 0
127.0.0.1:6381> get flag
"update"
127.0.0.1:6381> del flag
(integer) 1
127.0.0.1:6381> set flag update xx
(nil)

# mget mset o(n)
# 批量获取 批量设置 (减少多次获取网络传输消耗,需注意redis为单线程不宜一次批量获取过多影响后续请求,可分批获取)
127.0.0.1:6381> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6381> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"

# getset o(1)
# 获取旧值并设置新值
127.0.0.1:6381> set flag first
OK
127.0.0.1:6381> getset flag second
"first"
127.0.0.1:6381> get flag
"second"

# append strlen o(1)
# 字符串追加 字符串长度(内部计数,因此复杂度o(1))
127.0.0.1:6381> get k1
"v1"
127.0.0.1:6381> append k1 v1v1v1
(integer) 8
127.0.0.1:6381> get k1
"v1v1v1v1"
127.0.0.1:6381> strlen k1
(integer) 8
127.0.0.1:6381>

# incrbyfloat o(1)
127.0.0.1:6381> set f 1.0
OK
127.0.0.1:6381> incrbyfloat f 4.1
"5.1"
127.0.0.1:6381> incrbyfloat f -5.1
"0"

# getrange setrange o(1)
# 获取对于下标值 设置对应下标值
127.0.0.1:6381> set str helloworld
OK
127.0.0.1:6381> getrange str 4 -4
"owo"
127.0.0.1:6381> setrange str 5 o
(integer) 10
127.0.0.1:6381> get str
"hellooorld"
127.0.0.1:6381> setrange str 4 eee
(integer) 10
127.0.0.1:6381> get str
"helleeerld"

哈希

# key			->	field -> value
# -----------------------------
# user:1	->	name	->	chaitou
#					->	age		->	18

# hget hset hdel o(1)
127.0.0.1:6381> hset user:1 name chaitou
(integer) 1
127.0.0.1:6381> hset user:1 age 18
(integer) 1
127.0.0.1:6381> hget user:1 name
"chaitou"
127.0.0.1:6381> hdel user:1 name
(integer) 1
127.0.0.1:6381> hget user:1 name
(nil)

# hexists hlen o(1)
127.0.0.1:6381> hget user:1 name
"chaitou"
127.0.0.1:6381> hexists user:1 name
(integer) 1
127.0.0.1:6381> hlen user:1
(integer) 2

# hmget hmset o(n)
127.0.0.1:6381> hmset user:2 name kangkang age 20 nikeName jack
OK
127.0.0.1:6381> hmget user:2 name nikeName
1) "kangkang"
2) "jack"

# hincrby o(1)
127.0.0.1:6381> hget user:2 age
"21"
127.0.0.1:6381> hincrby user:2 age 9
(integer) 30
127.0.0.1:6381> hget user:2 age
"30"

# hgetall hvals hkeys o(n)
# 获取所有field和value 获取所有value 获取所有field
127.0.0.1:6381> hgetall user:2
1) "name"
2) "kangkang"
3) "age"
4) "30"
5) "nikeName"
6) "jack"
127.0.0.1:6381> hvals user:2
1) "kangkang"
2) "30"
3) "jack"
127.0.0.1:6381> hkeys user:2
1) "name"
2) "age"
3) "nikeName"

列表

# key = string value = list

# linsert key before|after value newValue o(n)
# a-b-c-d
# linsert list after b java
# a-b-java-c-d

# lpop rpop lpush lpop o(1)
# 左弹 又弹 左插 右插

# lrem key count value o(n)
# count > 0 左向右删除count个value项
# count < 0 右向左删除count个value项
# count = 0 删除所有value项

# ltrim key start end(左闭右闭) o(n)
# 截取start:end列表

# lrange key start end(左闭右闭区间) o(n)

# lindex key index o(n)

# llen key o(1)
# 获取长度

# lset key index newValue

127.0.0.1:6381> rpush list a b c
(integer) 3
127.0.0.1:6381> lpush list 1 2 3
(integer) 6
127.0.0.1:6381> lrange list 0 -1
"3"	- "2"	- "1"	- "a"	- "b"	- "c"
127.0.0.1:6381> lpop list
"3"
127.0.0.1:6381> rpop list
"c"
127.0.0.1:6381> lrange list 0 -1
"2" - "1" - "a" - "b"
127.0.0.1:6381> llen list
(integer) 4
127.0.0.1:6381> linsert list before a java
(integer) 5
127.0.0.1:6381> lrange list 0 -1
"2" - "1" - "java" - "a" - "b"
127.0.0.1:6381> lset list 2 go
OK
127.0.0.1:6381> lrange list 0 -1
"2" - "1" - "go" - "a" - "b"
127.0.0.1:6381> lrem list 0 go
(integer) 1
127.0.0.1:6381> lrange list 0 -1
"2" - "1" - "a" - "b"
127.0.0.1:6381> ltrim list 1 2
OK
127.0.0.1:6381> lrange list 0 -1
"1" - "a"

# blpop brpop o(1)
# 阻塞左弹 阻塞右弹(消息队列)
127.0.0.1:6381> blpop blist 100
# 等待
# 其他客户端 lpush blist a b c d
1) "blist"
2) "d"
(6.21s)

集合内

# sadd srem o(1)
# 做点赞等功能
127.0.0.1:6381> sadd user:1:lan java go python c
(integer) 4

# scard 集合内元素个数
127.0.0.1:6381> scard user:1:lan
(integer) 4

# sismember 判断元素是否在集合内
127.0.0.1:6381> sismember user:1:lan c
(integer) 1

# srandmember 随机取count个元素
127.0.0.1:6381> srandmember user:1:lan 3
1) "python"
2) "c"
3) "java"

# spop 随机弹出一个元素
# 做抽奖功能
127.0.0.1:6381> spop user:1:lan
"go"

# smembers 获取所有元素(无序)
127.0.0.1:6381> smembers user:1:lan
1) "c"
2) "python"
3) "go"
4) "java"

集合间

# sdiff sinter sunion
# 差集 交集 并集
127.0.0.1:6381> sadd user:1:lan java go python
(integer) 3
127.0.0.1:6381> sadd user:2:lan c c++ go
(integer) 3
127.0.0.1:6381> sdiff user:1:lan user:2:lan
1) "python"
2) "java"
127.0.0.1:6381> sdiff user:2:lan user:1:lan
1) "c"
2) "c++"
127.0.0.1:6381> sinter user:1:lan user:2:lan
1) "go"
127.0.0.1:6381> sunion user:1:lan user:2:lan
1) "java"
2) "go"
3) "python"
4) "c"
5) "c++"

有序集合

# key = string value = score, element (按score排序)
# zadd o(logN)
127.0.0.1:6381> zadd stu:rank 100 chaitou 80 kangkang 60 jack 90 nike
(integer) 4
# zcard o(1)
127.0.0.1:6381> zcard stu:rank
(integer) 4
# zrange zrevrange o(log(n) + m)
127.0.0.1:6381> zrange stu:rank 0 -1
1) "jack"
2) "kangkang"
3) "nike"
4) "chaitou"
127.0.0.1:6381> zrange stu:rank 0 -1 withscores
1) "jack"
2) "60"
3) "kangkang"
4) "80"
5) "nike"
6) "90"
7) "chaitou"
8) "100"
# zrangebyscore zrevrangebyscore o(log(n)+m)
127.0.0.1:6381> zrangebyscore stu:rank 1 90 withscores
1) "jack"
2) "60"
3) "kangkang"
4) "80"
5) "nike"
6) "90"
# zscore zrank zrevrank o(1)
# 获取分数 获取排名
27.0.0.1:6381> zscore stu:rank kangkang
"80"
127.0.0.1:6381> zrank stu:rank kangkang
(integer) 1
# zincrby o(1)
127.0.0.1:6381> zincrby stu:rank 30 kangkang
"110"
# zrem o(1)
127.0.0.1:6381> zrem stu:rank kangkang
(integer) 1
127.0.0.1:6381> zrange stu:rank 0 -1
1) "jack"
2) "nike"
3) "chaitou"
# zcount o(log(n) + m)
127.0.0.1:6381> zcount stu:rank 1 90
(integer) 2
# zremrangebyrank zremrangkbyscore o(log(n) + m)
127.0.0.1:6381> zrange stu:rank 0 -1 withscores
1) "jack"
2) "60"
3) "nike"
4) "90"
5) "chaitou"
6) "100"
127.0.0.1:6381> zremrangebyrank stu:rank 0 0
(integer) 1
127.0.0.1:6381> zrange stu:rank 0 -1
1) "nike"
2) "chaitou"
127.0.0.1:6381> zremrangebyscore stu:rank 60 90
(integer) 1
127.0.0.1:6381> zrange stu:rank 0 -1
1) "chaitou"

猜你喜欢

转载自blog.csdn.net/chaitoudaren/article/details/106032371
今日推荐