我尝试了一下Redis入门和在Python中连接Redis
首先
由于目前可能存在误解等情况,因此只写了引言部分。如果您想了解更多信息,请查看最后提供的有用参考文章。
起因 (qǐ
经理:这次的修改涉及Redis这方面,所以在测试时也请你负责相关部分!
!?
我对Redis这些只知道个名字而已…看来必须得学习一下了…
Redis是什么?
搜索一下,Dotinstall上有关于Redis入门的视频!我是会员,所以要好好利用它。
通过观看视频后,对Redis的理解有了一部分。
-
- データをマトリクスではなく、KVS(Key-Value Store)で扱う
-
- インメモリデータベースなので永続化しないでRedisを落とすとデータが消える
-
- デフォルトでDB番号0〜15で分けられている(DB名はない)
- データ構造は String, List, Set, Sorted set, Hash
基本的数据的读写命令是什么?
$ redis-cli # Redisサーバーに接続
(以降Redisサーバー接続後)
> exit # Redisクライアント終了
> shutdown # Redisサーバーを落とす
> select DB番号 # DB切り替え
> set key value # Stringデータのセット
> get key # Stringデータの取得
> rpush key value # Listデータを末尾にセット(先頭はlpush)
> lrange key 開始index 終了index # Listデータの取得。index全指定は 0 -1
> sadd key value # Setデータのセット
> smembers key # Setデータの取得
> zadd key score value # Sorted setデータのセット
> zrange key 開始index 終了index # Sorted setデータの取得
> hset key field value # Hashデータのセット
> hkeys key # Hashデータのfieldの取得
> hvals key # Hashデータのvalueの取得
> hgetall key # Hashデータのfieldとvalueの取得
> keys * # key一覧の取得
> type key # keyのデータタイプを確認
好的。那么就马上进行实验吧。
但是在不太理解的情况下,我不想弄脏本地环境,所以我们决定在Docker上搭建Redis服务器。
用Docker启动Redis服务器。
$ docker run -p 6379:6379 redis
尽管如上所述,Redis服务器将会启动,但由于未进行持久化操作,因此关闭服务器会导致数据消失。
$ docker run --name redis -p 6379:6379 -v [ローカルのパス]:/data redis redis-server --appendonly yes
如果使用–appendonly yes选项,Redis的操作将被追加到appendonly.aof文件中进行设置。这样一来,即使Docker关闭,数据也会被保留。对于Docker,文件会在Docker内的/data上创建,因此使用-v选项将其与本地连接以进行文件输出。然后可以通过在$ redis-cli中输入> shutdown来停止Docker中的Redis服务器。在这种情况下,Docker容器将保留,因此应使用$ docker rm ContainerID来删除Redis容器。如果不删除容器,再次尝试使用docker run启动Redis服务器将会导致错误。
日本语变成乱码了!
我立即连接到Docker的Redis服务器并进行了尝试。
> set json '{"message": null,"results": [{"address1": "東京都","address2": "千代田区","address3": "丸の内","kana1": "トウキョウト","kana2": "チヨダク","kana3": "マルノウチ","prefcode": "13","zipcode": "1000005"}],"status": 200}'
> get json
"{\"message\": null,\"results\": [{\"address1\": \"\xe6\x9d\xb1\xe4\xba\xac\xe9\x83\xbd\",\"address2\": \"\xe5\x8d\x83\xe4\xbb\xa3\xe7\x94\xb0\xe5\x8c\xba\",\"address3\": \"\xe4\xb8\xb8\xe3\x81\xae\xe5\x86\x85\",\"kana1\": \"\xef\xbe\x84\xef\xbd\xb3\xef\xbd\xb7\xef\xbd\xae\xef\xbd\xb3\xef\xbe\x84\",\"kana2\": \"\xef\xbe\x81\xef\xbe\x96\xef\xbe\x80\xef\xbe\x9e\xef\xbd\xb8\",\"kana3\": \"\xef\xbe\x8f\xef\xbe\x99\xef\xbe\x89\xef\xbd\xb3\xef\xbe\x81\",\"prefcode\": \"13\",\"zipcode\": \"1000005\"}],\"status\": 200}"
哇!乱码了!(这是在zipcloud郵便编码搜索API中随意获得的JSON数据)
据我调查,似乎只需加上–raw选项连接Redis服务器,即可避免乱码问题。
$ redis-cli --raw
> get json
{"message": null,"results": [{"address1": "東京都","address2": "千代田区","address3": "丸の内","kana1": "トウキョウト","kana2": "チヨダク","kana3": "マルノウチ","prefcode": "13","zipcode": "1000005"}],"status": 200}
哎呀,虽然避免了乱码问题,但是JSON还是不好读啊…查了一下,似乎有一个名为Keylord的Redis图形用户界面客户端还不错,但是要收费!3592日元!太贵了!
哎呀,哎呀…想想也有JSON库,或许可以尝试用Python来编写客户端。
用Python连接Redis
与Redis服务器的连接
import redis
pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
r = redis.StrictRedis(connection_pool=pool)
可以不使用连接池,而是使用r = redis.StrictRedis(host=’localhost’, port=6379, db=0)进行连接。但是使用连接池连接速度更快,而且不需要关闭连接,所以更好。连接后的Redis操作是什么?
r.set('key', 'value')
r.get('key')
r.type('key')
r.keys()
这个几乎和redis-cli一样。(获取键的列表有点不同)
这个很简单!因此,我将尝试格式化刚刚的JSON。
import json
js = r.get('json')
js = json.loads(js)
js = json.dumps(js, indent = 2, ensure_ascii = False)
print(js)
{
"message": null,
"results": [
{
"address1": "東京都",
"address2": "千代田区",
"address3": "丸の内",
"kana1": "トウキョウト",
"kana2": "チヨダク",
"kana3": "マルノウチ",
"prefcode": "13",
"zipcode": "1000005"
}
],
"status": 200
}
总结
如果告诉经理,听说他会给我买Keylord。在公司里,嗯?不是多此一举吗?
总结:2
最後在測試進行時,開發人員幫忙將數據注入到Redis中。很方便也很享受學習的機會。
我们正在招聘!
我正在开发AI聊天机器人。如果您有兴趣,请随时通过Wantedly页面与我联系!
参考文献。
「ドットインストール Redis入門」は、Pythonを使ってRedisを扱う方法(redis-pyの基本)を学ぶことができます。また、Unicodeで日本語を含むJSON文字列を取得することもできます。さらに、Pythonで取得したJSON形式の文字列をRedisに入れて、それを辞書型に登録する方法も学びます。