Redisに関するいくつかのピット
文書ディレクトリ
Redis
#1環境
Python3.7
django2.0.7
#2で発生した問題
2.1 redisのdjangoプロジェクトでのバージョンの問題
誤報Invalid input of type: 'CacheKey'. Convert to a byte, string or number first.
の原因となる
redisのバージョンが高すぎる
現在のredis==3.2.1
解決する
方法1:redisバージョンを下げるpip3 install redis==2.10.6
方法2:redisを書き換える
プロジェクトではredis=3.0バージョンを使用する必要がある場合があります.たとえば、私のプロジェクトではcelery 4.3 redis 3を使用する必要があります.0以上のバージョンなので、redisをダウングレードすることはできません.redisのみを書き換えることができます.
Python3.7
django2.0.7
Invalid input of type: 'CacheKey'. Convert to a byte, string or number first.
pip3 install redis==2.10.6
# CACHES = {
# "default": {
# "BACKEND": "django_redis.cache.RedisCache",
# "LOCATION": "redis://127.0.0.1:6379/0",
# "OPTIONS": {
# "CLIENT_CLASS": "django_redis.client.DefaultClient",
# "CONNECTION_POOL_KWARGS": {"max_connections": 100} #
# }
# }
# }
MY_CACHES_3 = {
"HOST":"127.0.0.1",
"PORT":6379,
"DB":0
}
from redis import Redis
from django.conf import settings
class MyDjangoRedis3(Redis):
def get(self, name):
"""
get() , Redis get() , str
:param name:
:return: (str)
"""
value = self.execute_command('GET', name)
if not value:
return None
return str(value,encoding="utf8")
redis3 = MyDjangoRedis3(
host=settings.MY_CACHES_3["HOST"],
port=settings.MY_CACHES_3["PORT"],
db=settings.MY_CACHES_3["DB"],
)
# host = 'localhost', port = 6379,
# db = 0, password = None, socket_timeout = None,
# socket_connect_timeout = None,
# socket_keepalive = None, socket_keepalive_options = None,
# connection_pool = None, unix_socket_path = None,
# encoding = 'utf-8', encoding_errors = 'strict',
# charset = None, errors = None,
# decode_responses = False, retry_on_timeout = False,
# ssl = False, ssl_keyfile = None, ssl_certfile = None,
# ssl_cert_reqs = 'required', ssl_ca_certs = None,
# max_connections = None
from xxx.xxx.xxx import redis3 # , redis3 = MyDjangoRedis3() redis3
: redis3.set("key","value") # cache.set()
: redis3.get("key") # cache.get()
#2.2不明なエラー
誤報
zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory
の原因となる
不明
解決する
make MALLOC=libc
#2.3不明なエラー
誤報
make test
You need tcl 8.5 or newer in order to run the Redis test
の原因となる
不明
解決する
yum install tcl
#2.4 redis.confが有効でない
に質問
配置redis.conf redisを再起動すると、いつも有効になりません.
解決する
redis.confドキュメントの最初の行の説明
# Redis configuration file example.
#
# Note that in order to read the configuration file, Redis must be
# started with the file path as first argument:
#
# ./redis-server /path/to/redis.conf
開始./redis-serverの場合、redisを持参する必要があります.conf
# redis
./redis-server /path/to/redis.conf # redis.conf