探索Redis:开源数据库的便捷入门指南

发表时间: 2018-11-26 01:33

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

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

  1. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  2. Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  3. Redis支持数据的备份,即master-slave模式的数据备份。

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

参考资料


中文官网

http://www.redis.net.cn/

英文官网

https://redis.io/

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

Redis安装介绍


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

wget http://download.redis.io/redis-stable.tar.gztar xvzf redis-stable.tar.gzcd redis-stablemakesudo 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" commandbind 172.11.30.9 //需要绑定的IP地址,给外网使用的IP,具体看自己电脑bind 127.0.0.1protected-mode noredis-server /path/to/redis.conf & //可以将这句加入rc.local中,否则重启后不会自动启动redis-server

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

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


import redis# host是redis主机,需要redis服务端和客户端都启动 redis默认端口是6379pool = 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默认端口是6379pool = 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构建一种服务,很方便,很简单,很有意思。


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