深入学习Redis设计与实现原理及技术细节

需积分: 0 1 下载量 29 浏览量 更新于2024-10-24 收藏 2.54MB ZIP 举报
资源摘要信息:"Redis设计与实现学习笔记" Redis学习笔记概述: Redis是一个开源的使用ANSI C语言编写、支持网络、基于内存、可选持久性的键值对存储数据库。它通常被称为数据结构服务器,因为值不仅可以是字符串,还可以是更复杂的数据类型,例如JSON字符串、位图、超日志、地理空间索引等。 Redis的特性包括: - 持久化:支持RDB快照和AOF日志两种持久化机制,可以将内存中的数据保存到硬盘中,在Redis重启后可以重新加载这些数据。 - 事务:通过MULTI、EXEC、WATCH等命令提供事务功能,能够确保一系列操作的原子性。 - 复制:支持主从复制以及从节点对主节点的读操作。 - 高可用和分布式:提供哨兵(Sentinel)系统实现高可用,提供集群(Cluster)模式实现分布式。 - 支持发布/订阅模式,可以用于消息系统。 - 支持Lua脚本,可以将多个操作封装在脚本中执行。 - 内置了支持不同数据结构的功能,比如有序集合(sorted set)、集合(set)、哈希表(hash)等。 Redis使用场景广泛,包括: - 缓存系统:如网站缓存、会话缓存、消息队列。 - 实时分析系统:如计数器、排行榜、实时系统。 - 消息队列系统:具有发布/订阅功能,可以实现消息队列系统。 - 分布式架构中的作用:如分布式锁、分布式计数器等。 Redis的数据类型: - String:最基本的类型,可以包含任何数据,比如JPEG图片或者序列化的对象。 - List:列表,按照插入顺序排序的字符串列表。 - Set:集合,不允许重复的无序集合。 - Hash:哈希表,键值对集合,特别适合存储对象。 - Zset(Sorted Set):有序集合,类似于Set,不允许重复元素,但每个元素都会关联一个double类型的分数,根据分数进行排序。 - Bitmaps:位图,可以用作数据统计、布隆过滤器等。 - HyperLogLogs:基数统计,提供统计大量元素唯一值的近似算法,用于统计网页的UV(独立访客)等。 Redis持久化: - RDB(Redis Database):快照方式,在一定时间间隔内,将内存中的数据保存到硬盘上的一个文件中。 - AOF(Append Only File):日志方式,将所有命令记录下来,每次启动时重新执行这些命令来恢复数据。 Redis复制机制: - 主从复制:一个主节点可以有多个从节点,数据复制是单向的,只能从主节点到从节点。 - 哨兵系统:Sentinel系统是Redis的高可用解决方案,由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。 Redis集群: - Cluster:通过分片技术,将数据分布在不同的Redis节点上,提供高可用性和水平扩展能力。 学习资源和文档: - GitHub上的开源学习笔记提供了宝贵的资源,可以深入了解Redis的设计原理和实现细节。 - 官方网站:*** 提供了详细的官方文档和指南。 - 在线教程、视频课程和书籍也是学习Redis的重要途径。 备注: 本学习笔记转自github上的开源项目,可以方便社区成员阅读、讨论和贡献。对于想要深入了解Redis内部机制和优化技巧的开发者来说,这是一个十分宝贵的资料来源。通过阅读这份笔记,读者可以更好地掌握Redis的设计哲学、数据模型、性能优化技巧以及高级应用案例。

goroutine 52 [select]: github.com/go-sql-driver/mysql.(*mysqlConn).startWatcher.func1() D:/Program Files (x86)/Go/bin/pkg/mod/github.com/go-sql-driver/mysql@v1.7.1/connection.go:614 +0xaf created by github.com/go-sql-driver/mysql.(*mysqlConn).startWatcher D:/Program Files (x86)/Go/bin/pkg/mod/github.com/go-sql-driver/mysql@v1.7.1/connection.go:611 +0x10a goroutine 83 [select]: github.com/go-redis/redis/v8/internal/pool.(*ConnPool).reaper(0x12f262a0, 0xdf8475800) D:/Program Files (x86)/Go/bin/pkg/mod/github.com/go-redis/redis/v8@v8.11.5/internal/pool/pool.go:485 +0xd6 created by github.com/go-redis/redis/v8/internal/pool.NewConnPool D:/Program Files (x86)/Go/bin/pkg/mod/github.com/go-redis/redis/v8@v8.11.5/internal/pool/pool.go:111 +0x242 goroutine 85 [chan receive]: go-study/models.sendProc(0x12e40cf0) D:/go/go-study/models/Message.go:88 +0x48 created by go-study/models.Chat D:/go/go-study/models/Message.go:79 +0x30d goroutine 86 [IO wait]: internal/poll.runtime_pollWait(0x33340b00, 0x72) D:/Program Files (x86)/Go/src/runtime/netpoll.go:305 +0x52 internal/poll.(*pollDesc).wait(0x138f60f4, 0x72, 0x0) D:/Program Files (x86)/Go/src/internal/poll/fd_poll_runtime.go:84 +0x37 internal/poll.execIO(0x138f6014, 0xa365e0) D:/Program Files (x86)/Go/src/internal/poll/fd_windows.go:175 +0xfc internal/poll.(*FD).Read(0x138f6000, {0x12f41000, 0x1000, 0x1000}) D:/Program Files (x86)/Go/src/internal/poll/fd_windows.go:441 +0x13b net.(*netFD).Read(0x138f6000, {0x12f41000, 0x1000, 0x1000}) D:/Program Files (x86)/Go/src/net/fd_posix.go:55 +0x3f net.(*conn).Read(0x12c0aa68, {0x12f41000, 0x1000, 0x1000}) D:/Program Files (x86)/Go/src/net/net.go:183 +0x4f bufio.(*Reader).fill(0x12d1eae0) D:/Program Files (x86)/Go/src/bufio/bufio.go:106 +0xe9 bufio.(*Reader).Peek(0x12d1eae0, 0x2) D:/Program Files (x86)/Go/src/bufio/bufio.go:144 +0x6d github.com/gorilla/websocket.(*Conn).read(0x12f68000, 0x2) D:/Program Files (x86)/Go/bin/pkg/mod/github.com/gorilla/websocket@v1.5.0/conn.go:371 +0x30 github.com/gorilla/websocket.(*Conn).advanceFrame(0x12f68000) D:/Program Files (x86)/Go/bin/pkg/mod/github.com/gorilla/websocket@v1.5.0/conn.go:809 +0xae github.com/gorilla/websocket.(*Conn).NextReader(0x12f68000) D:/Program Files (x86)/Go/bin/pkg/mod/github.com/gorilla/websocket@v1.5.0/conn.go:1009 +0xb5 github.com/gorilla/websocket.(*Conn).ReadMessage(0x12f68000) D:/Program Files (x86)/Go/bin/pkg/mod/github.com/gorilla/websocket@v1.5.0/conn.go:1093 +0x25 go-study/models.recvProc(0x12e40cf0) D:/go/go-study/models/Message.go:100 +0x105 created by go-study/models.Chat D:/go/go-study/models/Message.go:81 +0x352

2023-06-02 上传