首页 > 数据库 >2.1 RedisAPI之简介

2.1 RedisAPI之简介

时间:2022-10-24 21:34:57浏览次数:50  
标签:内部 单线程 简介 Redis 线程 内存 key 2.1 RedisAPI


1.通用命令

  • 遍历所有key
keys *

keys命令一般不在生产环境使用,主要原因是生产环境下通常有大量的key,列出所有key没有实际的意义并且会消耗很多内存资源。

  • 删除指定key
del key
  • 计算key的总数
dbsize
  • 检查key是否存在
exists key
  • key在seconds秒后过期
expire key seconds
  • 查看key剩余的过期时间
ttl key

如果返回值为负数,说明该key已经过期,Redis会自动执行del key操作。

  • 取消key的过期时间
persist key
  • 返回key的类型
type key
  • 返回值类型
  • string
  • hash
  • list
  • set
  • zset
  • none(该key不存在)

命令

时间复杂度

keys

O(n)

dbsize

O(1)

del

O(1)

exists

O(1)

expire

O(1)

type

O(1)

2.数据结构和内部编码
(1).key所对应的数据结构和内部编码

数据机构

内部编码

string

raw

string

int

string

embstr

hash

hashtable

hash

ziplist

list

linkedlist

list

ziplist

set

hashtable

set

intset

zset

skiplist

zset

ziplist

  • Redis是基于内存的key-value数据库,这样设计有利于合理高效地利用宝贵的内存资源。
  • 可以改进内部编码,而对外部的数据结构和命令没有影响,这样一旦开发出优秀的内部编码,无需改动外部数据结构和命令。
  • 多种内部编码实现可以在不同场景下发挥各自的优势。例如ziplist比较节省内存,但是在列表元素比较多的情况下,性能会有所下降,这时候Redis会根据配置选项将列表类型的内部实现转换为linkedlist。

(2).redisObject
Redis源码内部有一个redisObject对象,使用Redis存储的数据,在内存中就是以redisObject对象保存的,它包含如下重要信息。

  • 数据类型(type):string、hash、list、set、sorted set
  • 编码方式(encoding):raw、int、ziplist、linkedlist、hashmap、intset
  • 数据指针(ptr)
  • 虚拟内存(vm)

3.单线程架构

(1).执行命令方式

单线程模式下,Redis是采用串行方式来执行命令的,保证前一次操作执行完后,才能执行下一次操作。

2.1 RedisAPI之简介_redis

(2).单线程为什么这么快

  • 纯内存(核心原因):绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)。
  • 避免线程切换和线程竞争消耗:采用单线程避免了不必要的线程切换和竞争,也不用考虑锁的问题,不存在加锁释放锁所带来的性能消耗。
  • 非阻塞IO:使用多路I/O复用模型。
  • 多路I/O复用模型是指利用select、poll、epoll可以同时监察多个流的I/O事件的能力,在空闲的时候,把当前线程阻塞,当有一个或多个流有I/O事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll是只轮询那些真正发出了事件的流),并且依次顺序处理就绪的流,这种做法就避免了大量的无用操作。
  • 这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路I/O复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络 IO 的时间消耗),且Redis在内存中操作数据的速度非常快,也就是说内存内的操作不会成为影响Redis性能的瓶颈,以上几点造就了Redis具有高吞吐量。

(3).注意

  • 一次只运行一条命令
  • 不要在线上使用长(慢)命令,如keys、flushall、flushdb、mutil/exec、operate等


标签:内部,单线程,简介,Redis,线程,内存,key,2.1,RedisAPI
From: https://blog.51cto.com/u_15843693/5791305

相关文章

  • 1.1 Redis之简介
    1.简介Redis是一款开源免费的、基于内存的、高性能的、key-value型数据库。2.特点性能:Redis读的速度是110000次/s,写的速度是81000次/s数据持久化:可以将内存中的数据持久......
  • 【2022.10.24】Vue基础学习(1)
    内容概要1.前端发展介绍2.Vue的快速使用3.差值语法4.指令系统之文本指令5.指令系统之事件指令6.指令系统之属性指令内容详细1前端发展介绍#HTML(5)、CSS(......
  • 闲话 22.10.24
    闲话晚上在外面逛了几圈所以今天的闲话发得比较的晚感觉生活水平需要提升于是在找游戏人生的壁纸(所以有好心人投喂几张吗(今日模拟赛有交互题“不保证评测交互库和下......
  • 2022.10.24每日一题
    路径计数题目描述有一个\(n×n\)的网格,有些格子是可以通行的,有些格子是障碍。一开始你在左上角的位置,你可以每一步往下或者往右走,问有多少种走到右下角的方案。由于......
  • Mono 2.11.3 发布包含微软的 Entity Framework
    在Mono团队Xamarin获得1200W美金融资后,Xamarin的MigueldeIcaza's(Mono项目创始人)在博客上发布了他们的Mono2.11的第四个预览版2.11.3.Mono2.11带来......
  • 《Java 核心技术卷2》 2.1 XML概述 阅读和总结
    XML是什么类似于,HTML,是一种标记语言。XML的本意是(ExtensibleMarkupLanguage)可扩展标记语言。标记语言不是一种程序语言,是用于描述数据的工具。XML的特点是,在描述事物属......
  • vue之简介
    一、前端的发展介绍#HTML(5)、CSS(3)、JavaScript(ES5、ES6、ES13):编写一个个的页面->给后端(PHP、Python、Go、Java)->后端嵌入模板语法->后端渲染完数据->返......
  • vue简介,插值语法,vue指令系统
    前端页面发展Vue的快速使用插值语法指令系统之文本指令指令系统之事件指令指令系统之属性指令前端页面发展1.HTML(5)、CSS(3)、JavaScript(ES5、ES6)......
  • MVC结构简介
    MVC(Model-View-Controller)应用程序结构被用来分析分布式应用程序的特征。这种抽象结构能有助于将应用程序分割成若干逻辑部件,使程序设计变得更加容易。MVC结构提供了一种按......
  • 补题记录(2022.10)
    补题记录2022ShanghaiCollegiateProgrammingContest(2022上海省赛)B-带权并查集+差分约束C-数学、贪心E-dp或ch表转移L-字符串哈希(已过,2000ms)orAC自动机......