> **Redis-常用类型操作命令(数据库/string)**
[TOC]
## 说明 ##
**记录以下Redis常用类型的操作命令。**
----------
## Redis简单说明 ##
<h5>参考文档</h5>
>redis中文网:http://www.redis.cn/
>菜鸟教程: https://www.runoob.com/redis/redis-tutorial.html
>redis文档: http://redisdoc.com/
<h5>简单介绍</h5>
Redis 是一个高性能的 key-value 数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
## 通用数据库命令 ##
<h5>KEYS * 查看所有</h5>
127.0.0.1:6379> set a 1
OK
127.0.0.1:6379> set b 2
OK
127.0.0.1:6379> keys *
1) "b"
2) "a"
<h5>KEYS 模糊匹配key</h5>
keys 也支持模糊匹配,keys pattern 模式
keys pattern模式支持三种通配符* ? []
* 匹配任意字符
? 通配单个字符
[] 通配指定字符
----------
127.0.0.1:6379> set zhangsan 19
OK
127.0.0.1:6379> set zhangqiang 18
OK
127.0.0.1:6379> set wangwu 16
OK
127.0.0.1:6379> set wangliu 17
OK
127.0.0.1:6379> keys z*
1) "zhangqiang"
2) "zhangsan"
127.0.0.1:6379> keys zha??*
1) "zhangqiang"
2) "zhangsan"
127.0.0.1:6379> keys wang[w]u
1) "wangwu"
<h5>TYPE 获取key类型 </h5>
TYPE key:返回 key 所储存的值的类型。
返回值
none (key不存在)
string (字符串)
list (列表)
set (集合)
zset (有序集)
hash (哈希表)
stream (流)
----------
# 字符串
redis> SET weather "sunny"
OK
redis> TYPE weather
string
# 列表
redis> LPUSH book_list "programming in scala"
(integer) 1
redis> TYPE book_list
list
# 集合
redis> SADD pat "dog"
(integer) 1
redis> TYPE pat
set
<h5>DEL 删除key </h5>
DEL key [key …]:删除给定的一个或多个 key 。
不存在的 key 会被忽略。
返回值:被删除 key 的数量。
----------
127.0.0.1:6379> keys *
1) "1"
2) "zhangsan"
3) "wangwu"
4) "wangliu"
5) "zhangqiang"
127.0.0.1:6379> del 1
(integer) 1
127.0.0.1:6379> keys *
1) "zhangsan"
2) "wangwu"
3) "wangliu"
4) "zhangqiang"
<h5>EXISTS 判断key存在</h5>
> 1存在 0不存在
127.0.0.1:6379> keys *
1) "zhangsan"
2) "wangwu"
3) "wangliu"
4) "zhangqiang"
127.0.0.1:6379> exists zhangsan
(integer) 1
127.0.0.1:6379> exists lisi
(integer) 0
<h5>RENAME 重命名</h5>
给key值重命名,如果名字已存在,在名字的原值被覆盖
127.0.0.1:6379> rename zhangsan zhangsans
OK
127.0.0.1:6379> keys *
1) "zhangsans"
2) "wangwu"
3) "wangliu"
4) "zhangqiang"
----------
127.0.0.1:6379> get wangwu
"19"
127.0.0.1:6379> get wangliu
"17"
127.0.0.1:6379> rename wangliu wangwu
OK
127.0.0.1:6379> get wangwu
"17"
<h5>RENAMENX 名字不存在时重命名</h5>
> 1修改 0不修改
127.0.0.1:6379> keys *
1) "wangwu"
2) "zhangqiang"
127.0.0.1:6379> renamenx wangwu zhangqiang
(integer) 0
<h5>MOVE移动key到其他库</h5>
> redis 默认开启16个库 从0开始
127.0.0.1:6379> keys *
1) "wangwu"
2) "zhangqiang"
127.0.0.1:6379> move wangwu 2
(integer) 1
127.0.0.1:6379> select 2
OK
127.0.0.1:63
<h5>EXPIRE 设置key过期时间(秒)</h5>
> pexpire 设置过期时间毫秒
127.0.0.1:6379> expire zhangqiang 10000
(integer) 1
127.0.0.1:6379> ttl zhangqiang
(integer) 9996
<h5>TTL 返回key过期时间(秒)</h5>
> pttl 返回key过期时间毫秒
> 键值不存在时返回-2
127.0.0.1:6379> ttl zhangqiang
(integer) 9792
127.0.0.1:6379> pttl zhangqiang
(integer) 9788177
127.0.0.1:6379> ttl wangliu
(integer) -2
<h5>PERSITE 设置key为永久</h5>
> 1成功 0失败
127.0.0.1:6379> persist zhangqiang
(integer) 1
127.0.0.1:6379> persist wangliu
(integer) 0
<h5>DBSIZE</h5>
DBSIZE返回当前数据库的 key 的数量。
返回值:当前数据库的 key 的数量。
----------
redis> DBSIZE
(integer) 5
redis> SET new_key "hello_moto" # 增加一个 key 试试
OK
redis> DBSIZE
(integer) 6
<h5>FLUSHDB</h5>
清空当前数据库中的所有 key。
此命令从不失败。
<h5>FLUSHDB</h5>
清空整个 Redis 服务器的数据(删除所有数据库的所有 key )。
此命令从不失败。
<h5>SELECT</h5>
切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值。
默认使用 0 号数据库。
----------
redis> SET db_number 0 # 默认使用 0 号数据库
OK
redis> SELECT 1 # 使用 1 号数据库
OK
redis[1]> GET db_number # 已经切换到 1 号数据库,注意 Redis 现在的命令提示符多了个 [1]
(nil)
redis[1]> SET db_number 1
OK
redis[1]> GET db_number
"1"
redis[1]> SELECT 3 # 再切换到 3 号数据库
OK
redis[3]> # 提示符从 [1] 改变成了 [3]
<h5>SWAPDB</h5>
SWAPDB db1 db2
对换指定的两个数据库, 使得两个数据库的数据立即互换。
----------
# 对换数据库 0 和数据库 1
redis> SWAPDB 0 1
OK
## 字符串 string ##
<h5>SET</h5>
> MSET同时为多个键设置值。
SET key value [EX seconds] [PX milliseconds] [NX|XX]
将字符串值 value 关联到 key 。
如果 key 已经持有其他值, SET 就覆写旧值, 无视类型。
当 SET 命令对一个带有生存时间(TTL)的键进行设置之后, 该键原有的 TTL 将被清除。
----------
EX seconds : 将键的过期时间设置为 seconds 秒。 执行 SET key value EX seconds 的效果等同于执行 SETEX key seconds value 。
PX milliseconds : 将键的过期时间设置为 milliseconds 毫秒。 执行 SET key value PX milliseconds 的效果等同于执行 PSETEX key milliseconds value 。
NX : 只在键不存在时, 才对键进行设置操作。 执行 SET key value NX 的效果等同于执行 SETNX key value 。
XX : 只在键已经存在时, 才对键进行设置操作。
127.0.0.1:6379> set zhangsan 1000 ex 100
OK
127.0.0.1:6379> ttl zhangsan
(integer) 94
127.0.0.1:6379> get zhangsan
"1000"
<h5>SETNX</h5>
> MSETNX 当且仅当所有给定键都不存在时, 为所有给定键设置值。
只在键 key 不存在的情况下, 将键 key 的值设置为 value 。
若键 key 已经存在, 则 SETNX 命令不做任何动作。
SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。
返回值
命令在设置成功时返回 1 , 设置失败时返回 0 。
127.0.0.1:6379> setnx zhangsan 1000
(integer) 1
127.0.0.1:6379> setnx zhangsan 600
(integer) 0
<h5>SETEX</h5>
SETEX key seconds value
将键 key 的值设置为 value , 并将键 key 的生存时间设置为 seconds 秒钟。
如果键 key 已经存在, 那么 SETEX 命令将覆盖已有的值。
SETEX 命令的效果和以下两个命令的效果类似:
SET key value
EXPIRE key seconds # 设置生存时间
SETEX 和这两个命令的不同之处在于 SETEX 是一个原子(atomic)操作, 它可以在同一时间内完成设置值和设置过期时间这两个操作, 因此 SETEX 命令在储存缓存的时候非常实用。
返回值
命令在设置成功时返回 OK 。 当 seconds 参数不合法时, 命令将返回一个错误。
PSETEX key milliseconds value
PSETEX 设置毫秒 语法跟SETEX相同
----------
127.0.0.1:6379> setex lisi 600 100
OK
127.0.0.1:6379> ttl lisi
(integer) 595
<h5>GET</h5>
返回与键 key 相关联的字符串值。
返回值
如果键 key 不存在, 那么返回特殊值 nil ; 否则, 返回键 key 的值。
如果键 key 的值并非字符串类型, 那么返回一个错误, 因为 GET 命令只能用于字符串值。
----------
127.0.0.1:6379> set a zhangsan
OK
127.0.0.1:6379> get a
"zhangsan"
<h5>GETSET</h5>
GETSET key value
将键 key 的值设为 value , 并返回键 key 在被设置之前的旧值。
返回值
返回给定键 key 的旧值。
如果键 key 没有旧值, 也即是说, 键 key 在被设置之前并不存在, 那么命令返回 nil 。
当键 key 存在但不是字符串类型时, 命令返回一个错误。
----------
127.0.0.1:6379> set a zhangsan
OK
127.0.0.1:6379> get a
"zhangsan"
127.0.0.1:6379> getset a lisi
"zhangsan"
127.0.0.1:6379> get a
"lisi"
<h5>STRLEN</h5>
STRLEN key返回键 key 储存的字符串值的长度。
返回值
STRLEN 命令返回字符串值的长度。
当键 key 不存在时, 命令返回 0 。
当 key 储存的不是字符串值时, 返回一个错误。
----------
127.0.0.1:6379> strlen a
(integer) 4
127.0.0.1:6379> strlen b
(integer) 0
127.0.0.1:6379>
<h5>APPEND</h5>
APPEND key value 如果键 key 已经存在并且它的值是一个字符串, APPEND 命令将把 value 追加到键 key 现有值的末尾。
如果 key 不存在, APPEND 就简单地将键 key 的值设为 value , 就像执行 SET key value 一样。
返回值
追加 value 之后, 键 key 的值的长度。
----------
127.0.0.1:6379> append a wangwu
(integer) 10
127.0.0.1:6379> get a
"lisiwangwu"
<h5>INCR</h5>
> INCRBY 为键 key 储存的数字值加上增量 increment 。
> INCRBYFLOAT 为键 key 储存的值加上浮点数增量 increment 。
> DECR为键 key 储存的数字值减去一。
> DECRBY将键 key 储存的整数值减去减量 decrement 。
为键 key 储存的数字值加上一。
如果键 key 不存在, 那么它的值会先被初始化为 0 , 然后再执行 INCR 命令。
如果键 key 储存的值不能被解释为数字, 那么 INCR 命令将返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
INCR 命令会返回键 key 在执行加一操作之后的值。
----------
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
127.0.0.1:6379> incr age
(integer) 23
<h5>SETRANGE</h5>
从偏移量 offset 开始, 用 value 参数覆写(overwrite)键 key 储存的字符串值。
不存在的键 key 当作空白字符串处理。
SETRANGE 命令会确保字符串足够长以便将 value 设置到指定的偏移量上, 如果键 key 原来储存的字符串长度比偏移量小(比如字符串只有 5 个字符长,但你设置的 offset 是 10 ), 那么原字符和偏移量之间的空白将用零字节(zerobytes, "\x00" )进行填充。
因为 Redis 字符串的大小被限制在 512 兆(megabytes)以内, 所以用户能够使用的最大偏移量为 2^29-1(536870911) , 如果你需要使用比这更大的空间, 请使用多个 key 。
返回值
SETRANGE 命令会返回被修改之后, 字符串值的长度。
----------
127.0.0.1:6379> set zw "zhans san"
OK
127.0.0.1:6379> SETRANGE zw 6 "lisi"
(integer) 10
127.0.0.1:6379> get zw
"zhans lisi"
127.0.0.1:6379> SETRANGE zw 12 "lisi"
(integer) 16
127.0.0.1:6379> get zw
"zhans lisi\x00\x00lisi"
127.0.0.1:6379>
<h5>GETRANGE</h5>
返回键 key 储存的字符串值的指定部分, 字符串的截取范围由 start 和 end 两个偏移量决定 (包括 start 和 end 在内)。
负数偏移量表示从字符串的末尾开始计数, -1 表示最后一个字符, -2 表示倒数第二个字符, 以此类推。
GETRANGE 通过保证子字符串的值域(range)不超过实际字符串的值域来处理超出范围的值域请求。
GETRANGE 命令会返回字符串值的指定部分。
----------
127.0.0.1:6379> GETRANGE zw 6 12
"lisi\x00\x00l"
127.0.0.1:6379> GETRANGE zw 0 -6
"zhans lisi\x00"
## 结尾 ##
<p style="background-image: -webkit-linear-gradient(left, #3498db, #f47920 10%, #d71345 20%, #f7acbc 30%,#ffd400 40%, #3498db 50%, #f47920 60%, #d71345 70%, #f7acbc 80%, #ffd400 90%, #3498db);color: transparent;-webkit-text-fill-color: transparent;-webkit-background-clip: text;text-align:center;">
腹有诗书气自华,最是书香能致远。
</p>