+
{!siteConfig.themeColor.fixed && (
-
-
+
+
)}
-
diff --git a/src/config.ts b/src/config.ts
index 9d71fdf..fa54dc7 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -43,42 +43,40 @@ export const navBarConfig: NavBarConfig = {
links: [
LinkPreset.Home,
LinkPreset.Archive,
- LinkPreset.About,
- {
- name: "GitHub",
- url: "https://github.com/meowrain", // Internal links should not include the base path, as it is automatically added
- external: true, // Show an external link icon and will open in a new tab
- },
+ LinkPreset.About
],
};
export const profileConfig: ProfileConfig = {
avatar: "https://blog.meowrain.cn/api/i/2025/07/18/zn3t6t-1.webp", // Relative to the /src directory. Relative to the /public directory if it starts with '/'
- name: "MeowRain_Offical",
+ name: "MeowRain",
bio: "A developer who loves to code and learn new things,build code for love❤️ and fun🎉",
links: [
- {
- name: "Twitter",
- icon: "fa6-brands:twitter", // Visit https://icones.js.org/ for icon codes
- // You will need to install the corresponding icon set if it's not already included
- // `pnpm add @iconify-json/
`
- url: "https://twitter.com",
- },
- {
- name: "Steam",
- icon: "fa6-brands:steam",
- url: "https://store.steampowered.com",
- },
{
name: "GitHub",
icon: "fa6-brands:github",
- url: "https://github.com/saicaca/fuwari",
+ url: "https://github.com/meowrain",
},
+ {
+ name: "我的OpenWebUI站",
+ icon: "fa6-brands:airbnb",
+ url: "https://ai.meowrain.cn",
+ },
+ {
+ name: "服务器状态监控",
+ icon: "fa6-solid:server",
+ url: "https://status.meowrain.cn",
+ },
+ {
+ name: "bilibili",
+ icon: "fa6-brands:bilibili",
+ url: "https://space.bilibili.com/386388600",
+ }
],
};
export const licenseConfig: LicenseConfig = {
- enable: true,
+ enable: false,
name: "CC BY-NC-SA 4.0",
url: "https://creativecommons.org/licenses/by-nc-sa/4.0/",
};
diff --git a/src/content/posts/中间件/Redis/Redis为什么快.md b/src/content/posts/中间件/Redis/Redis为什么快.md
new file mode 100644
index 0000000..ef238d5
--- /dev/null
+++ b/src/content/posts/中间件/Redis/Redis为什么快.md
@@ -0,0 +1,18 @@
+---
+title: Redis为什么快
+published: 2025-07-19
+description: ''
+image: 'https://blog.meowrain.cn/api/i/2025/07/19/p9zr81-1.webp'
+tags: [Redis, 中间件]
+category: '中间件 > Redis'
+draft: false
+lang: ''
+---
+
+# Redis为什么快
+
+1. 使用内存存储
+2. Redis采用了IO多路复用技术的事件驱动模型来处理客户端请求,执行Redis命令
+3. Redis6.0引入多线程机制,把网络和I/O处理放到多个线程中,减少了单线程的瓶颈,网络IO交给线程池处理,命令仍然在主线程中进行。充分利用CPU多核的优势,提升了性能。
+ 
+4. Redis 对底层数据结构做了极致的优化,比如说 String 的底层数据结构动态字符串支持动态扩容、预分配冗余空间,能够减少内存碎片和内存分配的开销。
diff --git a/src/content/posts/中间件/Redis/Redis有哪些数据类型.md b/src/content/posts/中间件/Redis/Redis有哪些数据类型.md
new file mode 100644
index 0000000..7b092d2
--- /dev/null
+++ b/src/content/posts/中间件/Redis/Redis有哪些数据类型.md
@@ -0,0 +1,102 @@
+---
+title: Redis有哪些数据类型
+published: 2025-07-19
+description: ''
+image: 'https://blog.meowrain.cn/api/i/2025/07/19/p9zr81-1.webp'
+tags: [Redis, 中间件, Redis数据类型]
+category: '中间件 > Redis'
+draft: false
+lang: ''
+---
+
+
+# 官方文档
+
+[Redis官方文档](https://redis.io/docs/latest/develop/data-types/)
+
+
+
+
+# 基本数据类型
+
+Redis支持五种基本数据类型
+
+## 字符串
+
+
+
+
+
+
+ 字符串是最基本的数据类型,可以存储文本,数字或者二进制数据,最大的容量是512MB。适合缓存单个对象,比如验证码,token,计数器等。
+
+## 列表
+
+
+
+
+
+
+ 列表是一个有序的字符串集合,可以在头部或尾部插入元素,适合用于消息队列,任务调度等场景。
+
+## 哈希
+
+
+
+
+
+
+ 哈希是一个键值对集合,适合用于存储对象。可以通过字段名快速访问字段值,支持对单个字段的操作,节省内存。
+
+## 集合
+
+
+
+
+
+
+ 集合是一个无序的字符串集合,支持快速的成员查找,适合用于标签,好友关系等场景。
+ 可以进行集合运算,如交集,差集,并集等。
+ 平常拿来做一些去重操作。
+
+## 有序集合
+
+
+
+
+
+
+ 有序集合是一个有序的字符串集合,每个元素都有一个分数,支持根据分数进行范围查询,适合用于排行榜,消息队列等场景。
+
+
+
+
+
+# 扩展数据类型
+
+[redis3种特殊类型详解](https://pdai.tech/md/db/nosql-redis/db-redis-data-type-special.html#redis%E5%85%A5%E9%97%A8---%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B3%E7%A7%8D%E7%89%B9%E6%AE%8A%E7%B1%BB%E5%9E%8B%E8%AF%A6%E8%A7%A3)
+
+## 位图bitmap
+
+[详细文档](https://redis.io/docs/latest/develop/data-types/bitmaps/)
+
+
+
+位图是一个特殊的字符串类型,用于存储二进制位。可以用来统计用户活跃度,签到等场景。
+
+## 基数统计HyperLogLog
+
+[详细文档](https://redis.io/docs/latest/develop/data-types/probabilistic/hyperloglogs/)
+
+
+
+
+基数统计通常用于统计不重复的元素数量,比如网站访问量,用户注册量等。
+
+## 地理位置Geo
+
+存储地理信息
+
+## Bloom Filter
+
+[详细文档](https://redis.io/docs/latest/develop/data-types/probabilistic/bloom-filter/)
diff --git a/src/content/posts/中间件/Redis/什么是Redis.md b/src/content/posts/中间件/Redis/什么是Redis.md
new file mode 100644
index 0000000..9500c46
--- /dev/null
+++ b/src/content/posts/中间件/Redis/什么是Redis.md
@@ -0,0 +1,58 @@
+---
+title: 什么是Redis
+published: 2025-07-19
+description: ''
+image: 'https://blog.meowrain.cn/api/i/2025/07/19/p9zr81-1.webp'
+tags: [Redis, 中间件]
+category: '中间件 > Redis'
+draft: false
+lang: ''
+---
+
+# 什么是Redis
+
+Redis是一个开源的额高性能键值对存储系统,它可以用作数据库、缓存和消息代理。Redis支持多种数据结构,如字符串、哈希、列表、集合和有序集合等。
+主要特点是把数据存放在内存中,相比于直接访问磁盘的关系型数据库,读写速度会更快。
+
+## Redis的特点
+
+1. **高性能**:Redis可以每秒处理数百万个请求,读写速度非常快。
+2. **持久化**:Redis支持将数据持久化到磁盘,可以在重启后恢复数据。
+3. **丰富的数据结构**:支持字符串、哈希、列表、集合、有序集合等多种数据类型,适用于不同的应用场景。
+4. **原子操作**:Redis支持对数据的原子操作,保证数据的一致性。
+5. **分布式**:支持主从复制、分片和高可用集群,适合大规模应用。
+6. **发布/订阅**:支持发布/订阅模式,可以实现消息通知和实时数据更新。
+7. **Lua脚本**:支持Lua脚本,可以在服务器端执行复杂的操作,减少网络传输延迟。
+8. **事务支持**:支持事务操作,可以保证一组命令要么全部执行成功,要么全部不执行。
+9. **地理位置支持**:支持地理位置数据,可以进行地理位置查询和计算。
+10. **多种客户端支持**:提供多种编程语言的客户端库,如Java、Python、Node.js等
+11. **易于部署和使用**:Redis的安装和配置相对简单,社区活跃,有丰富的文档和教程。
+
+# 使用场景
+
+Redis常用于以下场景:
+
+1. **缓存**:可以用来缓存数据库查询结果,减少数据库负载,提高
+2. **会话存储**:可以用来存储用户会话信息,支持高并发访问。
+3. **实时数据分析**:可以用来存储实时数据,如用户行为分析
+4. **消息队列**:可以用作消息队列系统,支持发布/订阅模式。
+5. **排行榜**:可以用来实现排行榜功能,支持有序集合数据结构。
+6. **分布式锁**:可以用来实现分布式锁,支持高并发场景下的资源控制。
+7. **地理位置服务**:可以用来存储地理位置信息,支持地理位置查询。
+8. **计数器**:可以用来实现计数器功能,如网站访问量统计。
+
+# Redis分布式部署的方式
+
+Redis的分布式部署方式主要有以下几种:
+
+1. **主从复制(Master-Slave Replication)**:通过设置主节点和多个从节点,实现数据的复制和备份。主节点负责写操作,从节点负责读操作,可以提高读性能和数据安全性。
+2. **分片(Sharding)**:将数据分布到多个Redis实例中,每个实例存储一部分数据。可以通过哈希算法将数据分配到不同的实例,实现数据的水平扩展。常用的分片方式有一致性哈希(Consistent Hashing)和范围分片(Range Sharding)。
+3. **Redis集群(Redis Cluster)**:Redis官方提供的集群模式,支持自动分片和故障转移。Redis集群可以将数据分布到多个节点上,每个节点存储一部分数据,并且支持动态扩容和缩容。集群模式下,客户端可以通过集群节点的地址直接访问数据,无需额外的代理层。
+4. **Sentinel模式**:Redis Sentinel是Redis的高可用解决方案,可以监控Redis实例的状态,并在主节点发生故障时自动进行故障转移。Sentinel可以与主从复制结合使用,提供高可用性和自动恢复能力。
+
+# 和MySQL的区别
+
+Redis不是关系型数据库,而是一个键值对存储系统。
+Redis把数据存放在内存中,读写速度非常快,而MySQL是基于磁盘的关系型数据库,读写速度相对较慢。
+
+实际开发中,会把Redis作为缓存层,存储一些热点数据,减少对MySQL的访问压力,提高系统性能。
diff --git a/src/content/posts/操作系统/IO多路复用技术.md b/src/content/posts/操作系统/IO多路复用技术.md
new file mode 100644
index 0000000..bd0014c
--- /dev/null
+++ b/src/content/posts/操作系统/IO多路复用技术.md
@@ -0,0 +1,47 @@
+---
+title: IO多路复用技术
+published: 2025-07-19
+description: ''
+image: ''
+tags: [IO,操作系统]
+category: '操作系统'
+draft: false
+lang: ''
+---
+
+# 参考资料
+
+
+
+# 为什么要有IO多路复用技术?
+
+在没有 I/O 多路复用(如 select/poll/epoll)时,同步 I/O 确实主要分为以下两种模式:
+
+
+
+
+
+
+当处理 大量并发连接 时,上述两种同步模型存在致命缺陷:
+
+阻塞 I/O:需要 1 线程/连接 → 线程切换开销大(C10K 问题)
+非阻塞 I/O:CPU 空转轮询 → 资源浪费严重
+
+
+
+
+# IO多路复用技术
+
+IO多路复用是一种允许单个进程同时监视多个文件描述符的技术,使得程序能高效处理多个并发连接而无需创建大量线程。
+
+## **select/poll/epoll**
+
+select 的缺点是单个进程能监视的文件描述符数量有限,一般为 1024 个,且每次调用都需要将文件描述符集合从用户态复制到内核态,然后遍历找出就绪的描述符,性能较差。
+
+poll 的优点是没有最大文件描述符数量的限制,但是每次调用仍然需要将文件描述符集合从用户态复制到内核态,依然需要遍历,性能仍然较差。
+
+epoll 是 Linux 特有的 IO 多路复用机制,支持大规模并发连接,使用事件驱动模型,性能更高。其工作原理是将文件描述符注册到内核中,然后通过事件通知机制来处理就绪的文件描述符,不需要轮询,也不需要数据拷贝,更没有数量限制,所以性能非常高。
+
+epoll使用了事件驱动模型
+
+
diff --git a/src/i18n/languages/zh_CN.ts b/src/i18n/languages/zh_CN.ts
index d1b8cf1..3b3f834 100644
--- a/src/i18n/languages/zh_CN.ts
+++ b/src/i18n/languages/zh_CN.ts
@@ -5,7 +5,7 @@ export const zh_CN: Translation = {
[Key.home]: "主页",
[Key.about]: "关于",
[Key.archive]: "归档",
- [Key.search]: "搜索",
+ [Key.search]: "Miku Beam!🌟",
[Key.tags]: "标签",
[Key.categories]: "分类",