【针对初学者】Redis的数据类型和在Python中的使用示例
这是一个关于Redis数据类型和Python使用示例的文档。我在进行语言处理100本挑战时,在第7章中使用Redis作为键值存储。这是我学到的一些笔记。
我认为NoSQL有很多使用场景,学习价值很高,所以购买了《RDB技术人员的NoSQL指南》,并且相对重视地进行了学习。与关系型数据库相比,它的思维方式很新颖,很有趣(这本书非常易懂,对初学者来说很有用)。
环境
请参考文章《关于安装的最新Redis的Ubuntu安装和Python使用》以获取有关安装的信息。
種類バージョン内容OSUbuntu18.04.01 LTS仮想で動かしていますRedis5.0.42019/3/22時点でStableの最新ですpyenv1.2.9複数Python環境を使うことがあるのでpyenv使っていますPython3.7.2pyenv上でpython3.7.2を使っています
パッケージはvenvを使って管理しています
パッケージはvenvを使って管理しています
请参阅以下链接
RDB技术人员的NoSQL指南
官方文档-数据类型
官方教程
SlideShare:关于Redis的特性和应用方法
SlideShare:初次接触Redis的Web工程师指南
使用Presto和HyperLogLog从大量日志中快速估算唯一用户数(理论篇)
数据类型
– 列表
1. 字符串
String是一种基本的字符类型。它还可以进行增量操作。
GitHub链接:10.DataString.ipynb
from redis import Redis
r = Redis( )
# Keyを"key"にしてvalue"foo"を登録
r.set("key", "foo")
print(r.get("key"))
#=>b'foo'
# Keyを"test_int"にしてvalue 10を登録
r.set("test_int",10)
# インクリメントできる
r.incr("test_int")
print(r.get("test_int"))
#=>b'11'
# 削除
r.flushall()
2. 列表
一个简单的字符串列表类型。可以重复并且有序。
GitHub链接:20.DataList.ipynb
from redis import Redis
r = Redis( )
# Listに値を追加(重複確認のためAを2回追加)
r.rpush("mylist", "A")
r.rpush("mylist", "B")
r.rpush("mylist", "A")
# Listの最初に値を追加
r.lpush("mylist", "first")
# Listを0(最初)から-1(全部)まで照会
r.lrange("mylist", 0, -1)
#=> [b'first', b'A', b'B', b'A']
# Listを1(2つ目)から2つまで照会
r.lrange("mylist", 1, 2)
#=> [b'A', b'B']
# 削除
r.flushall()
3. 集合 (jí hé)
无序且不允许重复的字符集合。
GitHub链接:30.DataSets.ipynb
from redis import Redis
r = Redis( )
# Setsに1, 2, 3を追加
r.sadd("myset", 1, 2, 3)
r.smembers("myset")
#=> {b'1', b'2', b'3'}
# 重複不可なので1を追加しようとしてもできない(return=0)
print(r.sadd("myset", 1))
#=> 0
# 削除
r.flushall()
4. 排序集合
在内部具有名为”Score”的排序键的Sets。不允许重复。
GitHub链接:40.DataSortedSets.ipynb
from redis import Redis
r = Redis( )
# 辞書型の作成
dict = {}
dict["Alan Kay"] = 1940
dict["Sophie Wilson"] = 1957
dict["Richard Stallman"] = 1953
# 追加
r.zadd("hackers", dict)
# 参照(Scoreなし)
r.zrange("hackers",0,-1)
#=> [b'Alan Kay', b'Richard Stallman', b'Sophie Wilson']
# 参照(Scoreあり)
r.zrange("hackers",0,-1, withscores=True)
#=> [(b'Alan Kay', 1940.0),
#=> (b'Richard Stallman', 1953.0),
#=> (b'Sophie Wilson', 1957.0)]
# ちなみに、同じKeyで別値をzaddすると値上書き
dict2 = {}
dict2["Alan Kay"] = 19401
r.zadd("hackers", dict2)
# 削除
r.flushall()
5. 哈希
使用键来存储无序值和集合。不允许重复。GitHub链接:50.DataHash.ipynb
from redis import Redis
r = Redis( )
# 1Valueをセット
r.hset("user:1000", "username", "antirez")
r.hgetall("user:1000")
#=> {b'username': b'antirez'}
# まとめてセット
dict = {}
dict["birthyear"] = 1977
dict["verified"] = 1
r.hmset("user:1000",dict)
r.hgetall("user:1000")
#=> {b'username': b'antirez', b'birthyear': b'1977', b'verified': b'1'}
# ちなみに、同じKeyで別値をセットすると値上書き
r.hset("user:1000", "username", "antirez2")
r.hgetall("user:1000")
#=> {b'username': b'antirez2', b'birthyear': b'1977', b'verified': b'1'}
# 削除
r.flushall()
以下是主要的查询列表
コマンドredis-pyコマンド説明SETset(name, value, ex=None, px=None, nx=False, xx=False)Keyに対するValueを指定して新規格納/上書きGETget(name)Keyに対するValueを取得DELdelete(*names)Keyに対するValueを削除INCRincr(name, amount=1)Keyに対してValueを1インクリメントMSETmset(mapping)SETを複数一括処理MGETmget(keys, *args)GETを複数一括処理LPUSHlpush(name, *values)Keyに対するListの左端に要素追加RPUSHrpush(name, *values)Keyに対するListの右端に要素追加LLENllen(name)Keyに対するList長取得LRANGElrange(name, start, end)Keyに対する開始と終了位置を指定したListの要素取得LPOPlpop(name)Keyに対するList左端からの要素取得RPOPrpop(name)Keyに対するList右端からの要素取得SADDsadd(name, *values)Setsに対する要素追加SREMsrem(name, *values)Setsに対しての指定した要素削除SISMEMBERsismember(name, value)Setsに対しての要素存在確認SMEMBERSsmembers(name)Setsに対しての要素全取得SUNIONsunion(keys, *args)複数のSets結合結果取得(重複除外されている)ZADDzadd(name, mapping, nx=False, xx=False, ch=False, incr=False)Sorted Setsに要素追加ZRANGEzrange(name, start, end, desc=False, withscores=False, score_cast_func=)Sorted Setsに対する開始と終了位置を指定した要素取得HSEThset(name, key, value)Hashesに対する要素追加HGETALLhgetall(name)Hashesの要素を全取得HMSEThmset(name, mapping)HSETを複数一括処理HGEThget(name, key)Hashesに対して指定したフィールドのValue取得HINCRBYhincrby(name, key, amount=1)Hashesに対して指定したフィールドのValueを1インクリメントHDELhdel(name, *keys)Hashesに対して指定したフィールドとValue削除EXPIREexpire(name, time)Keyと秒数を指定して有効期限設定TTLttl(name)Keyを指定して有効期限取得INFOinfo(section=None)Reidsサーバの状態・統計情報等取得