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构建一种服务,很方便,很简单,很有意思。
一些原本复杂或需要更多时间才能完成的事情正在变得更容易
领取专属 10元无门槛券
私享最新 技术干货