Redis 是一個key-value存儲系統。和Memcached相似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操做,並且這些操做都是原子性的。在此基礎上,redis支持各類不一樣方式的排序。與memcached同樣,爲了保證效率,數據都是緩存在內存中。區別的是redis會週期性的把更新的數據寫入磁盤或者把修改操做寫入追加的記錄文件,而且在此基礎上實現了master-slave(主從)同步。python
Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合能夠對關係數據庫起到很好的補充做用。它提供了Python,Ruby,Erlang,PHP客戶端,使用很方便,Redis支持主從同步。數據能夠從主服務器向任意數量的從服務器上同步,從服務器能夠是關聯其餘從服務器的主服務器。這使得Redis可執行單層樹複製。磁盤能夠有意無心的對數據進行寫操做。因爲徹底實現了發佈/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道並接收主服務器完整的消息發佈記錄。redis
[root@redis-120-20 ~]# pip3 install redis
redis提供兩個類Redis和StrictRedis用於實現Redis的命令,StrictRedis用於實現大部分官方的命令,並使用官方的語法和命令,Redis是StrictRedis的子類,用於向後兼容舊版本的redis-py。數據庫
redis鏈接實例是線程安全的,能夠直接將redis鏈接實例設置爲一個全局變量,直接使用。若是須要另外一個Redis實例(or Redis數據庫)時,就須要從新建立redis鏈接實例來獲取一個新的鏈接。同理,python的redis沒有實現select命令。緩存
# 第一種方式:普通
importredis
redis_conn= redis.Redis(host='172.17.120.20', port= 6301, password= 'rds6301_paswd', db= 0)
# 第二種方式:鏈接池
importredis
redis_pool= redis.ConnectionPool(host='127.0.0.1', port= 6379, password= 'rds6301_paswd', db= 0)
redis_conn= redis.Redis(connection_pool= redis_pool)
# redis_conn.set(key,value)
redis_conn.set('ywm', 'test1')
# hmset key FIELD1 VALUE1 ...FIELDN VALUEN
redis_conn.hmset('ywm6', {'k1':'v1', 'k2': 'v2'})
r.set('book','Mastering Redis')
r.getrange('book',0,5) # 結果 Master
r.getrange('book',-5,-1) # 結果 Redis
r.getrange('book',0,-7) # 結果 Mastering
# redis_conn.get(key)
redis_conn.get('ywm')
# hmset key FIELD1 ...FIELDN
redis_conn.hmget('ywm6', 'k1', 'k2')
# set(name, value, ex=None, px=None, nx=False, xx=False)
ex:過時時間(秒),時間到了後redis會自動刪除
px:過時時間(毫秒),時間到了後redis會自動刪除。ex、px二選一便可
nx:若是設置爲True,則只有name不存在時,當前set操做才執行
xx:若是設置爲True,則只有name存在時,當前set操做才執行
redis_conn.set('ywm', 'test2', ex=10)
# redis_conn.set(key,n)
redis_conn.set('ywm', '5')
redis_conn.incr('ywm', '1') #自增1
redis_conn.decr('ywm', '3') #自減3
importredis
importdatetime
redis_conn= redis.Redis(host='172.17.120.20', port= 6301, password= 'rds6301_paswd', db= 1)
now= datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
redis_conn.set('ywm',now)
redis_conn.set('book','Mastering Redis')
redis_conn.setrange('book',10,'MongoDB') # Redis替換後爲MongoDB
redis_conn.setrange('book',20,'2017') # 空白處被"\x00"填充
redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
redis_conn.hlen("dic_name")
redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
redis_conn.hkeys("dic_name")
redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
redis_conn.hvals("dic_name")
redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
redis_conn.hexists("dic_name","a1") #輸出:True
redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
redis_conn.hdel("dic_name","a1")
redis_conn.hincrby("demo","a",amount=2)