├── .gitignore ├── README.md ├── client.go ├── cluster_config1.yaml ├── cluster_config2.yaml ├── cluster_config3.yaml ├── config.yaml ├── config └── config.go ├── database ├── cluster │ ├── cluster.go │ ├── getter.go │ ├── tcc │ │ ├── coordinator.go │ │ └── local_tx.go │ └── transaction.go ├── commands │ ├── hash.go │ ├── keys.go │ ├── list.go │ ├── set.go │ ├── sortedset.go │ ├── string.go │ └── tx_utils.go ├── engine │ ├── db.go │ ├── db_test.go │ ├── op_data.go │ ├── op_lock.go │ ├── op_ttl.go │ ├── router.go │ ├── transaction.go │ └── version.go ├── persistence.go ├── publish.go ├── publish │ ├── channel.go │ └── publish.go ├── rdb │ └── aof │ │ ├── aof.go │ │ └── rewrite.go ├── server.go ├── systemcmd.go └── transaction.go ├── datastruct ├── dict │ ├── concurrent_dict.go │ ├── concurrent_dict_test.go │ ├── dict.go │ └── simple_dict.go ├── list │ ├── iterator.go │ ├── list.go │ └── quick_list.go ├── lock │ └── lock_map.go ├── set │ ├── set.go │ └── simple_set.go └── sortedset │ ├── border.go │ ├── skiplist.go │ └── sortedset.go ├── docs ├── 1-TCP服务器.md ├── 2-客户端.md ├── 3-协议解析器.md ├── 4-数据结构之Hash表和LockMap.md ├── 5-数据结构之List和SortedSet.md ├── 6-simple-redis服务器.md ├── 7-底层数据库.md ├── 8-AOF持久化.md └── images │ └── 5-数据结构之List和SortedSet │ ├── 793413-20200503230748021-1515963822.png │ └── 793413-20200503230906423-1276062392.png ├── go.mod ├── go.sum ├── interface ├── cluster │ └── cluster.go ├── database │ └── db.go ├── redis │ ├── conn.go │ └── reply.go └── tcp │ └── handler.go ├── lib ├── consistenthash │ └── consistenthash.go ├── pool │ ├── pool.go │ └── pool_test.go ├── sync │ ├── atomic │ │ └── bool.go │ └── wait │ │ └── wait.go ├── timewheel │ ├── delay.go │ ├── timewheel.go │ └── timewheel_test.go └── utils │ ├── file.go │ ├── marshal.go │ └── utils.go ├── logger └── logger.go ├── main.go ├── redis ├── client │ └── client.go ├── connection │ ├── conn.go │ ├── fake_conn.go │ ├── publish.go │ └── transaction.go ├── parser │ ├── parse_test.go │ └── parser.go ├── protocol │ └── reply │ │ ├── bulk_string_reply.go │ │ ├── common.go │ │ ├── err_reply.go │ │ ├── int_reply.go │ │ ├── multi_bulk_string_reply.go │ │ └── status_reply.go └── server │ └── handler.go └── tcp └── server.go /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/* 2 | *.exe 3 | *.aof -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/README.md -------------------------------------------------------------------------------- /client.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/client.go -------------------------------------------------------------------------------- /cluster_config1.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/cluster_config1.yaml -------------------------------------------------------------------------------- /cluster_config2.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/cluster_config2.yaml -------------------------------------------------------------------------------- /cluster_config3.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/cluster_config3.yaml -------------------------------------------------------------------------------- /config.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/config.yaml -------------------------------------------------------------------------------- /config/config.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/config/config.go -------------------------------------------------------------------------------- /database/cluster/cluster.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/cluster/cluster.go -------------------------------------------------------------------------------- /database/cluster/getter.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/cluster/getter.go -------------------------------------------------------------------------------- /database/cluster/tcc/coordinator.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/cluster/tcc/coordinator.go -------------------------------------------------------------------------------- /database/cluster/tcc/local_tx.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/cluster/tcc/local_tx.go -------------------------------------------------------------------------------- /database/cluster/transaction.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/cluster/transaction.go -------------------------------------------------------------------------------- /database/commands/hash.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/commands/hash.go -------------------------------------------------------------------------------- /database/commands/keys.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/commands/keys.go -------------------------------------------------------------------------------- /database/commands/list.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/commands/list.go -------------------------------------------------------------------------------- /database/commands/set.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/commands/set.go -------------------------------------------------------------------------------- /database/commands/sortedset.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/commands/sortedset.go -------------------------------------------------------------------------------- /database/commands/string.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/commands/string.go -------------------------------------------------------------------------------- /database/commands/tx_utils.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/commands/tx_utils.go -------------------------------------------------------------------------------- /database/engine/db.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/engine/db.go -------------------------------------------------------------------------------- /database/engine/db_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/engine/db_test.go -------------------------------------------------------------------------------- /database/engine/op_data.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/engine/op_data.go -------------------------------------------------------------------------------- /database/engine/op_lock.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/engine/op_lock.go -------------------------------------------------------------------------------- /database/engine/op_ttl.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/engine/op_ttl.go -------------------------------------------------------------------------------- /database/engine/router.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/engine/router.go -------------------------------------------------------------------------------- /database/engine/transaction.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/engine/transaction.go -------------------------------------------------------------------------------- /database/engine/version.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/engine/version.go -------------------------------------------------------------------------------- /database/persistence.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/persistence.go -------------------------------------------------------------------------------- /database/publish.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/publish.go -------------------------------------------------------------------------------- /database/publish/channel.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/publish/channel.go -------------------------------------------------------------------------------- /database/publish/publish.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/publish/publish.go -------------------------------------------------------------------------------- /database/rdb/aof/aof.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/rdb/aof/aof.go -------------------------------------------------------------------------------- /database/rdb/aof/rewrite.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/rdb/aof/rewrite.go -------------------------------------------------------------------------------- /database/server.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/server.go -------------------------------------------------------------------------------- /database/systemcmd.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/systemcmd.go -------------------------------------------------------------------------------- /database/transaction.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/database/transaction.go -------------------------------------------------------------------------------- /datastruct/dict/concurrent_dict.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/datastruct/dict/concurrent_dict.go -------------------------------------------------------------------------------- /datastruct/dict/concurrent_dict_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/datastruct/dict/concurrent_dict_test.go -------------------------------------------------------------------------------- /datastruct/dict/dict.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/datastruct/dict/dict.go -------------------------------------------------------------------------------- /datastruct/dict/simple_dict.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/datastruct/dict/simple_dict.go -------------------------------------------------------------------------------- /datastruct/list/iterator.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/datastruct/list/iterator.go -------------------------------------------------------------------------------- /datastruct/list/list.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/datastruct/list/list.go -------------------------------------------------------------------------------- /datastruct/list/quick_list.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/datastruct/list/quick_list.go -------------------------------------------------------------------------------- /datastruct/lock/lock_map.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/datastruct/lock/lock_map.go -------------------------------------------------------------------------------- /datastruct/set/set.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/datastruct/set/set.go -------------------------------------------------------------------------------- /datastruct/set/simple_set.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/datastruct/set/simple_set.go -------------------------------------------------------------------------------- /datastruct/sortedset/border.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/datastruct/sortedset/border.go -------------------------------------------------------------------------------- /datastruct/sortedset/skiplist.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/datastruct/sortedset/skiplist.go -------------------------------------------------------------------------------- /datastruct/sortedset/sortedset.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/datastruct/sortedset/sortedset.go -------------------------------------------------------------------------------- /docs/1-TCP服务器.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/docs/1-TCP服务器.md -------------------------------------------------------------------------------- /docs/2-客户端.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/docs/2-客户端.md -------------------------------------------------------------------------------- /docs/3-协议解析器.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/docs/3-协议解析器.md -------------------------------------------------------------------------------- /docs/4-数据结构之Hash表和LockMap.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/docs/4-数据结构之Hash表和LockMap.md -------------------------------------------------------------------------------- /docs/5-数据结构之List和SortedSet.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/docs/5-数据结构之List和SortedSet.md -------------------------------------------------------------------------------- /docs/6-simple-redis服务器.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/docs/6-simple-redis服务器.md -------------------------------------------------------------------------------- /docs/7-底层数据库.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/docs/7-底层数据库.md -------------------------------------------------------------------------------- /docs/8-AOF持久化.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/docs/8-AOF持久化.md -------------------------------------------------------------------------------- /docs/images/5-数据结构之List和SortedSet/793413-20200503230748021-1515963822.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/docs/images/5-数据结构之List和SortedSet/793413-20200503230748021-1515963822.png -------------------------------------------------------------------------------- /docs/images/5-数据结构之List和SortedSet/793413-20200503230906423-1276062392.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/docs/images/5-数据结构之List和SortedSet/793413-20200503230906423-1276062392.png -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/go.mod -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/go.sum -------------------------------------------------------------------------------- /interface/cluster/cluster.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/interface/cluster/cluster.go -------------------------------------------------------------------------------- /interface/database/db.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/interface/database/db.go -------------------------------------------------------------------------------- /interface/redis/conn.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/interface/redis/conn.go -------------------------------------------------------------------------------- /interface/redis/reply.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/interface/redis/reply.go -------------------------------------------------------------------------------- /interface/tcp/handler.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/interface/tcp/handler.go -------------------------------------------------------------------------------- /lib/consistenthash/consistenthash.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/lib/consistenthash/consistenthash.go -------------------------------------------------------------------------------- /lib/pool/pool.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/lib/pool/pool.go -------------------------------------------------------------------------------- /lib/pool/pool_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/lib/pool/pool_test.go -------------------------------------------------------------------------------- /lib/sync/atomic/bool.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/lib/sync/atomic/bool.go -------------------------------------------------------------------------------- /lib/sync/wait/wait.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/lib/sync/wait/wait.go -------------------------------------------------------------------------------- /lib/timewheel/delay.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/lib/timewheel/delay.go -------------------------------------------------------------------------------- /lib/timewheel/timewheel.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/lib/timewheel/timewheel.go -------------------------------------------------------------------------------- /lib/timewheel/timewheel_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/lib/timewheel/timewheel_test.go -------------------------------------------------------------------------------- /lib/utils/file.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/lib/utils/file.go -------------------------------------------------------------------------------- /lib/utils/marshal.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/lib/utils/marshal.go -------------------------------------------------------------------------------- /lib/utils/utils.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/lib/utils/utils.go -------------------------------------------------------------------------------- /logger/logger.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/logger/logger.go -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/main.go -------------------------------------------------------------------------------- /redis/client/client.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/redis/client/client.go -------------------------------------------------------------------------------- /redis/connection/conn.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/redis/connection/conn.go -------------------------------------------------------------------------------- /redis/connection/fake_conn.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/redis/connection/fake_conn.go -------------------------------------------------------------------------------- /redis/connection/publish.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/redis/connection/publish.go -------------------------------------------------------------------------------- /redis/connection/transaction.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/redis/connection/transaction.go -------------------------------------------------------------------------------- /redis/parser/parse_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/redis/parser/parse_test.go -------------------------------------------------------------------------------- /redis/parser/parser.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/redis/parser/parser.go -------------------------------------------------------------------------------- /redis/protocol/reply/bulk_string_reply.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/redis/protocol/reply/bulk_string_reply.go -------------------------------------------------------------------------------- /redis/protocol/reply/common.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/redis/protocol/reply/common.go -------------------------------------------------------------------------------- /redis/protocol/reply/err_reply.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/redis/protocol/reply/err_reply.go -------------------------------------------------------------------------------- /redis/protocol/reply/int_reply.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/redis/protocol/reply/int_reply.go -------------------------------------------------------------------------------- /redis/protocol/reply/multi_bulk_string_reply.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/redis/protocol/reply/multi_bulk_string_reply.go -------------------------------------------------------------------------------- /redis/protocol/reply/status_reply.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/redis/protocol/reply/status_reply.go -------------------------------------------------------------------------------- /redis/server/handler.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/redis/server/handler.go -------------------------------------------------------------------------------- /tcp/server.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dawnzzz/simple-redis/HEAD/tcp/server.go --------------------------------------------------------------------------------