Redis 学习笔记 1:基础

Redis 学习笔记 1:基础

安装

在 Linux 上安装 Redis 的详细步骤可以阅读这里。

命令行客户端

与服务端一同安装的还有命令行客户端redis-cli,可以通过以下方式用命令行客户端连接本机的 Redis 服务端:

[root@192 redis-6.2.6]# redis-cli

如果设置了密码,这样的默认连接会提示缺少权限:

127.0.0.1:6379> ping
(error) NOAUTH Authentication required.

可以通过auth 密码的方式输入密码以获取权限:

127.0.0.1:6379> auth 123321
OK
127.0.0.1:6379> ping
PONG

也可以在初始连接时通过参数-a指定密码:

[root@192 redis-6.2.6]# redis-cli -a 123321
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> exit

其他常用的参数还有:

  • -h:目标服务端的 ip
  • -p:目标服务端的端口号

通用命令

可以在官网查看所有的通用命令,或者在命令行客户端下通过以下命令查看:

127.0.0.1:6379> help @generic

keys

keys命令可以查看 Redis 中的键,后面可以跟通配符,比如keys *可以查看所有的键:

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

keys a*可以查看以a开头的键:

127.0.0.1:6379> keys a*
1) "age"

exists

exists可以判断键是否存在:

127.0.0.1:6379> EXISTS name
(integer) 1

返回的是存在的键的数目,可以一次性检查多个键是否存在:

127.0.0.1:6379> EXISTS name age
(integer) 2
127.0.0.1:6379> EXISTS name k1 k2
(integer) 1

del

del命令可以删除指定的键:

127.0.0.1:6379> del name age
(integer) 2
127.0.0.1:6379> exists name age
(integer) 0

返回的是成功删除的键的数目。

expire

expire命令可以设置指定键的有效时长(单位秒):

127.0.0.1:6379> set name jack
OK
127.0.0.1:6379> expire name 100
(integer) 1

ttl

ttl命令可以查看指定键剩余的有效时长:

127.0.0.1:6379> ttl name
(integer) 93

返回值是正数时表示的是剩余的秒数,返回值是-1表示永久有效:

127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> ttl age
(integer) -1

返回值是-2表示已经过期(被自动删除):

127.0.0.1:6379> ttl name
(integer) -2

String 命令

set

设置键的值(如果存在就修改):

127.0.0.1:6379> set name Brus
OK
127.0.0.1:6379> get name
"Brus"

get

获取键的值:

127.0.0.1:6379> get name
"Brus"

mset

批量设置键的值:

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

mget

批量获取键的值:

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

incr

让整型值自增:

127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> INCR age
(integer) 21
127.0.0.1:6379> INCR age
(integer) 22

incrby

让整型值增加指定步长:

127.0.0.1:6379> INCRBY age 5
(integer) 27
127.0.0.1:6379> INCRBY age 5
(integer) 32

incrbyfloat

让浮点型增长指定步长:

127.0.0.1:6379> set score 5.7
OK
127.0.0.1:6379> INCRBYFLOAT score 0.5
"6.2"
127.0.0.1:6379> INCRBYFLOAT score 0.5
"6.7"
127.0.0.1:6379> INCRBYFLOAT score 0.5
"7.2"

setnx

只在键不存在时设置值:

127.0.0.1:6379> setnx name LiLei
(integer) 0
127.0.0.1:6379> get name
"Brus"
127.0.0.1:6379> setnx name2 LiLei
(integer) 1
127.0.0.1:6379> get name2
"LiLei"

nxnot exists

这实际上是一个组合命令,相当于:

127.0.0.1:6379> set name3 Wang2 nx
OK
127.0.0.1:6379> get name3
"Wang2"

setex

setex可以在指定键值的同时设置有效时长:

127.0.0.1:6379> setex name 10 jack
OK
127.0.0.1:6379> ttl name
(integer) 8
127.0.0.1:6379> ttl name
(integer) 6

ex的意思是expire

这同样是一个组合命令,等效于以下命令:

127.0.0.1:6379> set name jack ex 10
OK
127.0.0.1:6379> get name
"jack"
127.0.0.1:6379> ttl name
(integer) 4
127.0.0.1:6379> ttl name
(integer) 3

Key 的格式

通常,Redis 中的 key 以以下格式命名:

项目名:业务名:类型:id

这样做的好处是在图形化客户端下可以看到分层的数据。

比如设置以下的 key:

127.0.0.1:6379> set project:person:1 '{"id":1, "name":"Jack", "age": 21}'
OK
127.0.0.1:6379> set project:person:2 '{"id":2, "name":"Rose", "age": 18}'
OK
127.0.0.1:6379> set project:phone:1 '{"id":1, "name":"小米11", "price": 4999}'
OK
127.0.0.1:6379> set project:phone:2 '{"id":2, "name":"荣耀6", "price": 2999}'
OK

在图形化客户端下能看到:

Redis 学习笔记 1:基础_第1张图片

Hash 命令

Hash 类型的 Key 对应的 Value 本身是一个 Hash(散列表/字典)结构。

类似于:

Redis 学习笔记 1:基础_第2张图片

Hash 类型相关的命令都是基于field进行的操作。

hset

设置指定 key 的 field:

127.0.0.1:6379> hset project:person:3 name BrusLee
(integer) 0
127.0.0.1:6379> hset project:person:3 age 20
(integer) 0

hget

获取指定 key 的 field 的值:

127.0.0.1:6379> hget project:person:3 name
"BrusLee"
127.0.0.1:6379> hget project:person:3 age
"20"

hmset

设置指定 key 的多个 field 的值:

127.0.0.1:6379> hmset project:person:3 name LiLei age 15
OK

hmget

获取指定 key 的多个 field 的值:

127.0.0.1:6379> hmget project:person:3 name age
1) "LiLei"
2) "15"

hgetall

获取指定 key 的所有 field 和对应的值:

127.0.0.1:6379> hgetall project:person:3
1) "name"
2) "LiLei"
3) "age"
4) "15"

hkeys

获取指定 key 的所有 field:

127.0.0.1:6379> HKEYS  project:person:3
1) "name"
2) "age"

hvals

获取指定 key 的所有值:

127.0.0.1:6379> HVALS project:person:3
1) "LiLei"
2) "15"

hincrby

让指定 key 的 field 自增指定步长:

127.0.0.1:6379> HINCRBY project:person:3 age 2
(integer) 17
127.0.0.1:6379> HINCRBY project:person:3 age 2
(integer) 19
127.0.0.1:6379> HGETALL project:person:3
1) "name"
2) "LiLei"
3) "age"
4) "19"

hsetnx

当指定 key 的 field 不存在时,设置其值:

127.0.0.1:6379> HSETNX project:person:3 name HanMeimei
(integer) 0
127.0.0.1:6379> HGET project:person:3 name
"LiLei"
127.0.0.1:6379> HSETNX project:person:3 sex male
(integer) 1
127.0.0.1:6379> HGET project:person:3 sex
"male"

List 命令

Redis 的 List 类型其结构类似于一个双向链表。

lpush

从列表的左侧插入数据:

127.0.0.1:6379> LPUSH queue a b c
(integer) 3

像上边展示的,一次可以插入多个元素。

lpop

从列表的左侧取出数据:

127.0.0.1:6379> LPOP queue
"c"

如果指定去除元素的个数,可以取出多个元素:

127.0.0.1:6379> LPOP queue 2
1) "b"
2) "a"

rpush

与 lpush 类似,从右侧插入元素。

rpop

与 lpop 类似,从右侧取出元素。

lrange

从左侧读取指定下标的元素:

127.0.0.1:6379> lpush queue a b c d e
(integer) 5
127.0.0.1:6379> LRANGE queue 1 3
1) "d"
2) "c"
3) "b"

下标从零开始。

blpop

阻塞式地从列表地左侧取出一个元素:

127.0.0.1:6379> BLPOP queue2 100

如果队列queue2是空队列,上边地命令会导致客户端阻塞,直到超时(这里指定等待100秒)或队列中有元素可以被获取。

可以用另一个 Redis 命令行客户端连接并插入元素以观察之前被阻塞的客户端。

rlpop

与 blpop 类似,同样是阻塞式获取元素,不过是从列表的右侧。

Set 命令

sadd

向集合中添加元素:

127.0.0.1:6379> sadd set1 a b c
(integer) 3
127.0.0.1:6379> SMEMBERS set1
1) "c"
2) "b"
3) "a"

srem

从集合中删除元素:

127.0.0.1:6379> SREM set1 a
(integer) 1
127.0.0.1:6379> SMEMBERS set1
1) "c"
2) "b"

scard

返回集合中的元素个数:

127.0.0.1:6379> SCARD set1
(integer) 2

sismember

判断集合中是否有指定元素:

127.0.0.1:6379> SISMEMBER set1 a
(integer) 0
127.0.0.1:6379> SISMEMBER set1 b
(integer) 1

smembers

返回集合中包含的元素:

127.0.0.1:6379> SMEMBERS set1
1) "c"
2) "b"

sinter

求集合的交集:

127.0.0.1:6379> SMEMBERS set1
1) "c"
2) "b"
127.0.0.1:6379> SADD set2 b c d
(integer) 3
127.0.0.1:6379> SINTER set1 set2
1) "c"
2) "b"

sdiff

求集合的差集:

127.0.0.1:6379> SMEMBERS set1
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> SMEMBERS set2
1) "c"
2) "d"
3) "b"
127.0.0.1:6379> SDIFF set1 set2
1) "a"
127.0.0.1:6379> SDIFF set2 set1
1) "d"

sunion

求集合的并集:

127.0.0.1:6379> SUNION set1 set2
1) "c"
2) "d"
3) "b"
4) "a"

SortedSet 命令

Redis 中的 SortedSet 是按照元素的 Score 进行的排序。

zadd

添加一个元素到有序集合:

127.0.0.1:6379> ZADD ss 100 a
(integer) 1
127.0.0.1:6379> ZADD ss 50 b
(integer) 1
127.0.0.1:6379> ZADD ss 80 c
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE ss 0 100
1) "b"
2) "c"
3) "a"

SortedSet 默认按照升序排列(自然排序)。

zrem

删除指定元素:

127.0.0.1:6379> ZREM ss a
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE ss 0 100
1) "b"
2) "c"

zscore

获取指定元素的 score:

127.0.0.1:6379> ZSCORE ss b
"50"

zrank

获取指定元素在有序集合中的位置(排名):

127.0.0.1:6379> ZRANK ss b
(integer) 0
127.0.0.1:6379> ZRANK ss c
(integer) 1

zcard

返回有序集合中的元素个数:

127.0.0.1:6379> ZCARD ss
(integer) 2

zcount

返回 score 在指定范围内的元素个数:

127.0.0.1:6379> ZCOUNT ss 0 100
(integer) 2

zincrby

将指定元素的 score 增加指定数值:

127.0.0.1:6379> ZINCRBY ss 10 b
"60"
127.0.0.1:6379> ZSCORE ss b
"60"

zrange

获取指定排名范围内的元素:

127.0.0.1:6379> ZRANGE ss 0 1
1) "b"
2) "c"

zrangebyscore

返回 score 在指定范围内的元素:

127.0.0.1:6379> ZRANGEBYSCORE ss 0 100
1) "b"
2) "c"

集合运算

SortedSet 同样支持集合相关的运算命令:

  • zinter
  • zdiff
  • zunion

参考资料

  • 黑马程序员Redis入门到实战教程

你可能感兴趣的:(开发工具,redis,学习,笔记)