Redis全局命令

Redis全局命令

Redis的一个客户端,支持多个操作系统

https://gitee.com/qishibo/AnotherRedisDesktopManager

全局命令

查看所有键

  • keys命令会遍历所有键,时间复杂度O(n),线上保存了大量的键时,禁止使用
keys *

查看当前数据库中键的总数

  • 它时查询Redis内置的变量,的时间复杂度是O(1)
dbsize

查看某个键是否存在

exists key
----------------
> EXISTS key
0
> EXISTS java
1
  • 如果存在返回1,不存在返回0

删除键

del key [key...]
-----------------
> EXISTS java
1
> del java
1
> EXISTS java
0
-----------------
> set a 1
OK
> set b 2
OK
> set c 3
OK
> set d 4
OK
> del a b c d
4
  • 无论值是什么数据结构,del都可以删除
  • 返回删除成功的个数

键过期

对键添加过期时间,超时自动删除键。

expire key seconds
-----------------
> set hello world
OK
> expire hello 10
1
> ttl hello
3
> ttl hello
-2
  • 给hello设过期时间为10秒
  • ttl key 查看键的过期时间;返回-2,表示键已被删除

键的数据结构

type key
---------------
> set a b
OK
> type a
string
> rpush mylist a b c d
4
> type mylist
list
> type not_exist_key
none

数据结构与内部编码

Redis的5种数据结构,string,list,hash,set,zset,它们是提供给用户直接使用的数据结构。

每种数据结构内部都有不同的实现方式,也就是内部编码。比如string的内部编码有raw,int,embstr;list的内部编码有quicklist,linkedlist,ziplist。这样设计一方面方便改进内部编码,另一方面可以为不同的场景提供不同的实现。

查看内部编码

object encoding key
-------------------
> object encoding mylist
quicklist
> object encoding a
embstr

单线程架构

【专题todo Redis的单线程架构】

【专题todo IO多路复用】

单线程架构+IO多路复用

Redis是单线程的,所以每条命令从客户端到达服务端不会立刻被执行,而是进入一个队列中,然后被逐个执行,不会存在并发的问题。

单线程为什么还这么快?

  • 纯内存访问
  • 非阻塞IO,Redis使用epoll作为多路复用的实现,加上自身的事件处理模型将epoll的连接,读写,关闭都转换为事件,不在网络IO上浪费时间
  • 单线程避免了线程切换和竞争产生的消耗

单线程架构的问题就是如果某个命令执行时间过长,会造成其他命令的阻塞,是要重点关注的。

原文地址:https://www.cnblogs.com/SimonZ/p/14860679.html