Redis基本操作
二、五大数据类型
2.1
2.1.1.官方文档
Redis是一个开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。它支持数 据结构,例如字符串,哈希,列表,集合,带范围查询的排序集合,位图,超日志,带有半径查询和流 的地理空间索引。Redis具有内置的复制,Lua脚本,LRU驱逐,事务和不同级别的磁盘持久性,并通过 Redis Sentinel和Redis Cluster自动分区提供了高可用性。
2.1.2.String(字符串类型)
String是redis最基本的类型,你可以理解成Memcached一模一样的类型,一个key对应一个value。 String类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象。 String类型是redis最基本的数据类型,一个redis中字符串value最多可以是522M。
2.1.3.Hash(哈希,类似 Java里的Map)
Redis hash 是一个键值对集合。 Redis hash 是一个String类型的field和value的映射表,hash特别适合用于存储对象。 类似Java里面的Map
2.1.4.List(列表)
Redis列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素到列表的头部(左边)或者尾 部(右边)。 它的底层实际是个链表 !
2.1.6.Set(集合)
Redis的Set是String类型的无序集合,它是通过HashTable实现的 !
2.1.7.Zset(sorted set:有序集合)
Redis zset 和 set 一样,也是String类型元素的集合,且不允许重复的成员。 不同的是每个元素都会关联一个double类型的分数。 Redis正是通过分数来为集合中的成员进行从小到大的排序,zset的成员是唯一的,但是分数(Score) 却可以重复。
2.2 Redis键(key)
# keys * 查看所有的key 127.0.0.1:6379[1]> keys * (empty array) 127.0.0.1:6379[1]> set name ming OK 127.0.0.1:6379[1]> keys * 1) "name" # exists key 的名字,判断某个key是否存在 127.0.0.1:6379[1]> keys * (empty array) 127.0.0.1:6379[1]> set name ming OK 127.0.0.1:6379[1]> keys * 1) "name" # move key db ---> 当前库就没有了,被移除了 127.0.0.1:6379[1]> move name 0 (integer) 1 127.0.0.1:6379[1]> keys * (empty array) # expire key 秒钟:为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。 # ttl key 查看还有多少秒过期,-1 表示永不过期,-2 表示已过期 127.0.0.1:6379[1]> set name ming OK 127.0.0.1:6379[1]> EXPIRE name 20 (integer) 1 127.0.0.1:6379[1]> ttl name (integer) 16 127.0.0.1:6379[1]> ttl name (integer) 15 127.0.0.1:6379[1]> ttl name (integer) 15 127.0.0.1:6379[1]> ttl name (integer) 14 127.0.0.1:6379[1]> ttl name (integer) 13 127.0.0.1:6379[1]> ttl name (integer) 13 127.0.0.1:6379[1]> ttl name (integer) 0 127.0.0.1:6379[1]> ttl name (integer) -2 127.0.0.1:6379[1]> keys * (empty array) # type key 查看你的key是什么类型 127.0.0.1:6379[1]> set name ming OK 127.0.0.1:6379[1]> get name "ming" 127.0.0.1:6379[1]> type name string
2.3 字符串String
常用命令说明:
# =================================================== # set、get、del、append、strlen # =================================================== 127.0.0.1:6379> set key1 value1 # 设置值 OK 127.0.0.1:6379> get key1 # 获得key "value1" 127.0.0.1:6379> del key1 # 删除key (integer) 1 127.0.0.1:6379> keys * # 查看全部的key (empty list or set) 127.0.0.1:6379> exists key1 # 确保 key1 不存在 (integer) 0 127.0.0.1:6379> append key1 "hello" # 对不存在的 key 进行 APPEND ,等同于 SET key1 "hello" (integer) 5 # 字符长度 127.0.0.1:6379> APPEND key1 "-2333" # 对已存在的字符串进行 APPEND (integer) 10 # 长度从 5 个字符增加到 10 个字符 127.0.0.1:6379> get key1 "hello-2333" 127.0.0.1:6379> STRLEN key1 # # 获取字符串的长度 (integer) 10 # =================================================== # incr、decr 一定要是数字才能进行加减,+1 和 -1。 # incrby、decrby 命令将 key 中储存的数字加上指定的增量值。 # =================================================== 127.0.0.1:6379> set views 0 # 设置浏览量为0 OK 127.0.0.1:6379> incr views # 浏览 + 1 (integer) 1 127.0.0.1:6379> incr views # 浏览 + 1 (integer) 2 127.0.0.1:6379> decr views # 浏览 - 1 (integer) 1 127.0.0.1:6379> incrby views 10 # +10 (integer) 11 127.0.0.1:6379> decrby views 10 # -10 (integer) 1 # =================================================== # range [范围] # getrange 获取指定区间范围内的值,类似between...and的关系,从零到负一表示全部 # =================================================== 127.0.0.1:6379> set key2 abcd123456 # 设置key2的值 OK 127.0.0.1:6379> getrange key2 0 -1 # 获得全部的值 "abcd123456" 127.0.0.1:6379> getrange key2 0 2 # 截取部分字符串 "abc" # =================================================== # setrange 设置指定区间范围内的值,格式是setrange key值 具体值 # =================================================== 127.0.0.1:6379> get key2 "abcd123456" 127.0.0.1:6379> SETRANGE key2 1 xx # 替换值 (integer) 10 127.0.0.1:6379> get key2 "axxd123456" # =================================================== # setex(set with expire)键秒值 # setnx(set if not exist) # =================================================== 127.0.0.1:6379> setex key3 60 expire # 设置过期时间 OK 127.0.0.1:6379> ttl key3 # 查看剩余的时间 (integer) 55 127.0.0.1:6379> setnx mykey "redis" # 如果不存在就设置,成功返回1 (integer) 1 127.0.0.1:6379> setnx mykey "mongodb" # 如果存在就设置,失败返回0 (integer) 0 127.0.0.1:6379> get mykey "redis" # =================================================== # mset Mset 命令用于同时设置一个或多个 key-value 对。 # mget Mget 命令返回所有(一个或多个)给定 key 的值。 # 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。 # msetnx 当所有 key 都成功设置,返回 1 。 # 如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0 。原子操作 # =================================================== 127.0.0.1:6379> mset k10 v10 k11 v11 k12 v12 OK 127.0.0.1:6379> keys * 1) "k12" 2) "k11" 3) "k10" 127.0.0.1:6379> mget k10 k11 k12 k13 1) "v10" 2) "v11" 3) "v12" 4) (nil) 127.0.0.1:6379> msetnx k10 v10 k15 v15 # 原子性操作! (integer) 0 127.0.0.1:6379> get key15 (nil) # 传统对象缓存 set user:1 value(json数据) # 可以用来缓存对象 mset user:1:name zhangsan user:1:age 2 mget user:1:name user:1:age # =================================================== # getset(先get再set) # =================================================== 127.0.0.1:6379> getset db mongodb # 没有旧值,返回 nil (nil) 127.0.0.1:6379> get db "mongodb" 127.0.0.1:6379> getset db redis # 返回旧值 mongodb "mongodb" 127.0.0.1:6379> get db "redis"
String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字。 常规key-value缓存应用: 常规计数:微博数,粉丝数等。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix