一、關於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 為字節流: