使用Python讀寫Redis字符串

一、簡介

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

二、安裝 Python 的 redis-py庫

 [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_connredis.Redis(host='172.17.120.20'port6301password'rds6301_paswd'db0)
 # 第二種方式:鏈接池
 importredis
 redis_poolredis.ConnectionPool(host='127.0.0.1'port6379password'rds6301_paswd'db0)
 redis_connredis.Redis(connection_poolredis_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

十一、向redis中添加一個字符串,key爲kingname,value爲如今時間

 importredis
 importdatetime
 redis_connredis.Redis(host='172.17.120.20'port6301password'rds6301_paswd'db1)
 nowdatetime.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"填充

1三、獲取hash中鍵值對的個數

 redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
 redis_conn.hlen("dic_name")

1四、獲取hash中全部的key的值

 redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
 redis_conn.hkeys("dic_name")

1五、獲取hash中全部的value的值

 redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
 redis_conn.hvals("dic_name")

1六、檢查name對應的hash是否存在當前傳入的key

 redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
 redis_conn.hexists("dic_name","a1"#輸出:True

1七、刪除指定name對應的key所在的鍵值對

 redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
 redis_conn.hdel("dic_name","a1")

1八、自增hash中key對應的值,不存在則建立key=amount(amount爲整數)

 redis_conn.hincrby("demo","a",amount=2)
相關文章
相關標籤/搜索