2016-12-28 3 views
1

私はdjango-redisバックエンドとdjango.core.cache.cacheモジュールを使用しています。 djangoキャッシュモジュールは、リストへのプッシュと特定のデータ構造の操作の適切な機能をサポートしていないようです。Django redis LPUSH/RPUSH

暗黙の実装では、Djangoのキャッシュモジュールにリストを更新するために使用:

my_list = cache.get('my_list') 
my_list.append('my value') 

cache.set('my_list', my_list) 

リスト全体は、アプリケーションサーバのメモリにロードされているので、このアプローチは効率的ではありません。

Redisは、リストを動的に更新するためのLPUSH/RPUSHコマンドをサポートしています。しかし、これらのメソッドはdjangoキャッシュモジュールで利用できるようには見えません。

公式のpython redisクライアントは、これらのメソッドを実装しているようです。 Djangoがこの実装を提供しない理由はありますか?私は好奇心から求めています。おそらく私はいくつかの詳細を逃した?

答えて

2

これは、djangoキャッシュを使用するのではなく、rawクライアントにアクセスする必要があるため、rawクライアントとコマンドのアクセスをサポートしています。

http://niwinz.github.io/django-redis/latest/#_raw_client_access

3.12。未処理のクライアントアクセスDjangoキャッシュインタフェースによって公開されていないいくつかの高度な機能を使用するには、アプリケーションで未処理のRedisクライアントにアクセスする必要があります。 raw接続を作成するための別の 設定の保存を避けるため、django-redisは、 関数を公開して、キャッシュ接続 文字列を再利用する生のクライアントを取得できます。get_redis_connection(別名)。

コード例:

>>> from django_redis import get_redis_connection 
>>> con = get_redis_connection("default") 
>>> con 
<redis.client.StrictRedis object at 0x2dc4510> 
>>> con.lpush('mylist',1) 
+0

ありがとうございました! @druvatak –

関連する問題