python redis詳細(五)LISTチェーンテーブル配列

6589 ワード

LIST
Redisリストは単純な文字列リストで、挿入順に並べ替えられています.エレメントガイドリストのヘッダー(左)または末尾(右)を追加できます.
pythonのlistに似ています
データ構造におけるチェーンテーブル構造
python redisが提供する方法はコマンドラインとほぼ一致し、具体的な関数と意味は所定のコマンドラインを参照して使用することができ、対応する関数名はコマンド名とほぼ一致する.
コマンド#コマンド#
まず公式の命令を理解し、具体的には以下の通りです.
1BLPOP key1 [key2 ] timeoutリストの最初の要素を移動して取得し、リストに要素がない場合、タイムアウト待ちまたはポップアップ可能な要素が発見されるまでリストをブロックします.2BRPOP key1 [key2 ] timeoutリストの最後の要素を移動して取得し、リストに要素がない場合、タイムアウト待ちまたはポップアップ可能な要素が発見されるまでリストをブロックします.3BRPOPLPUSH source destination timeoutリストから値をポップアップし、ポップアップされた要素を別のリストに挿入して返します.リストに要素がない場合、リストはタイムアウト待ちまたはポップアップ可能な要素が見つかるまでブロックされます.4LINDEX key indexインデックス取得リストの要素5LINSERT key BEFORE|AFTER pivot valueリストの要素の前後に要素6LLEN key取得リスト長7LPOP keyを挿入リストの最初の要素8LPUSH key value1 [value2]リストヘッダ9LPUSHX key valueに1つ以上の値を挿入既存のリストヘッダ10LRANGE key start stop取得リストに1つ以上の値を挿入指定範囲内の要素11LREM key count value削除リスト要素12LSET key index valueインデックス設定リスト要素の値13LTRIM key start stopで1つのリストをトリム(trim)します.つまり、リストに指定区間内の要素のみを保持させ、指定区間内でない要素はすべて削除されます.14RPOP keyリストの最後の要素15RPOPLPUSH source destinationリストの最後の要素を除去して取得し、その要素を別のリストに追加し、16RPUSH key value1 [value2]リストに1つ以上の値17RPUSHX key valueを追加して既存のリストに値を追加します.
python-redis
python操作redis LISTタイプはいくつかの関数を提供し、関数名はコマンドとほぼ一致し、コマンドを参照して使用することができます.
1.lset(name, index, value)インデックスによる値の設定
print rediscli.lset("pm1", 0, "tr1")

2.llen(name)name対応リスト要素の個数
3.lindex(name, index)name対応リストでインデックスに基づいてリスト要素を取得
print rediscli.lindex('pm1', 0)

4. lrange(name, start, end)
	 name           

	start,       
	end,      
	
	
	print rediscli.lrange('pm1', 0, 7)
	  : ['tr1', 'x2', 'x1', 'tr1', 'x2', 'x1']

5. lpush(name,values)
 list    value

print rediscli.lpush('pm1', 'x1', 'x2', 'x3')
print rediscli.lindex('pm1', 0)

  :
6
x3

6.rpush(name, values)list右側にvaluesを追加
print rediscli.lrange('pm1', 0, 7)
print rediscli.rpush('pm1', 'rt1')
print rediscli.lrange('pm1', 0, 7)

  :
['tr1', 'x2', 'x1', 'tr1', 'x2', 'x1']
7
['tr1', 'x2', 'x1', 'tr1', 'x2', 'x1', 'rt1']

7.lpushx(name,value)リスト左にvalueを追加し、nameが既に存在する場合のみリストの一番左に値を追加
8.rpushx(name, value)リスト右側にvaluesを追加名前のみが既に存在する場合、リストの一番右側に値を追加
9. linsert(name, where, refvalue, value))
 name                   ,          ,        

where            	BEFORE AFTER
refvalue,    , :        
value,         


print rediscli.linsert('pm1', 'AFTER','x2', 'A_x2')
print rediscli.lrange('pm1', 0, 9)

  :
8
['tr1', 'x2', 'A_x2', 'x1', 'tr1', 'x2', 'x1', 'rt1']

10. lrem(name, count, value)
 name   list       

count     ,  

print rediscli.lrem('pm1', 1, 'x1')
print rediscli.lrange('pm1', 0, 9)
  :
['tr1', 'x2', 'A_x2', 'tr1', 'x2', 'x1', 'rt1']

11.lpop(name)一番左から値を投げ出す
12.rpop(name)右から値を投げ出す
print rediscli.lpop('pm1')
print rediscli.rpop('pm1')
print rediscli.lrange('pm1', 0, 9)

  :

tr1
rt1
['x2', 'A_x2', 'tr1', 'x2', 'x1']

13. rpoplpush(src, dst)
             ,                

src,        name
dst,         name

14. blpop(keys, timeout)
       ,       pop       

keys,redis name   
timeout,    ,               ,             ( ), 0       
  • brpop(keys, timeout)複数のリストを並べ、右から左へpop対応リストの要素
  • 16. brpoplpush(src, dst, timeout=0)
                                   
    
       src,              name
       dst,           name
       timeout, src           ,             ( ),0       
       
       
    print rediscli.brpoplpush('pm1', 'pm2')
    print rediscli.lrange('pm1', 0, 9)
    print rediscli.lrange('pm2', 0, 9)
    
      :
    x1
    ['x2', 'A_x2', 'tr1', 'x2']
    ['x1']
    
    
    

    17.ltrim(name, start, end)start-endインデックス間にない値をname対応リストから削除
    サンプルプログラム
    # coding:utf-8
    
    import redis
    
    rediscli = redis.Redis(host='192.168.137.18', port=6379, db=13)
    
    print rediscli.lpush('pm1', 'x1', 'x2', 'x3')
    print rediscli.lindex('pm1', 0)
    print rediscli.lset("pm1", 0, "tr1")
    print rediscli.llen('pm1')
    print rediscli.lindex('pm1', 0)
    print rediscli.lrange('pm1', 0, 7)
    print rediscli.rpush('pm1', 'rt1')
    print rediscli.lrange('pm1', 0, 7)
    print rediscli.linsert('pm1', 'AFTER','x2', 'A_x2')
    print rediscli.lrange('pm1', 0, 9)
    print rediscli.lrem('pm1', 1, 'x1')
    print rediscli.lrange('pm1', 0, 9)
    print rediscli.lpop('pm1')
    print rediscli.rpop('pm1')
    print rediscli.lrange('pm1', 0, 9)
    print rediscli.brpoplpush('pm1', 'pm2')
    print rediscli.lrange('pm1', 0, 9)
    print rediscli.lrange('pm2', 0, 9)
    
    

    出力:
    備考:ここまでの実験では一部のデータが蓄積されていたので、初回の結果とは少し違うかもしれません
    7
    x3
    True
    7
    tr1
    ['tr1', 'x2', 'x1', 'x2', 'A_x2', 'tr1', 'x2']
    8
    ['tr1', 'x2', 'x1', 'x2', 'A_x2', 'tr1', 'x2', 'rt1']
    9
    ['tr1', 'x2', 'A_x2', 'x1', 'x2', 'A_x2', 'tr1', 'x2', 'rt1']
    1
    ['tr1', 'x2', 'A_x2', 'x2', 'A_x2', 'tr1', 'x2', 'rt1']
    tr1
    rt1
    ['x2', 'A_x2', 'x2', 'A_x2', 'tr1', 'x2']
    x2
    ['x2', 'A_x2', 'x2', 'A_x2', 'tr1']
    ['x2', 'x1']