程序下載http://down.51cto.com/data/2440789:python
點擊客戶端進行鏈接測試,出現下圖說明測試成功redis
語法:微信
redis的字符串操做 set(key,value,ex=None,px=None,nx=False,xx=False) 在redis中設置值,默認,不存在則建立,存在則修改 參數: ex:過時時間(秒) px: 過時時間(毫秒) nx:若是設置爲True,則只有key不存在時。當前set纔會執行 xx:若是設置爲True,則只有key存在時,當前set纔會執行 setnx(key,value) 設置值,只有key不存在時,執行設置操做 setex(key,value,time) 設置值 參數: time:過時時間單位是秒 psetex(key,value,time) 設置值 參數: time:過時時間單位是毫秒 mset(*args,**kwargs) 批量設置值 如: mset k1 v1 k2 v2 或者mset(k1='v1',k2='v2') getset(key,value) 設置新值並返回原來的值 getrange(key,start,end) 獲取子序列(根據字節獲取,非字符) 參數: key: redis的key start:起始位置(字節) end: 結束位置(字節) 如:「張三」,0-3表示「張」 setrange(key,offset,value) 修改字符串內容。從指定字符串索引開始向後替換(新值太長時,則向後添加) 參數: offset: 字符串的索引,字節(一個漢字三個字節) value: 要設置的值 setbit(key,offset,value) 對key對應的二進制表示的位進行操做 參數: key: redis的key offset:位的索引(將值變爲二進制後再進行索引) value: 值只能是0或1 例: 若是在redis中有一個對應:n1 = "foo" 那麼字符串「foo」的二進制表示爲:01100110 01101111 01101111 若是執行setbit('n1',7,1)則就會將第七位設置爲1 那麼最終二進制則變成 01100111 01101111 01101111 即「goo」 代碼實現 127.0.0.1:6379> set n1 foo OK 127.0.0.1:6379> setbit n1 7 1 (integer) 0 127.0.0.1:6379> get n1 "goo" 127.0.0.1:6379> 用處: 如QQ統計在線人數,而且看誰在線: 讓1表明在線。0表明不在線 offset表明用戶對應的ID 若是用戶上線,則將該ID設置爲1 用bitcount統計有多少個1,即有多少用戶在線 用getbit查看用戶是否在線 代碼實現: 127.0.0.1:6379> setbit QQ 55 1 (integer) 0 127.0.0.1:6379> setbit QQ 1000 1 (integer) 0 127.0.0.1:6379> bitcount QQ (integer) 2 127.0.0.1:6379> getbit QQ 55 (integer) 1 127.0.0.1:6379> getbit QQ 66 (integer) 0 127.0.0.1:6379> append(key,value) 在redis,key對應的值後追加 參數: key: redis的key value: 要追加的字符串 例子: 127.0.0.1:6379> get zhang "san" 127.0.0.1:6379> append zhang san (integer) 6 127.0.0.1:6379> get zhang "sansan" 127.0.0.1:6379> del key 刪除key hash 若是須要存一個班級的姓名等信息 127.0.0.1:6379> hset info key duwentao (integer) 1 127.0.0.1:6379> hset info age 20 (integer) 1 127.0.0.1:6379> hset info id 1 (integer) 1 127.0.0.1:6379> hgetall info 1) "key" 2) "duwentao" 3) "age" 4) "20" 5) "id" 6) "1" 127.0.0.1:6379> hget info age "20" 127.0.0.1:6379> hkeys info #查看有多少key 1) "key" 2) "age" 3) "id" 127.0.0.1:6379> hvals info #查看有多少value 1) "duwentao" 2) "20" 3) "1" hmset key field value [field value ...] 用法: 127.0.0.1:6379> hmset li k1 v1 k2 v2 k3 v3 OK 127.0.0.1:6379> hgetall li 1) "k1" 2) "v1" 3) "k2" 4) "v2" 5) "k3" 6) "v3" hget key field 在key對應的hash中獲取根據key獲取value hmget key field [field ...] 用法: 127.0.0.1:6379> hmget li k1 k2 1) "v1" 2) "v2" hlen(key) 獲取有幾個key hkeys(key) 獲取key對應的hash中全部key的值 hvals(key) 獲取key對應的hash中全部的value值 hexists key field 檢查key對應的hash是否存在當前傳入的key hincrby key field increment 自增長 127.0.0.1:6379> hincrby info age 1 (integer) 21 127.0.0.1:6379> hincrby info age 1 (integer) 22 hscan key cursor [MATCH pattern] [COUNT count] 起到一個過濾的做用 如 hscan info 0 match *a* 列表: lpush(從左邊放)和rpush(從右邊放) 127.0.0.1:6379> lpush keys1 zhangsan lisi wanger (integer) 3 127.0.0.1:6379> LRANGE keys1 0 -1 1) "wanger" 2) "lisi" 3) "zhangsan" 127.0.0.1:6379> RPUSH keys2 zhangsan lizi wanger (integer) 3 127.0.0.1:6379> LRANGE keys2 0 -1 1) "zhangsan" 2) "lizi" 3) "wanger" 127.0.0.1:6379> lpushx key value 在key對應的list中添加元素,只對key已經存在時,值添加到列表的最左邊 rpushx key value 在key對應的list中添加元素,只對key已經存在時,值添加到列表的最右邊 llen key key對應的list元素個數 LINSERT key BEFORE|AFTER pivot value 在key對應的列表的某一個值前或後插入一個新值 參數: key: redis的key BEFORE|AFTER: 在什麼或者後 privot: 標杆值,即在他先後插入數據 value: 要插入的數據 lset key index value 對key對應的list中的某一個索引位置進行從新賦值 參數: key: redis的key值 index:list的索引位置 value:要設置的值 lrem key count value 在key對應的list中刪除指定的值 參數: key:redis的key value:要刪除的值 count: count=0: 刪除列表中全部的指定的值 count=2: 從前向後,刪除兩個 count=-2:從後向前,刪除兩個 lpop key 在key對應的列表的左側獲取第一個元素並在列表中刪除,返回值則是第一個元素。 lindex key index 在key中對應的列表中根據索引獲取列表元素 LRANGE key start stop 在key對應的列表分片獲取數據 參數: key: redis的key start:索引的起始位置 end: 索引的結束位置 LTRIM key start stop 在key對應的列表中移除沒有在start stop索引之間的值 參數: key:redis的key start:索引的起始位置 stop:索引的結束位置 RPOPLPUSH source destination 從一個表中取出最右邊的元素,同時將其添加至另外一個列表的最左邊 參數: source: 要取出數據的列表的key destination:要添加數據的列表的key BRPOPLPUSH source destination timeout 從一個列表的右側移除一個元素並將其添加到另外一個列表的左側 參數: source:取出並移除元素的列表對應的key destination:要插入元素的列表對應的key timeout:當source對應的列表中沒有數據時,阻塞等待其數據的超時時間(秒),0表示永遠堵塞 集合: sadd key member [member ...] key對應的集合中添加元素(無重複,無序) 如: 127.0.0.1:6379> sadd names3 zhangsan zhangsan lisi lisi 3 3 (integer) 3 127.0.0.1:6379> SMEMBERS names3 #獲取全部值 1) "3" 2) "lisi" 3) "zhangsan" scard key 獲取key對應的集合中的元素個數 sdiff key [key ...] 在第一個key對應的集合中且不在其餘key對應的集合中的元素 sdiffstore destination key [key ...] 在第一個key對應的集合中且不在其餘key對應的集合中的元素,把他添加到destination裏 SINTER key1 [key2] 返回給定全部集合的交集 SINTERSTORE destination key1 [key2] 返回給定全部集合的交集並存儲在 destination 中 SISMEMBER key member 判斷 member 元素是不是集合 key 的成員 SMEMBERS key 返回集合中的全部成員 SMOVE source destination member 將 member 元素從 source 集合移動到 destination 集合 SPOP key 移除並返回集合中的一個隨機元素 SRANDMEMBER key [count] 返回集合中一個或多個隨機數 SREM key member1 [member2] 移除集合中一個或多個成員 SUNION key1 [key2] 返回全部給定集合的並集 SUNIONSTORE destination key1 [key2] 全部給定集合的並集存儲在 destination 集合中 SSCAN key cursor [MATCH pattern] [COUNT count] 迭代集合中的元素 有序集合: ZADD key score1 member1 [score2 member2] 向有序集合添加一個或多個成員,或者更新已存在成員的分數 ZCARD key 獲取有序集合的成員數 ZCOUNT key min max 計算在有序集合中指定區間分數的成員數 ZINCRBY key increment member 有序集合中對指定成員的分數加上增量 increment ZINTERSTORE destination numkeys key [key ...] 計算給定的一個或多個有序集的交集並將結果集存儲在新的有序集合 key 中 ZLEXCOUNT key min max 在有序集合中計算指定字典區間內成員數量 ZRANGE key start stop [WITHSCORES] 經過索引區間返回有序集合成指定區間內的成員 ZRANGEBYLEX key min max [LIMIT offset count] 經過字典區間返回有序集合的成員 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 經過分數返回有序集合指定區間內的成員 ZRANK key member 返回有序集合中指定成員的索引 ZREM key member [member ...] 移除有序集合中的一個或多個成員 ZREMRANGEBYLEX key min max 移除有序集合中給定的字典區間的全部成員 ZREMRANGEBYRANK key start stop 移除有序集合中給定的排名區間的全部成員 ZREMRANGEBYSCORE key min max 移除有序集合中給定的分數區間的全部成員 ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定區間內的成員,經過索引,分數從高到底 ZREVRANGEBYSCORE key max min [WITHSCORES] 返回有序集中指定分數區間內的成員,分數從高到低排序 ZREVRANK key member 返回有序集合中指定成員的排名,有序集成員按分數值遞減(從大到小)排序 ZSCORE key member 返回有序集中,成員的分數值 ZUNIONSTORE destination numkeys key [key ...] 計算給定的一個或多個有序集的並集,並存儲在新的 key 中 ZSCAN key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成員和元素分值)
安裝python 模塊app
pip3 install rediside
Python 線程池鏈接redis測試
普通鏈接redis線程
管道:一次能夠執行多個命令code
import redis pool = redis.ConnectionPool(host='127.0.0.1',port=6379) #鏈接池 #r = redis.Redis(host='127.0.0.1',port=6379) r = redis.Redis(connection_pool=pool) pipe = r.pipeline(transaction=True) r.set('foo','bar') r.set('zhangsan','heheheh') pipe.execute()
實現訂閱和發佈排序
服務端(發佈端):索引
import redis pool = redis.ConnectionPool(host="127.0.0.1",port='6379') rc = redis.Redis(connection_pool=pool) while True: mes = str(input("請輸入要發佈的內容:")) rc.publish('fm100.5', mes)
客戶端(訂閱端):
import redis pool = redis.ConnectionPool(host="127.0.0.1",port='6379') rc = redis.Redis(connection_pool=pool) ps = rc.pubsub() #打開 ps.subscribe(['fm100.5']) #調頻 for item in ps.listen(): #監聽 if item['type'] == 'message': data = item['data'] print(data.decode('utf-8'))
微信公衆號