Redis开发与运维读书笔记之二——全局命令、数据结构和内部编码

2 API 的理解和使用

Redis 命令有上百个,理解 Redis 的一些机制,会发现这些命令有很强的通用性

有些数据结构和命令必须在特定场景使用,一旦使用不当可能对 Redis 本身或者应用造成致命伤害

全局命令:

keys * : 查看所有键

dbsize: 键的总数

exists key: 检查键是否存在

del key : 删除键,返回结果为成功删除键的个数

expire key seconds : 键过期

ttl key: 查看 key 的剩余过期时间 , 3 种返回值,大于等于 0 的整数:键剩余的过期时间, -1 :键没设置过期时间, -2 ,键不存在

type key : 查看键的数据结构类型

数据结构和内部编码

type 命令返回的就是键的数据结构类型,分别是 string (字符串)、 hash (哈希)、 list (列表)、 set (集合)、 zset( 有序集合 )

每种数据结构内部都有多种内部编码实现, Redis 会根据场景选择合适的内部编码:

string raw int embstr

hash hashtable ziplist

list linkedlist ziplist

set hashtable intset

zset skiplist ziplist

单线程架构

Redis 使用单线程架构和 I/O 多路复用模型实现高性能的内存数据库服务。

Redis 使用单线程来处理命令,所有命令到达服务端都会进入一个队列后被逐个执行。

Redis 单线程模型可以达到每秒万级别的处理能力:

纯内存访问:内存响应时间大约为 100 纳秒

非阻塞 I/O :使用 epoll 作为 I/O 多路复用技术的实现,加上 Redis 的事件处理模型将 epoll 中的连接、读写、关闭都转换为事件,不在网络 I/O 上浪费过多的时间

多线程避免了线程切换和竞态产生的消耗

单线程的好处:

可以简化数据结构和算法的实现

避免线程切换和竞态产生的消耗

单线程的问题

对每个命令的执行时间有要求,如果时间过长,会造成阻塞(这也是一般生产上禁止执行keys、hgetall等命令的原因)

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇