💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
> **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>