Redis学习
2016-08-30 00:33
330 查看
Redis: A persistent key-value database with built-in net interface written in ANSI-C for Posix systems. Redis是现在很火的高性能KV内存数据库,支持丰富的数据类型,支持持久化、数据同步等DB特性。Redis是开源的,代码量不大2W+,代码风格和实现都很值得学习。在开源的时代,模仿好代码估计是最快的学习方式。
推荐如下资料:
Redis系统性介绍
一个很棒的Redis介绍PPT
Redis官方文档
推荐如下资料:
Redis内存存储结构分析
Redis RDB文件格式全解析,英文:https://github.com/sripathikrishnan/redis-rdb-tools/wiki/Redis-RDB-Dump-File-Format
协议规范(Protocol specification)
Redis: under the hood
解密Redis持久化
Replication
Redis官方文档
zmalloc.h, zmalloc.c
ae.c ae_epoll.c ae_evport.c ae.h ae_kqueue.c ae_select.c
anet.h, anet.c, syncio.c(阻塞式读写)
adlist.h, adlist.c (通用双向链表), ziplist.h, ziplist.c, zipmap.h, zipmap.c, intset.h, intset.c(基于连续内存的小数据存储结构), sds.h, sds.c(Binary Safe字符串)
lzf -- an extremely fast/free compression/decompression-method: http://liblzf.plan9.de/
lzf_c.c lzf_d.c lzf.h lzfP.h
rio.h, rio.c
crc64.c, endianconv.h, endianconv.c(将大端数据转成小端,性能考虑), memtest.c(内存测试工具), pqsort.h, pqsort.c(部分快排), rand.h, rand.c, sha1.c, sha1.h(开源的sha), util.c, util.h(字符串匹配,字符串和整形数转换)
Redis采用可读可组合的文本协议。Redis采用统一的命令格式,基于统一的规范命令Redis天生具备解析和执行多条命令的能力,因此Redis非常容易支持:批量命令、事务、原子操作(脚本原子操作)等。
Redis的设计需要做各种权衡,每一种权衡都意味着不同的实现方案、资源、性能的折中。Redis不可能适合所有的使用场景,作为KV的内存数据库,Redis做了很多针对性设计:高性能优先、高内存使用效率、多样的数据结构(内存易实现)、单线程读写(CPU非瓶颈)、数据快照(RDB文件)、可过期的数据,同时提供其他可配置的功能:AOF(日志)、可配置的小数据格式、主从Replication、严格内存限制或swap、LRU缓存、磁盘存储等。
Redis Administration
FAQ
memory-optimization
Redis资料汇总专题
使用
推荐如下资料:Redis系统性介绍
一个很棒的Redis介绍PPT
Redis官方文档
实现
推荐如下资料:Redis内存存储结构分析
Redis RDB文件格式全解析,英文:https://github.com/sripathikrishnan/redis-rdb-tools/wiki/Redis-RDB-Dump-File-Format
协议规范(Protocol specification)
Redis: under the hood
解密Redis持久化
Replication
Redis官方文档
可复用代码(版本2.6.3)
malloc封装():tcmalloc|jemalloc|libc 使用最佳的malloc封装,libc的malloc不提供获取分配内存大小的接口。
zmalloc.h, zmalloc.c
异步网络库:封装各种事件组件,提供统一的接口。
ae.c ae_epoll.c ae_evport.c ae.h ae_kqueue.c ae_select.c
TCP|UNIX网络封装: 很简单的封装。
anet.h, anet.c, syncio.c(阻塞式读写)
数据结构
adlist.h, adlist.c (通用双向链表), ziplist.h, ziplist.c, zipmap.h, zipmap.c, intset.h, intset.c(基于连续内存的小数据存储结构), sds.h, sds.c(Binary Safe字符串)
lzf压缩算法
lzf -- an extremely fast/free compression/decompression-method: http://liblzf.plan9.de/lzf_c.c lzf_d.c lzf.h lzfP.h
文件读写: 封装基于文件和内存的数据读写。
rio.h, rio.c
工具
crc64.c, endianconv.h, endianconv.c(将大端数据转成小端,性能考虑), memtest.c(内存测试工具), pqsort.h, pqsort.c(部分快排), rand.h, rand.c, sha1.c, sha1.h(开源的sha), util.c, util.h(字符串匹配,字符串和整形数转换)
设计
灵活协议
Redis采用可读可组合的文本协议。Redis采用统一的命令格式,基于统一的规范命令Redis天生具备解析和执行多条命令的能力,因此Redis非常容易支持:批量命令、事务、原子操作(脚本原子操作)等。
权衡
Redis的设计需要做各种权衡,每一种权衡都意味着不同的实现方案、资源、性能的折中。Redis不可能适合所有的使用场景,作为KV的内存数据库,Redis做了很多针对性设计:高性能优先、高内存使用效率、多样的数据结构(内存易实现)、单线程读写(CPU非瓶颈)、数据快照(RDB文件)、可过期的数据,同时提供其他可配置的功能:AOF(日志)、可配置的小数据格式、主从Replication、严格内存限制或swap、LRU缓存、磁盘存储等。
小技巧
Redis AdministrationFAQ
memory-optimization
其他资料
Redis资料汇总专题
相关文章推荐
- [译]Redis Cookbook(3.1)
- [译]Redis Cookbook(3.2)
- [译]Redis Cookbook(3.3)
- redis之adlist
- redis演练(3) redis事务管理
- Redis原理和简单实用场景
- Windows下Redis的安装使用
- java对redis的基本操作
- 支持持久化的内存数据库-----Redis
- Redis Sentinel Failover判定 源码探寻
- Redis 3.0分布式集群
- 谈谈Redis的SETNX
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(八) 之 用 Redis 实现用户在线离线状态消息处理
- 在使用Redis的客户端连接工具ServiceStack.Redis要注意的问题
- CentOS7 Redis安装
- Redis事务介绍
- 分布式缓存技术redis学习系列(五)——spring-data-redis与JedisPool的区别、使用ShardedJedisPool与spring集成的实现及一致性哈希分析
- Redis常见应用场景介绍
- 简单Redis搭建
- Redis的文档