python浅学【网络服务中间件】之Redis
一、关于NoSQL:
NoSQL(NoSQL = Not Only SQL ),"不仅仅是SQL"。
相比MySQL等关系型数据库,NoSQL为非关系型的数据存储
Nosql中比较火的三个数据库有:Redis、Memchache、MongoDb。
为什么使用NoSQL:
为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
易扩展性:NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间也在架构的层面上带来了可扩展的能力。
高性能性:NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。
二、关于Redis:
REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
与memcached的对比:
三、redis简单操作:
以windows下为例:
连接redis:> redis-cli.exe -h host -p port -a password # 不输入则为默认连接
PS D:\redis> .\redis-cli.exe
127.0.0.1:6379> ping # 查询redis服务是否开通 PONG 127.0.0.1:6379> set test hello # 设置key的value OK 127.0.0.1:6379> get test # 查询key "hello" 127.0.0.1:6379> set test hi # 再次设置key即更改 OK 127.0.0.1:6379> get test "hi" 127.0.0.1:6379> del test # 删除key (integer) 1 127.0.0.1:6379> get test (nil)
四、使用python实现redis发布订阅功能:
连接redis:
import redis sr = StrictRedis(host='localhost',port=6379,db=0) #不输入为默认连接
发布资讯:
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Riy import redis client = redis.Redis() channels = ["NoSQL", "redis"] def main(): print("可以发布到任意一个频道:") for i in channels: print(i) while True: ch = input("输入频道:") print("输入发送的信息(q:退出)") msg = input(">>") if msg == 'q': break client.publish(ch, msg) if __name__ == '__main__': main()
订阅资讯:
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Riy import redis client = redis.StrictRedis(decode_responses=True) # 设置编码,不设置则为字节流 s = client.pubsub() name = input('选择监听频道:') s.subscribe(name) print('开始监听......\n') for item in s.listen(): if item['type'] == 'message': print (item)
设置 decode_responses = True 收到的中文信息:
不设置则收到的 data 为字节流: