学而不思则罔 思而不学则殆.|

漆原Blog

园龄:5年10个月粉丝:0关注:1

Redis数据类型与常用指令

String 字符串

应用场景

最为常用的数据类型,通常用于保存单个对象/记录的数据,例如储存对象的JSON文本。

常用命令

GET/SET 获取/设置KV

SET用于给指定key赋值,如果已存在则覆盖。

> set k1 "hello"
OK
> get k1
hello
> set k1 "123"
OK
> get k1
123
GETSET 设置新值,返回旧值

多用于数据更新场景,替换新值的同时返回旧值。

> getset k2 "你好"
null
> getset k2 "321"
你好
MGET/MSET 批量新增/批量获取

多用于批量查询的场景。

> mset key1 "hello" key2 "world" key3 "laoqi"
OK
> mget key1 key2 key3
hello
world
laoqi

当MGET 中指定了不存在的key时,则返回null

> mget key1 key2 key3 key4
hello
world
laoqi
null
SETNX 当key不存在时设置

SET if Not eXists 多用于分布式锁、高并发资源互斥场景。

> setnx key4 "hello"
1
> setnx key4 "world"
0
> setnx key4 "world2"
0
INCR 数据自增

可用于分布式主键生成器。

> incr id
1
> incr id
2
> incr id
3

也可以使用incrby key increment来指定步长。

> incrby id 10
13
> incrby id 10
23
> incrby id 10
33

Hash 哈希

Hash是一个String类型的field(字段)和value(值)的映射表,适合存储对象,类似Java中的HashMap。

应用场景

适用于存储结构化信息,例如:用户信息、员工信息...

常用命令

HSET(设置单个字段)/HGET(获取单个字段)/HMSET(设置多个字段)/HGETALL(获取所有字段)
> hset site name google
1
> hmset site url "http://www.google.com" year 2005
OK
> hget site name
google
> hgetall site
name
google
url
http://www.google.com
year
2005
HEXISTS (判断字段是否存在)
> hexists site name
1
> hexists site country
0
HDEL(删除指定字段)
> hdel site name url
2
HVALS(返回value列表)
> hmset person name "张三" age 18 gender “男”
OK
> hvals person
张三
18
“男”

List 列表

List是个有序数据队列,根据插入顺序排序,可以添加数据到首部(左边),也可以添加数据至尾部(右边),最多可以包含2的32次方-1个元素(4294967295个)

应用场景

存储有序的数据队列,例如购物车队列、排行榜队列... 获取ID队列后,根据每一个ID获取对应的HASH对象。

常用命令

RPUSH(右侧插入)/LPUSH(左侧插入)
> rpush list1 c b a
3
> lpush list1 f e d
6
LRANGE(查看列表数据)

格式:lrange key 起始下标 终止下标(-1则查询全部)

> lrange list1 0 -1
d
e
f
c
b
a
> lrange list1 0 2
d
e
f
RPOP(从右侧弹出)/LPOP(从左侧弹出)
> lpop list1
d
> rpop list1
a
LLEN(获取列表长度)
> llen list1
4

SET 无序集合

SET是无序集合,集合中的元素是唯一的,底层通过哈希表实现,所以添加、查找、删除的复杂度为O(1),集合中最大成员数为2的32次方。

应用场景

通常用于差集、并集、交集的运算。(共同关注、多数据源合并、查询两个集合的差异、抽奖活动等)

  • 差集:A(C)/B(C)
  • 并集:A C B
  • 交集:C

常用命令

SADD(添加元素)/SMEMBERS(查询集合元素)
> sadd user:1:follow it
1
> smembers user:1:follow
it
> sadd user:1:follow sports music his
3
> smembers user:1:follow
it
his
sports
music
SRANDMEMBER(随机获取成员)
> SRANDMEMBER user:1:follow 2
his
music
> SRANDMEMBER user:1:follow 2
it
his
SPOP(随机弹出)
> SPOP user:1:follow
music
SDIFF(差集比较)/SINTER(交集比较)/SUNION(并集比较)
> sdiff user:1:follow user:2:follow
his
> sinter user:1:follow user:2:follow
it
sports
> sunion user:1:follow user:2:follow
ent
sports
his
it
news

ZSET 有序SET

ZSET是有序的SET集合,也称为SortedSet,与SET一样,成员是唯一的。

LIST与ZSET的区别

  • LIST强调数据是按照存储的顺序有序排列,存储顺序与迭代顺序一致。
  • ZSET则是根据分数进行排序,存储顺序与迭代顺序不一致。

应用场景

各种多维度的排行榜

常用命令

ZADD(新增成员)/ZRANGE(查询成员)

格式:`ZADD key score member [score] [member]

> zadd player:rank 1000 ronaldo 900 messi 800 cronaldo 600 kaka
4
> zrange player:rank 0 -1
kaka
cronaldo
messi
ronaldo

ZRANGE默认升序,同时可以添加withscores参数将分值一并列出

> zrange player:rank 0 -1 withscores
kaka
600
cronaldo
800
messi
900
ronaldo
1000
ZSCORE(获取分数)

格式:ZSCORE key member

> ZSCORE player:rank kaka
600
ZRANK(获取排名)

格式:ZRANK key member

> ZRANK player:rank messi
2
ZREM(移除成员)
> zrem player:rank kaka
1
ZREVRANGE(降序排列查询)/ZREVRANK(降序排名查询)
> zrevrange player:rank 0 -1 withscores
ronaldo
1000
messi
900
cronaldo
800
> zrevrank player:rank messi
1
ZRANGEBYSCORE(根据分数区间查询)

格式:ZRANGEBYSCORE key min max [WITHSCORES]

> zrangebyscore player:rank 900 1000 withscores
messi
900
ronaldo
1000

Redis的通用命令

SELECT(选择数据库)

Redis默认拥有0~15号数据库,可以通过select指令进行切换,不同数据库在内存上是隔离的,可以拥有相同的KV

> select 1
OK
KEYS(查询当前库的key)

默认是全库扫描,效率低。

> keys *
keyd
keyc
keya
keyb
keye

字符匹配扫描(查询第4位字母在a~c之间的key)

> keys key[a-c]*
keyc
keya
keyb
EXISTS(查询key是否存在)
> exists keya
1
EXPIRE(设置过期时间)

单位为秒,过期后key被删除。

格式:EXPIRE key seconds

> expire keya 3600
1
TTL(查看key的有效期)
> ttl keya
3529
DEL(删除指定key)
> del keyb
1
FLUSHDB(清空当前数据库)/FLUSHALL(清空所有数据库)危险操作,生产环境慎用
> flushdb
OK
> flushall
OK
验证密码
> auth 123456
关闭Redis
> shutdown save

本文作者:漆原Blog

本文链接:https://www.cnblogs.com/7moon/p/16684314.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   漆原Blog  阅读(29)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起