Redis学习——常见命令

单线程

  1. 一次只运行一条命令
  2. 拒绝使用长/慢命令
  3. 其实并不是单线程 有些操作使用独立线程

通用命令

  • keys
  • dbsize
  • exists
  • delete [ ...]
  • expire
  • type

keys *

遍历所有的 key

kyes [正则表达式]

遍历所有的 key

keys 命令一般不在生产环境中使用(因为生产环境中键值对极多)


dbsize

计算 key 的总数

exists

检测 key 是否存在(存在则返回1,不存在返回0)


del

删除指定的键值对


expire

key 在 seconds 秒后过期

ttl

查询 key 的剩余过期时间(返回 -1 表示没有过期设置;返回 -2 表示过期删除)

persist key

去掉 key 的过期设置


type

返回 key 的类型

字符串命令

Redis 中的键(key)都是字符串,但是值可以有多种类型(常见五种)。

字符串类型的值(Value)最大不能超过 512M(已经足够大了)。

一般情况下,考虑到并发、流量等问题,通常字符串类型的值最大也只是 百K 级别。

使用场景:

  • 缓存
  • 计数器
  • 分布式锁

主要命令:

  • get
  • set
  • del

get set del

Set 命令

Set 命令用于设置某个键值对的值(String),具体是哪个简直对由参数 key 决定。

如果键值对中已有值,Set 就覆写旧值,且无视旧类型(即,赋完值后为String型)。

语法

set <key> <value>

返回值

在 Redis 2.6.12 以前版本, Set 命令总是返回 OK 。<br>
从 Redis 2.6.12 版本开始, Set 在设置操作成功完成时,才返回 OK 。

实例

首先,我们在 redis 中创建一个 key 并设置值。

对不存在的键进行设置

redis 127.0.0.1:6379> SET key "value"
OK

redis 127.0.0.1:6379> GET key
"value"

对已存在的键进行设置

redis 127.0.0.1:6379> SET key "new-value"
OK

redis 127.0.0.1:6379> GET key
"new-value"

带参数的 Set 命令

set

无论 key 是否存在,都进行设置

set NX

key 不存在,才设置;等同于 setnx

逻辑上,这是“新增”操作

set XX

key 存在,才设置

逻辑上,这是“更新”操作

Get

Get 命令用于获取某个键值对的值(String),具体是哪个键值对由参数 key 决定。

如果键值对不存在,则返回 nil 。

如果键值对的值部分并非字符串类型,则返回一个错误。

语法

get <key>

返回值

返回 key 对应的值,如果不存在时,则返回 nil。<br>
如果 key 对应的值不是字符串类型,则返回一个错误。

实例

对不存在的 key 或字符串类型 key 进行 Get

redis> GET db
(nil)

redis> SET db redis
OK

redis> GET db
"redis"

对不是字符串类型的 key 进行 GET

redis> DEL db
(integer) 1

redis> LPUSH db redis mongodb mysql
(integer) 3

redis> GET db
(error) ERR Operation against a key holding the wrong kind of value

del

del 命令用于删除某个键值对。

如果 key 代表的键值对不存在,则该操作无任何效果。

实际上 del 命令是一个通用命令,各种类型结构都有这个命令。

语法

del <key>

返回值

被删除的键值对的数量。

实例

首先,我们在 redis 中创建一个 key 并设置值 。

redis 127.0.0.1:6379> SET w3ckey redis
OK

现在我们删除已创建的 key

redis 127.0.0.1:6379> DEL w3ckey
(integer) 1

案例:

  • 计数器:记录网站每个用户个人主页的访问量
  • 缓存:缓存视频的基本信息(视频本身在 MySQL 中)
  • 分布式 id 生成

次要命令

  • incr
  • decr
  • incrby
  • decrby

前提要求,value 必须是数值型字符串

incr

key 对应的 val 自增 1 。

如果 键值对 不存在,那么会新增该 键值对 其值会先被初始化为 0 ,然后再执行 incr 操作

语法

incr <key>

返回值

执行完 Incr 命令之后,键值对 的值。

实例

redis> SET page_view 20
OK

redis> INCR page_view
(integer) 21

redis> GET page_view    # 数字值在 Redis 中以字符串的形式保存
"21"

decr 命令

decr 命令将某个 键值对数值型字符串值 减一。

如果 键值对 不存在,那么会新建该键值对,并将其值初始化为 0 ,然后再执行 decr 操作。

语法:

decr <key>

返回值:

新值,即减 1 之后的值

实例:

对存在的数字值 key 进行 decr

redis> SET failure_times 10
OK

redis> DECR failure_times
(integer) 9

对不存在的 key 值进行 decr

redis> EXISTS count
(integer) 0

redis> DECR count
(integer) -1

对存在但不是数值的 key 进行 Decr

redis> SET company YOUR_CODE_SUCKS.LLC
OK

redis> DECR company
(error) ERR value is not an integer or out of range

incrby

incrby 命令用于将某个 键值对 中的 数字型字符串值 加上指定的增量值。

如果 键值对 不存在,那么会新建键值对,并将其值初始化为 0 ,然后再执行 incrby 命令。

语法:

incrby <key> <amount>

返回值:

新值。即,增加指定增量之后的值。

实例:

key 存在且是数字值

redis> SET rank 50
OK

redis> INCRBY rank 20
(integer) 70

redis> GET rank
"70"

key 不存在时

redis> EXISTS counter
(integer) 0

redis> INCRBY counter 30
(integer) 30

redis> GET counter
"30"

key 不是数字值时

redis> SET book "long long ago..."
OK

redis> INCRBY book 200
(error) ERR value is not an integer or out of range

decrby

decrby 命令用于将某个键值对的值减去指定的减量值,具体是哪个键值对由参数 key 决定。

要求键值对的值必须是数字型字符串。

如果键值对不存在,那么将新建键值对,将其值初始化为 0 ,然后再执行 Decrby 操作。

如果键值对额值不是 String 类型,或不是数字型 String 类型,那么返回一个错误。

语法:

decrby <key> <amount>

返回值:

新值。即,减去指定量之后的值。

实例:

对已存在的 key 进行 DECRBY

redis> SET count 100
OK

redis> DECRBY count 20
(integer) 80

对不存在的 key 进行DECRBY

redis> EXISTS pages
(integer) 0

redis> DECRBY pages 10
(integer) -10

其他命令

  • mget
  • mset

mget ...

批量获得 key 对应的值

原子操作,O(n) 复杂度

mset ...

批量设置键值对

它们的使用价值在于能节省网络流量和时间。

  • getset
  • append
  • strlen

getset

为键值对设置一个新值,于此同时返回原来的值

append

将 val 追加到键值对的值后

strlen

返回字符串的长度(注意中文)

  • incrbyfloat
  • getrange
  • setrange

incrbyfloat

键值对的值自增,val为浮点型字符串

并没有浮点自减命令,但是可以传入一个负数实现自检减功能

getrange

获得指定范围区间中的值,包括

setrange

为值的指定区间赋值


4. Strlen

Strlen 命令用于获取某个键值对的值(String)的长度,具体是哪个键值对由参数 key 决定。

当键值对储存的不是字符串型的值时,返回一个错误。

语法

Strlen key

返回值

字符串值的长度。

key 对应的值不存在时,返回 0。

实例

获取字符串的长度

redis> SET mykey "Hello world"
OK

redis> STRLEN mykey
(integer) 11

不存在的 key 长度为 0

redis> STRLEN nonexisting
(integer) 0

5. Getset

Getset 命令用于设置某个键值对的值(String),并返回该键值对的旧值,具体是哪个键值对由参数 key 决定 。

语法

Getset key value

返回值

返回所指定的键值对的旧值。

当所指定的 key-value 不存在时,返回 nil 。

当所指定的 key-value 的值部分不是字符串类型时,返回一个错误。

实例

首先,设置 mykey 的值并截取字符串。

redis 127.0.0.1:6379> GETSET mynewkey "This is my test key"
(nil)

redis 127.0.0.1:6379> GETSET mynewkey "This is my new value to test getset"
"This is my test key"

6. Getrange

Getrange 命令用于获取某个键值对的值(String)的一个子字符串,具体是哪个键值对由参数 key 决定。

字符串的截取范围由索引参数 startend 决定(范围涵盖 startend )。

语法

Getrange key start end

返回值

截取得到的子字符串。

实例

首先,设置 mykey 的值并截取字符串。

redis 127.0.0.1:6379> SET mykey "This is my test key"
OK

redis 127.0.0.1:6379> GETRANGE mykey 0 3
"This"

redis 127.0.0.1:6379> GETRANGE mykey 0 -1
"This is my test key"

7. Append

Append 命令用于为某个 键值对 的值(String)拼接追加新内容,具体是哪个键值对由参数 key 决定。

如果 键值对 存在并且值为字符串, Append 命令将 value 追加原值的末尾。

如果 键值对 不存在, Append 就简单地将等同于 Set key value 。

语法

Append key value

返回值

追加指定值之后, 键值对中值的长度。

实例

对不存在的 key 执行 APPEND

redis> EXISTS myphone               # 确保 myphone 不存在
(integer) 0

redis> APPEND myphone "nokia"       # 对不存在的 key 进行 APPEND ,等同于 SET myphone "nokia"
(integer) 5                         # 字符长度

对已存在的字符串进行 APPEND

redis> APPEND myphone " - 1110"     # 长度从 5 个字符增加到 12 个字符
(integer) 12

redis> GET myphone

incr "nokia - 1110"

12. Incrbyfloat

Incrbyfloat 命令用于为某个 键值对 中所储存的值加上指定的浮点数增量值,具体是哪个键值对由参数 key 决定。

要求键值对的值的必须是可以被解析为双精度浮点值的字符串。

如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0 ,再执行加法操作。

Redis 内部使用科学计数法存储浮点数值字符串,输出精度都固定为小数点后17位。

语法

Incrbyfloat key amount

返回值

执行命令之后 键值对 的新值。

实例

值和增量都不是指数符号

redis> SET mykey 10.50
OK

redis> INCRBYFLOAT mykey 0.1
"10.6"

值和增量都是指数符号

redis> SET mykey 314e-2
OK

redis> GET mykey                # 用 SET 设置的值可以是指数符号
"314e-2"

redis> INCRBYFLOAT mykey 0      # 但执行 INCRBYFLOAT 之后格式会被改成非指数符号
"3.14"

可以对整数类型执行

redis> SET mykey 3
OK

redis> INCRBYFLOAT mykey 1.1
"4.1"

后跟的 0 会被移除

redis> SET mykey 3.0
OK

redis> GET mykey                        # SET 设置的值小数部分可以是 0
"3.0"

redis> INCRBYFLOAT mykey 1.000000000000 # 但 INCRBYFLOAT 会无略掉无意义的 0 ,甚至简化为整数
"4"

redis> GET mykey
"4"

猜你喜欢

转载自blog.csdn.net/qq_32273965/article/details/84815992