Redis学习路线
Redis: A persistent key-value database with built-in net interface written in ANSI-C for Posix systems. Redis是现在很火的高性能KV内存数据库,支持丰富的数据类型,支持持久化、数据同步等DB特性。Redis是开源的,代码量不大2W+,代码风格和实现都很值得学习。在开源的时代,模仿好代码估计是最快的学习方式。
使用
推荐如下资料:
【redis学习总结】【http://blog.csdn.net/wudongxu/article/details/7005830】
实现
推荐如下资料:
Redis RDB文件格式全解析,英文:https://github.com/sripathikrishnan/redis-rdb-tools/wiki/Redis-RDB-Dump-File-Format
可复用代码(版本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学习路线的更多相关文章
- Redis 学习资料目录(Important)
redis学习路线: 以下是整理的学习redis优秀博客和优秀网站 一.原理: 1. redis命令在线操作 http://try.redis.io/ 2. 中文命令解释: Redis 命令参考 - ...
- Redis(二)特性和学习路线
Redis是高效的内存数据库或者说缓存.对多种数据结构都支持,每种数据结构都有相应的应用场景. 特性 Redis支持非常多的特性,从用途.性能.高可用.数据安全方面都提供了相应的支持和保障. Redi ...
- 一位资深程序员大牛给予Java初学者的学习路线建议
java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈 ...
- redis学习之二from github
大概敲了一遍基本命令,熟悉了redis的存储方式.现在开始进一步系统的学习.学习教程目前计划有三个,一个是github上的https://github.com/JasonLai256/the-litt ...
- 一位资深程序员给予Java初学者的学习路线建议
一位资深程序员给予Java初学者的学习路线建议 java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干 ...
- MySQL(一) -- MySQL学习路线、数据库的基础、关系型数据库、关键字说明、SQL、MySQL数据库、MySQL服务器对象、SQL的基本操作、库操作、表操作、数据操作、中文数据问题、 校对集问题、web乱码问题
1 MySQL学习路线 基础阶段:MySQL数据库的基本操作(增删改查),以及一些高级操作(视图.触发器.函数.存储过程等). 优化阶段:如何提高数据库的效率,如索引,分表等. 部署阶段:如何搭建真实 ...
- 我推荐的 Java Web 学习路线
晚上再 V2 的 Java 的节点看到有人问 Java Web 书籍推荐.我这半年多的时间,也从别的方向开始转向 Java 服务端开发,所以,我来说下我的学习路线,帮助有需要的朋友把半只脚踏进 Spr ...
- 转载:一位资深程序员大牛给予Java初学者的学习路线建议
一位资深程序员大牛给予Java初学者的学习路线建议 java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打 ...
- PHP开发程序员的学习路线
PHP开发程序员的学习路线 兄弟连PHP培训,简单为大家梳理了每个阶段PHP程序员的技术要求,来帮助很多PHP程序做对照设定学习成长目标. 第一阶段:基础阶段(基础PHP程序员) 重点:把LNMP搞熟 ...
随机推荐
- python系列十三:Python3 输入输出
#!/usr/bin/python #Python3 输入输出 import math'''输出格式美化Python两种输出值的方式: 表达式语句和 print() 函数.第三种方式是使用文件对象的 ...
- element-ui中下拉菜单中的@click事件不会触发的问题
只需要将@click=“fun()”改为@click.native=“fun()”,即可监听下拉菜单的点击事件. 如图所示: 嗯,就酱~
- python中os模块函数方法详解最全最新
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 import os print(os.getcwd()) os.chdir("dirname") 改 ...
- jQuery实现复选框全选、全不选、反选问题解析
今天打算用jQuery实现一下复选框的全选.全不选和反选问题,刚开始用的是attr("checked",true/false)方法,发现只能在最开始实现一次全选,可以实现全不选,无 ...
- Bridge Method
1.java编译器采用Bridge Method 来兼容本该使用泛型的地方使用了非泛型的问题. public class TestBridgeMethod { public static void m ...
- 异常:Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005.
异常:Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} ...
- Django 之基础续
1.路由系统之动态路由 前言:还记得之前的分页效果,这个如何实现呢?答案就是动态路由. url(r'^detail/(\d+)/$', views.detail), url(r'^detail2/(\ ...
- Raspberry Pi开发之旅-远程监控
1.安装辅助工具 1 2 sudo apt-get install libjpeg8-dev sudo apt-get install cmake 2.编辑源文件 1 2 sudo git clone ...
- 常用的机器学习&数据挖掘知识点
Basis(基础):MSE(Mean Square Error 均方误差),LMS(LeastMean Square 最小均方),LSM(Least Square Methods 最小二乘法),MLE ...
- SOA 面向服务架构 阅读笔记(四)
15 SOA管理 15.1 管理指的是实现一个制约和平衡的一致过程,以确保得到期望的结果. 15.2 管理被广泛应用于人工流程和软件流程中,一旦管理失败,后果会非常严重. 15.3 SOA管理的首要 ...