【Redis】通用命令 1

目录

  • [1. get/set](#1. get/set)
  • [2. keys](#2. keys)
  • [3. exists](#3. exists)
  • [4. del](#4. del)
  • [5. expire](#5. expire)
  • [6. ttl](#6. ttl)
  • [7. type](#7. type)
  • [8. 计数命令](#8. 计数命令)
    • [8.1 INCR](#8.1 INCR)
    • [8.2 INCRBY](#8.2 INCRBY)
    • [8.3 DECR](#8.3 DECR)
    • [8.4 DECRBY](#8.4 DECRBY)
    • [8.5 INCRBYFLOAT](#8.5 INCRBYFLOAT)
  • 9.append
  • [10. getrange](#10. getrange)
  • [11. setrange](#11. setrange)
  • [12. strlen](#12. strlen)

Redis是按照键值对的方式来存储数据的 <key,value>
key固定就是字符串, value实际上会有很多类型------字符串、哈希表、列表、集合、有序集合

1. get/set

get:根据 key 来取 value
set:把 keyvalue 存储进去

语法:
SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
GET key

powershell 复制代码
127.0.0.1:6379> set hello 1
OK
127.0.0.1:6379> set hbllo 1
OK
127.0.0.1:6379> set heeeeeello 1
OK
127.0.0.1:6379> get hello
"1"
127.0.0.1:6379> get llo
(nil)   #key不存在返回nil,也就是null
  • NX:如果 key 不存在,才设置;key存在,则不设置(返回nil)
  • XX:如果 key 存在,才设置; key 不存在,则不设置(返回nil)
  • 如果 key 不存在,创建心得 键值对
  • 如果 key 存在,则让新的 value 覆盖旧的value 可能会改变原来的数据类型 。原来这个 key ttl(生存时间)也会失效
  • 对于 GET 来说,只支持字符串类型的value,如果value是其他类型,使用get 获取就会出错
powershell 复制代码
127.0.0.1:6379> set key1 111 ex 10
OK
127.0.0.1:6379> ttl key1
(integer) 7
127.0.0.1:6379> ttl key1
(integer) 5
127.0.0.1:6379> ttl key1
(integer) 4
127.0.0.1:6379> ttl key1
(integer) 3
127.0.0.1:6379> set key2 222 nx
OK
127.0.0.1:6379> set key1 333 xx
(nil)
127.0.0.1:6379> get key1
(nil)

MSET:一次性设置多个 key 的值

语法:MSET key value [key value ...]

powershell 复制代码
127.0.0.1:6379> mset key1 111 key2 222 key3 333
OK

MGET:一次性取出多个key对应的value值

语法:MGET key [key...]

powershell 复制代码
127.0.0.1:6379> mget key1 key2 key3
1) "111"
2) "222"
3) "333"

SETNX:不存在才能设置,存在则设置失败

SETEX:设置过期时间,单位是秒

PSETEX:设置过期时间,单位是毫秒

powershell 复制代码
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> setnx key1 111
(integer) 1
127.0.0.1:6379> get key1
"111"
127.0.0.1:6379> setnx key1 222
(integer) 0
127.0.0.1:6379> get key1
"111"
127.0.0.1:6379> setex key2 10 222
OK
127.0.0.1:6379> ttl key2
(integer) 6
127.0.0.1:6379> get key2
"222"
127.0.0.1:6379> get key2
(nil)
127.0.0.1:6379> psetex key3 10000 333
OK
127.0.0.1:6379> ttl key3
(integer) 8
127.0.0.1:6379> ttl key3
(integer) 5
127.0.0.1:6379> get key3
(nil)

2. keys

keys:用来查询当前服务器上匹配的key

通过一些特殊符号(通配符)来描述 key 的模样,匹配上述模样的 key 就能被查询出来

  • 匹配任意一个字符
  • * 匹配 0 个/ 多个任意字符
  • [abcde] 只能匹配到 a b c d e,别的不行。相当于给出固定的选项了
  • [^e] 排除e,只有e匹配不了,其他的都能匹配
  • [a-b] 匹配 a-b 这个范围内的字符,包含两侧边界
powershell 复制代码
127.0.0.1:6379> keys *
1) "hello"
2) "hllo"
3) "hbllo"
4) "hallo"
5) "heeeeeello"
127.0.0.1:6379> keys h?llo
1) "hello"
2) "hbllo"
3) "hallo"
127.0.0.1:6379> keys h*llo
1) "hello"
2) "hllo"
3) "hbllo"
4) "hallo"
5) "heeeeeello"
127.0.0.1:6379> keys h[abe]llo
1) "hello"
2) "hbllo"
3) "hallo"
127.0.0.1:6379> keys h[^ae]llo
1) "hbllo"
127.0.0.1:6379> keys h[a-e]llo
1) "hello"
2) "hbllo"
3) "hallo"

keys命令的时间复杂度 O(N)

3. exists

exists:判定 key 是否存在

返回值:key 存在的个数(针对多个key来说,是非常有用的)

时间复杂度O(1)

powershell 复制代码
127.0.0.1:6379> exists hallo hello word
(integer) 2 #只有2个key 值存在,其中word不存在
127.0.0.1:6379> exists hello
(integer) 1
127.0.0.1:6379> exists hallo
(integer) 1

4. del

del(delete):删除指定的 key

返回值:删除掉的 key 的个数

时间复杂度O(1)

powershell 复制代码
127.0.0.1:6379> del hllo
(integer) 1
127.0.0.1:6379> del hallo hbllo aaa
(integer) 2

5. expire

expire:给指定的 key 设置过期时间,设置的单位是秒。可以 存活时间超出这个指定的值,就会被自动删除

语法:expire key seconds

此处的设定过期时间,必须是针对已经存在的 key 设置,设置成功返回 1 ,设置失败返回 0

时间复杂度O(1)

powershell 复制代码
127.0.0.1:6379> set hello 111
OK
127.0.0.1:6379> expire hello 10
(integer) 1
127.0.0.1:6379> get hello
"111"
127.0.0.1:6379> get hello
"111"
127.0.0.1:6379> get hello
(nil)

6. ttl

ttl:查看当前 key 的过期时间还剩多少

返回值:剩余过期时间。-1 表示没有关联过期时间,-2 表示key 不存在

语法:ttl key

powershell 复制代码
127.0.0.1:6379> set hello 111
OK
127.0.0.1:6379> expire hello 10
(integer) 1
127.0.0.1:6379> ttl hello
(integer) 7
127.0.0.1:6379> ttl hello
(integer) 6
127.0.0.1:6379> ttl hello
(integer) 4
127.0.0.1:6379> ttl hello
(integer) 3
127.0.0.1:6379> ttl hello
(integer) -2
127.0.0.1:6379> get hello
(nil)

7. type

type:查看 key 对应的 value 的类型

powershell 复制代码
127.0.0.1:6379> set key1 111
OK
127.0.0.1:6379> type key1
string
127.0.0.1:6379> lpush key2 111 222 333
(integer) 3
127.0.0.1:6379> type key2
list
127.0.0.1:6379> sadd key3 111 222 333
(integer) 3
127.0.0.1:6379> type key3
set
127.0.0.1:6379> hset key4 field1 value1
(integer) 1
127.0.0.1:6379> type key4
hash

8. 计数命令

8.1 INCR

将 key 对应的 string 表示的数字加⼀ 。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对

应的 string 不是⼀个整型 或者范围超过了 64 位有符号整型,则报错

语法:INCR key

powershell 复制代码
127.0.0.1:6379> set key 10
OK
127.0.0.1:6379> incr key
(integer) 11
127.0.0.1:6379> incr key1
(integer) 1
127.0.0.1:6379> set key2 hello
OK
127.0.0.1:6379> incr key2
(error) ERR value is not an integer or out of range
127.0.0.1:6379> set key3 22222222222222222222222222222222222222222222222222222222222222
OK
127.0.0.1:6379> incr key3
(error) ERR value is not an integer or out of range

8.2 INCRBY

将 key 对应的 string 表示的数字加上对应的值 。如果 key 不存在,则视为 key 对应的 value 是 0。如

果 key 对应的 string 不是⼀个整型 或者范围超过了 64 位有符号整型,则报错

语法:INCRBY key decrement

powershell 复制代码
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> incrby key1 10
(integer) 10
127.0.0.1:6379> incrby key1 -1
(integer) 9
127.0.0.1:6379> set key2 hello
OK
127.0.0.1:6379> incrby key2 20
(error) ERR value is not an integer or out of range

8.3 DECR

将 key 对应的 string 表示的数字减⼀。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对

应的 string 不是⼀个整型或者范围超过了 64 位有符号整型,则报错

语法:decr key

powershell 复制代码
127.0.0.1:6379> set key 10
OK
127.0.0.1:6379> decr key
(integer) 9
127.0.0.1:6379> decr key1
(integer) -1

8.4 DECRBY

将 key 对应的 string 表示的数字减去对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如

果 key 对应的 string 不是⼀个整型或者范围超过了 64 位有符号整型,则报错

语法:DECRBY key decrement

powershell 复制代码
127.0.0.1:6379> set key 10
OK
127.0.0.1:6379> decrby key 5
(integer) 5
127.0.0.1:6379> decrby key1 10
(integer) -10

8.5 INCRBYFLOAT

将 key 对应的 string 表示的浮点数加上对应的值。如果对应的值是负数,则视为减去对应的值。如果

key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的不是 string,或者不是⼀个浮点数,则报

错。允许采⽤科学计数法表示浮点数

语法:INCRBYFLOAT key increment

powershell 复制代码
127.0.0.1:6379> set key 10.5
OK
127.0.0.1:6379> incrbyfloat key 0.5
"11"

9.append

如果 key 已经存在并且是⼀个 string,命令会将 value 追加到原有 string 的后边。如果 key 不存在,

则效果等同于 SET 命令

返回值:追加完成之后 string 的长度

语法:APPEND KEY VALUE

powershell 复制代码
127.0.0.1:6379> set key hello
OK
127.0.0.1:6379> append key  world
(integer) 10
127.0.0.1:6379> get key
"helloworld"

10. getrange

返回 key 对应的 string 的子串,由 start 和 end 确定(左闭右闭)。可以使用负数表示倒数。-1 代表

倒数第一个字符,-2 代表倒数第二个,其他的与此类似。超过范围的偏移量会根据 string 的长度调整

成正确的值

返回值:string 类型的子串

语法: GETRANGE key start end

powershell 复制代码
127.0.0.1:6379> set key helloworld
OK
127.0.0.1:6379> getrange key 0 -1
helloworld
127.0.0.1:6379> GETRANGE key 1 -2
elloworl

11. setrange

覆盖字符串的⼀部分,从指定的偏移开始。

返回值:替换后的 string 的长度

语法:SETRANGE key offset value

powershell 复制代码
127.0.0.1:6379> set key helloworld
OK
127.0.0.1:6379> setrange key 1 aaa
10
127.0.0.1:6379> get key
haaaoworld
127.0.0.1:6379> setrange key 1 bbbb
10
127.0.0.1:6379> get key
hbbbbworld
127.0.0.1:6379> setrange key 1 cccccccccccccccccccccccccccccccccc
35
127.0.0.1:6379> get key
hcccccccccccccccccccccccccccccccccc

12. strlen

获取 key 对应的 string 的长度。当 key 存放的类型不是 string 时,报错

返回值:string 的长度。或者当 key 不存在时,返回 0。

语法:STRLEN key

powershell 复制代码
127.0.0.1:6379> set key helloworld
OK
127.0.0.1:6379> strlen key
10
127.0.0.1:6379> get key
helloworld
127.0.0.1:6379> set key1 你好
OK
127.0.0.1:6379> strlen key1
6
127.0.0.1:6379> get key1
你好
相关推荐
MSTcheng.7 小时前
【C++】C++异常
java·数据库·c++·异常
czlczl200209257 小时前
缓存穿透问题与解决方案
缓存·mybatis
草莓熊Lotso8 小时前
Linux 文件描述符与重定向实战:从原理到 minishell 实现
android·linux·运维·服务器·数据库·c++·人工智能
大模型玩家七七8 小时前
基于语义切分 vs 基于结构切分的实际差异
java·开发语言·数据库·安全·batch
岳麓丹枫0019 小时前
PostgreSQL 中 pg_wal 目录里的 .ready .done .history 文件的生命周期
数据库·postgresql
陌上丨16 小时前
Redis的Key和Value的设计原则有哪些?
数据库·redis·缓存
AI_567816 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
ccecw16 小时前
Mysql ONLY_FULL_GROUP_BY模式详解、group by非查询字段报错
数据库·mysql
JH307316 小时前
达梦数据库与MySQL的核心差异解析:从特性到实践
数据库·mysql