介绍一个易学易用的开源数据库:Redis

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

Redis支持数据的备份,即master-slave模式的数据备份。

从上面的介绍就可以看出,更传统的sql相比很简单,用不上复杂的select语句。支持的数据类型也很常见和简单,key-value,list,set,hash等都是平时非常常见的编程数据结构,感觉更容易学习。笔者以前没有专门学习过数据库,基于此想感受下Redis。那就开始学习和感受下吧。

参考资料

中文官网

英文官网

https://redis.io/

权威的资料在中英文官网中可以找到。

Redis安装介绍

笔者的安装过程如下(基于CentOS),可参考,比较简单

cd redis-stable

make

sudo cp src/redis-server /usr/local/bin/

sudo cp src/redis-cli /usr/local/bin/

//Or just using sudo make install.

cp redis.conf /path/to/redis.conf //复制一份配置文件都/path/to目录

//modify /path/to/redis.conf, can find ip by input "ifconfig" command

bind 172.11.30.9 //需要绑定的IP地址,给外网使用的IP,具体看自己电脑

bind 127.0.0.1

protected-mode no

redis-server /path/to/redis.conf & //可以将这句加入rc.local中,否则重启后不会自动启动redis-server

默认是监听在6379端口的,当然也可以自定义端口,需要修改redis.conf。

写个简单Demo测试下Redis服务器

import redis

# host是redis主机,需要redis服务端和客户端都启动 redis默认端口是6379

pool = redis.ConnectionPool(host='127.0.0.1', port=6379, decode_responses=True)

r = redis.Redis(connection_pool=pool)

r.set('who', 'ggang') # key是"who" value是"ggang" 将键值对存入redis缓存

print(r.get('who')) # 取出键name对应的值

print(type(r.get('who')))

看看执行结果,使用很简单。

再看看Redis的优势

性能极高:

-Redis能读的速度是110000次/s,写的速度是81000次/s 。

丰富的数据类型:

-Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

原子:

-Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。

丰富的特性:

-Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储有什么不同?

Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的另一个优点是, 相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

再回头看下前面的Demo,r.set()只是将数据存入内存

import redis

# host是redis主机,需要redis服务端和客户端都启动 redis默认端口是6379

pool = redis.ConnectionPool(host='127.0.0.1', port=6379, decode_responses=True)

r = redis.Redis(connection_pool=pool)

r.set('who', 'ggang') # key是"who" value是"ggang" 将键值对存入redis缓存

print(r.get('who')) # 取出键name对应的值

print(type(r.get('who')))

r.save()#为了使数据持久化,需要将数据保存入磁盘,执行r.save()

保存入磁盘后,数据就不会丢失。而保存数据的策略是可以在redis.conf中配置的,这里的例子只是演示下。

如果感兴趣,可以进行更深入的学习和研究。可以结合tornado构建一种服务,很方便,很简单,很有意思。

一些原本复杂或需要更多时间才能完成的事情正在变得更容易

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180226G15NZC00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券