七种武器之一口箱子Redis

redis

Redis是目前最流行的key-value数据库,但是绝不仅限于此。

江湖传言「在任何规模、任何类型的服务器项目中,都存在一些最适合用Redis存储的数据。」

Redis上手快

从下载到安装一个Redis只需要五步,而且每一步都在自己的控制之内,不需要下载任何外部依赖,手写的Makefile,清晰明亮的目录结构。

redis安装

可以毫不夸张的说,Redis在任何类linux操作系统上从来就没有安装失败的时候。安装完成后启动只需要运行一个redis-server 命令就可以了。

Redis命令简单优雅

一个系统就算功能再丰富,如果使用起来太复杂也很难吸引人。Redis常用的一些命令都很短,格式固定,而且都非常好记,比如SET,GET,LPUSH,RPOP,操作上几次基本就可以裸写Redis常用命令了。

Redis数据结构丰富

Redis如此流行的原因之一便是在简单的key value之外还提供了另外四种常见常用的数据类型,而且提供了各种各样在这些数据类型上的原子操作。

String 字符串,最基础的类型,可以存储字符串,这里的字符串可以是二进制字符串,也就是说可以把整个图片或者整首歌直接存进去。

List 列表,可以当栈可以当队列,只要几行代码,一个生产者消费者的消息队列就完成了。

Hash 散列表,可以存储对象的各种属性和值。

Set 集合,存储不重复的元素,比如博客文章的各种标签就可以存到集合中。

Sorted Set 有序集合。

这样Redis就不仅局限于一个普通的Key-Value数据库,还可以当作一个现成的数据结构库来使用,基于Unix Socket接口,接入本地的C程序,性能和直接函数调用差不了太多的。

虽然目前大部分的高级语言基本都提供了内置的相关数据结构,但是还是可以外接一个Redis,程序挂了之后数据还在,可以保存现场继续运行。

Redis扩展性好

嵌入了Lua虚拟机,可以通过lua脚本来定制自己的命令。

redis-lua

Redis保证整个lua脚本的执行是原子操作。

Lua虚拟机给了Redis无限扩展的能力,很多牛逼的小工具都会去裹上一个lua的虚拟机作为自定义扩展的插件机制。

Redis可控性强

Redis完全采用ANSI C写成,麻雀虽小,五脏俱全,只有4万行C代码。

Redis源代码涉及到了网络,文件操作,事务相关,集群功能,单元测试,状态监控,消息队列,缓存机制,还有各种各样的小工具。

一旦出了问题,可以使用GDB来直接单步跟踪调试,没有出了问题搞不定只能重启机器的问题。

甚至可以自己修改Redis的源代码来实现自己想要的一些特性或者达到特定应用场景下更高的性能。

Redis的源代码可以作为linux系统编程的最优秀源代码教材之一,配合着Richard Stevens的《Unix环境高级编程》来看简直不要太酸爽,可以算是《Unix环境高级编程》的最佳实践。

Redis客户端丰富

得益于Redis通信协议的简单明了,各种语言的各种风格的Redis客户端不下百个,总有一款适合你。

哪怕你还在用VB编写程序。

redis client

使用lpush和brpop命令十几行代码就可以实现一个阻塞式的生产者消费者队列。

生产者:每隔2秒忘redis队列中写入一个随机生成的英文名字。

# -*- coding: utf-8 -*-
import redis
import names
import time

r = redis.StrictRedis(host='localhost', port=6379, db=0)

while True:
    time.sleep(2)
    name = names.get_full_name()
    x = r.lpush('names', name)
    print x, name

消费者:一旦队列中有数据就取出处理,如果没有就阻塞等待。

# -*- coding: utf-8 -*-
import redis

r = redis.StrictRedis(host='localhost', port=6379, db=0)

def consume(key):
    while True:
        value = r.brpop(key)
        yield value

for v in consume('names'):
    print v

就是如此简单优雅

Redis中文资料多

Redis各种类型的中文资料很多,已经出版的图书质量也都挺不错。

推荐自己读过的两本。

redis books

初学者学习入门《Redis入门指南》,通过各种应用实践案例介绍Redis的典型应用场景,简单朴实,深入浅出,是不可多得的好书。

针对Redis内部实现的书推荐《Redis设计与实现》,系统全面的介绍了Redis内部的数据结构和各种特性的具体实现方式。可以先读一遍这本书,然后再对照着书去读Redis源代码。


如果你也欣赏Redis,欢迎留言。

下一篇会聊聊lua虚拟机,lua虚拟机绝对当得起七种武器中的「孔雀翎」,天下三百六十余种暗器中最成功最可怕的一种。

关于古龙七种武器中的第七种武器争议一直不断,相对于有点牵强的「拳头」个人更倾向于英雄无泪中另一件无名的奇门神器「一口箱子」

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏HaHack

comment.js:一个纯JS实现的静态站点评论系统

2544
来自专栏Python中文社区

Python 3.6实现单博主微博文本、图片及热评爬取

文章简介 经常刷微博的同学肯定会关注一些有比较意思的博主,看看他们发的文字、图片、视频和底下评论,但时间一长,可能因为各种各样的原因,等你想去翻看某个博主的某...

6256
来自专栏哲学驱动设计

“秒杀”心得

    本文记录对某网站A的秒杀活动编写秒杀器的经历和技术重点。 故事回顾     某日早上,朋友给我说最近A网站在开展秒杀活动,有IPad、IPhone,让大...

3218
来自专栏coding

这一次,真正掌握composercomposer是现代PHP的基石初识composercomposer包管理规范

现代高级编程语言,依赖管理工具是必不可少的。Java有Maven,Python有pip,Nodejs有npm, 而在composer出现之前,PHP只有被广为诟...

2062
来自专栏ytkah

保存一下dedecms数据库表和字段说明,方便日后查询

玩dedecms有一段时间,对它的字段不是很了解,在此做个记录,方便日后查询 dede数据库字段说明: dede_addonarticle 附加文章...

2774
来自专栏七夜安全博客

(原创)python爬取慕课网视频

2704
来自专栏hotqin888的专栏

beego web提高后端速度的尝试——改循环查询数据库为递归算法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

2292
来自专栏Linyb极客之路

低延迟系统的最佳实践

低延迟意味着更快的响应时间,更快的性能,以下最佳实践大部分来自于Quora等问题提炼:

1492
来自专栏移动端周边技术扩展

移动端常用数据库

2794
来自专栏Java帮帮-微信公众号-技术文章全总结

java中调用web service接口

1.首先要把AXIS包里的jar文件放到java项目的lib目录下,这里用的是AXIS1_4版本

2542

扫码关注云+社区

领取腾讯云代金券