一、Redis是一种基于键值队的非关系型数据库(kay-value),他支持很多数据结构
string(字符串)
hash(哈希)
list(列表)
set(集合)
zset(有序集合)
Bitmaps(位图)
HyperLogLog(基数统计)
GEO(地理信息定位)
二、全局命令
keys * 查看所有键(数据量大的情况下不建议使用,开销太大)
dbsize 查看键总数(时间复杂度为o(1),因为直接拿的redis内置的键总数变量)
exists key 查看键是否存在(存在返回1,不存在返回0)
del key 删除键(返回删除成功键值的数量),可以支持多个键入 del k1 k2 k3
expire key seconds 设置键过期时间(单位是秒)
ttl key 返回剩余时间(返回大于等于0是剩余时间数,返回-1是键没设置过期时间,返回-2说明键不存在已被删除)
type key 查看键的数据结构类型,如果键不存在返回none
三、单线程构架
Redis使用了单线程构架和I/O多路复用模型来实现高性能的内存数据库服务
为什么Redis是单线程执行速度还这么快呢?
①:访问内存,Redis将所有数据都放在内存中,而访问内存的速度是非常快的。
这里是mysql的工作原理(https://www.cnblogs.com/xiaotengyi/articles/3641983.html)可以进行两者对比,Redis是直接访问内存,而mysql在没有命中缓存的情况下需要读硬盘。
②:多路复用,非阻塞I/O。多路I/O复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。
③:单线程避免了线程切换和竞争产生的消耗,同时避免了多线程中锁和线程切换的性能杀手