经过和前辈交流并结合自己的反思觉得去阅读一些质量比较好的源码是提升自己能力非常重要的一环,所以决定要去读一些好的源码。
在选择哪一段代码来阅读的时候我需要考虑几个重要因素:
- 时间成本(要做的事情太多)
- 阅读难易程度
- 代码量(也是出于时间成本的考虑)
- 与自己准备做的要有些相关性
- 相关文档资料、博客比较多,最好有很多人在阅读讨论这段代码
结合这些因素考虑之后,我觉得Redis的源码阅读对我来说比较合适。代码量基本在五万行之内,而且这个代码阅读的人很多,讨论的人很多,还有很多相关的书籍。难度目前还不好评估。而Redis作为开源的,C语言开发的,key-value型数据库,良好的开发氛围和严谨的版本发布机制使得Redis的稳定版非常可靠,对Redis以后的发展还是很看好的,所以去扒一遍它的源码我觉得还是很有意义的。
简介
Redis是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如:字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)与范围查询,bitmaps,hyperloglogs和地理空间(geospatial)索引半径查询。Redis内置了:复制(replication),LUA脚本(Lua scripting),LRU驱动事件(LRU eviction),事务(transactions)和不同级别的磁盘持久化(persistence),并通过Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(high availability)。
总结一下,Redis是一个开源的、高性能、基于键值对的缓存和存储系统,通过提供多种键值数据类型来适应不同场景下的缓存和存储需求。
特性之存储结构
Redis的存储结构与字典、映射或称关联数组这样的数据结构比较类似,比如
dict["key"] = "value";
其中dict就是一个字典结构变量,字符串”key”是键名,而”value”是键值,在字典中我们可以设置或者获取键名对应的键值,也可以删除一个键。
Redis支持多种键值数据类型,到目前为止包括的数据类型如下:
- 字符串类型
- 散列类型
- 列表类型
- 集合类型
- 有序集合类型
特性之内存存储和持久化
Redis数据库中所有的数据都存储在内存中,由于内存的读写速度远远快于硬盘,因此,Redis在性能上对比其他基于硬盘的数据库有着很不错的优势。
将数据存储在内存中也有问题,当程序退出后内存中的数据会丢失。不过Redis提供了对持久化的支持,即可以将内存中的数据异步写入硬盘中,同时不影响继续提供服务。
部署Redis到CentOS下
- 环境及安装包
- CentOS release 6.5 (Final)
- Linux version 2.6.32-504.30.3.el6.x86_64 (mockbuild@c6b8.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) )
- redis-3.0.7.tar.gz (注:在安装Redis前需要了解Redis的版本规则以选择最适合自己的版本,Redis约定次版本号为偶数时的版本是稳定版,奇数是非稳定版,生产环境下一般需要使用稳定版本。本文选择了较新的稳定版本3.0.7)
检查安装依赖程序
1
2
3yum install gcc-c++
yum install -y tcl
yum install wget获取源码
1
wget http://download.redis.io/releases/redis-3.0.7.tar.gz
解压源码
1
2tar -xvzf redis-3.0.7.tar.gz
mv redis-3.0.7 /usr/local/redis编译安装
1
2
3cd /usr/local/redis
make
make install设置配置文件路径
1
2mkdir -p /etc/redis
cp redis.conf /etc/redis修改配置文件
1
vim /etc/redis/redis.conf
在conf文件里,将daemonize 改为yes(即no -> yes)
启动
1
local redis-server redis/redis.conf
查看启动
1
ps -ef | grep redis
使用客户端
1
2
3
4
5redis-cli
127.0.0.1:6379> set key value
OK
127.0.0.1:6379> get value
"value"关闭客户端
1
redis-cli shutdown
开启启动配置
1
echo "/usr/local/bin/redis-server /etc/redis/redis.conf &" /etc/rc.local
开启启动要配置在rc.local中,而/etc/profile文件,需要有用户登录了,才会被执行。
至此,我们就可以在本机上测试Redis基本指令了。
参考文献
- Redis中文官方网站
- Redis入门指南,李子骅
- 查看centos系统版本命令
- CentOS6 安装 Redis