redis的key操作

1.del key [key key …]

  • 删除给定的一个或者多个key,不存在的key会被忽略
  • 返回值:被删除key的数量

2.exists key

  • 检查给定的key是否存在
  • 返回值:如果key存在,返回1.否则返回0

3.expire key seconds

  • 给指定的key设置或者更新生存时间,当key过期时(生存时间为0),他会被自动删除
  • 返回值:设置成功返回1,当key不存在或者不能为key设置生存时间时,返回0
  • persist 命令可以在不删除 key 的情况下,移除 key 的生存时间,让 key 重新成为一个『持久化』(persistent) key
  • 对key进行更新或者覆盖(set,getset)都不会更改或者删除生存时间,对key执行incr, LPUSH ,HSET命令都不会改变key本身的生存时间(后面版本set操作会剔除key的生存时间)

4.expireat key timestamp

  • EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置生存时间,不同于的是 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
  • 返回值:成功返回1 ,当 key 不存在或没办法设置生存时间,返回 0

5.pexpire key milliseconds

  • 这个命令和 EXPIRE 命令的作用类似,但是它以毫秒为单位设置 key 的生存时间,而不像 EXPIRE 命令那样,以秒为单位
  • 返回值:设置成功,返回 1;key 不存在或设置失败,返回 0

6.persist key

  • 移除给定 key 的生存时间,将这个 key 从『可挥发』的(带生存时间 key )转换成『持久化』的(一个不带生存时间、永不过期的 key )。
  • 返回值:当生存时间移除成功时,返回 1;如果 key 不存在或 key 没有设置生存时间,返回 0

7.keys pattern

  • 查找所有符合给定模式pattern的key
  • 返回值:符合给定模式的key列表
  • keys * : 匹配数据库中所有的key
  • keys h?llo: 匹配 hello , hallo 和 hxllo 等
  • keys h*llo: 匹配 hllo 和 heeeeello 等
  • keys h[ae]llo:匹配 hello 和 hallo ,但不匹配 hillo
  • 特殊符号用 \ 隔开

8.migrate host port key destination-db timeout

  • 在一定时间内,将key原子性的从当前实例传送到目标是里的指定数据库中,一旦传送成功,key保证会出现在目标实例上,而当前实例的key会被删除
  • 返回值:迁移成功时返回ok,否则返回响应错误
  • 过程:他将当前实例对指定的key执行dump(序列化)命令,然后传送到目标实例,目标实例再使用restore(反序列化)命令,并将反序列化所得到的数据添加到指定数据库中;当前实例就像目标实例的客户端那样,只要看到 RESTORE 命令返回 OK ,它就会调用 DEL 删除自己数据库上的 key
  • timeout 参数以毫秒为格式,指定当前实例和目标实例进行沟通的最大间隔时间。这说明操作并不一定要在 timeout 毫秒内完成,只是说数据传送的时间不能超过这个 timeout 数
  • 错误:如果在传送数据时发生 IO 错误,或者达到了超时时间,那么命令会停止执行,并返回一个特殊的错误: IOERR
    • key 可能存在于两个实例
    • key 可能只存在于当前实例
    • 唯一不可能发生的情况就是丢失 key ,因此,如果一个客户端执行 MIGRATE 命令,并且不幸遇上 IOERR 错误,那么这个客户端唯一要做的就是检查自己数据库上的 key 是否已经被正确地删除

9.move key db

  • 将当前数据库的 key 移动到给定的数据库 db 当中
  • 返回值 :移动成功返回 1 ,失败则返回 0
  • 如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。
  • 因此,也可以利用这一特性,将 MOVE 当作锁(locking)原语(primitive)。

10.object subcommand [arguments [arguments]]

  • object命令允许从内部查看给定key的redis对象
  • 返回值:refcount 和 idletime 返回数字; encoding 返回相应的编码类型
  • 子命令:
    • object refcount 返回给定 key 引用所储存的值的次数。此命令主要用于除错
    • object idletime 返回给定 key 自储存以来的空转时间(idle, 没有被读取也没有被写入),以秒为单位
    • object encoding 返回给定 key 锁储存的值所使用的内部表示(representation)。
  • 对象的多种方式编码:
    • 字符串可以被编码为 raw (一般字符串)或 int (用字符串表示64位数字是为了节约空间)。
    • 列表可以被编码为 ziplist 或 linkedlist 。 ziplist 是为节约大小较小的列表空间而作的特殊表示
    • 集合可以被编码为 intset 或者 hashtable 。 intset 是只储存数字的小集合的特殊表示
    • 哈希表可以编码为 zipmap 或者 hashtable 。 zipmap 是小哈希表的特殊表示
    • 有序集合可以被编码为 ziplist 或者 skiplist 格式。 ziplist 用于表示小的有序集合,而 skiplist 则用于表示任何大小的有序集合
      11.pexpireat key milliseconds timestamp
  • 这个命令和 EXPIREAT 命令类似,但它以毫秒为单位设置 key 的过期 unix 时间戳,而不是像 EXPIREAT 那样,以秒为单位。
  • 返回值:如果生存时间设置成功,返回 1 ;当 key 不存在或没办法设置生存时间时,返回 0

12.ttl key

  • 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
  • 返回值:当 key 不存在或没有设置生存时间时,返回 -1 否则,返回 key 的剩余生存时间(以秒为单位)。

13.pttl key

  • 这个命令类似于 TTL 命令,但它以毫秒为单位返回 key 的剩余生存时间,而不是像 TTL 命令那样,以秒为单位
  • 返回值:如果 key 不存在,返回 -1 。否则,返回以毫秒为单位表示的 key 的剩余生存时间

14.randomkey

  • 从当前数据库中随机返回(不删除)一个key
  • 返回值:当数据库不为空时,返回一个 key 。当数据库为空时,返回 nil 。

15.rename key newkey

  • 将 key 改名为 newkey (相当于改名字)
  • 返回值:改名成功时提示 OK ,失败时候返回一个错误
  • 当 key 和 newkey 相同,或者 key 不存在时,返回一个错误
  • 当 newkey 已经存在时, rename 命令将覆盖旧值
    • SET pc “lenovo”
    • SET personal_computer “dell”
    • rename pc personal_computer
    • GET pc :(nil)
    • GET personal_computer : “lenovo” (原来的值 dell 被覆盖了
      )

16.renamenx key newkey

  • 当且仅当 newkey 不存在时,将 key 改名为 newkey ;当 key 不存在时,返回一个错误
  • 返回值:修改成功时,返回 1 ;如果 newkey 已经存在,返回 0

17.restore key ttl serialized-value

  • 反序列化给定的序列化值,并将它和给定的 key 关联
  • 参数 ttl 以毫秒为单位为 key 设置生存时间;如果 ttl 为 0 ,那么不设置生存时间
  • 返回值:如果反序列化成功那么返回 OK ,否则返回一个错误
  • 在执行反序列化之前会先对序列化值的 RDB 版本和数据校验和进行检查,如果 RDB 版本不相同或者数据不完整的话,那么 RESTORE 会拒绝进行反序列化,并返回一个错误

18.dump key

  • 序列化给定 key ,并返回被序列化的值,使用 RESTORE 命令可以将这个值反序列化为 Redis 键
  • 返回值:如果 key 不存在,那么返回 nil ;否则,返回序列化之后的值
  • 序列化生成的值有以下几个特点
    • 它带有 64 位的校验和,用于检测错误, RESTORE 在进行反序列化之前会先检查校验和
    • 值的编码格式和 RDB 文件保持一致
    • RDB 版本会被编码在序列化值当中,如果因为 Redis 的版本不同造成 RDB 格式不兼容,那么 Redis 会拒绝对这个值进行反序列化操作。
  • 序列化的值不包括任何生存时间信息

19.sort key [by pattern] [limit offset count] [get pattern [get pattern …]] [asc | desc] [alpha] [store destination]

  • 返回或保存给定列表、集合、有序集合 key 中经过排序的元素
  • 返回值:没有使用 STORE 参数,返回列表形式的排序结果;使用 STORE 参数,返回排序结果的元素数量。
  • 排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis是一种高性能的非关系型数据库,其数据结构以键值对的形式存储数据。RedisKey的设计对于提高系统性能和减少内存消耗非常重要。 以下是几个RedisKey设计的技巧: 1. 使用前缀:为了更好地区分不同类型的数据,可以在Key名字前面增加一个前缀。比如,在存储用户信息时,可以使用"user:"作为前缀,例如"user:1"代表用户1的信息。这样做的好处是可以根据前缀来查找特定类型的数据,方便管理和维护。 2. 使用短而简洁的Key名:RedisKey的长度直接影响存储和传输的性能,因此应该尽量保持Key的长度较短。可以使用一些简洁的表示方法,比如使用数字代表某个数据类型,然后组合使用,减少Key的长度。 3. 避免冗余信息:Key的设计应该避免冗余信息。比如,在存储用户信息时,如果用户的ID已经包含在Key了,就没必要在Value再存储一次。 4. 使用命名空间:为了更好地管理Key,可以使用命名空间的概念。比如,可以为不同的业务功能设置不同的命名空间,将相关的Key放在同一个命名空间下,便于管理和操作。 5. 分散Key:如果系统需要存储大量的数据,可以将不同类型的数据分散到不同的Redis实例,或者使用Redis集群。这样可以减轻单个Redis实例的负载,提高系统的并发访问能力。 6. 考虑Key的过期时间:根据业务需求,可以给Key设置过期时间,使得数据在一定时间后自动清理,避免数据过期后占用过多内存空间。 总结来说,合理的RedisKey设计可以提高系统的性能和可扩展性,减少内存消耗。通过使用前缀、简短的Key名、避免冗余信息、使用命名空间、分散Key和设置过期时间等技巧,可以更好地管理和操作Redis的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值