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上浪费时间
- 单线程避免了线程切换和竞争产生的消耗
单线程架构的问题就是如果某个命令执行时间过长,会造成其他命令的阻塞,是要重点关注的。