安装 Dependency
$ pip install django-redis
作为 cache backend 使用配置
为了使用 django-redis , 在你项目下的setting.py中添加如下代码:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
为了更好的互操作性并使连接字符串更加 “标准”, 从 3.8.0 开始 django-redis 使用 redis-py native url notation 作为连接字符串.
在 Django 中访问 Redis
通过django-redis访问 Redis
以搜索 keys 过期为例:
>>> from django.core.cache import cache
>>> cache.set("foo", "value", timeout=25)
>>> cache.ttl("foo")
25
>>> cache.ttl("not-existent")
0
Basic usage
The basic interface is:
>>> cache.set('my_key', 'hello, world!', 30)
>>> cache.get('my_key')
>>> 'hello, world!'
key
should be a str
, and value
can be any picklable Python object.
The timeout
argument is optional and defaults to the timeout
argument of the appropriate backend in the CACHES
setting (explained above). It’s the number of seconds the value should be stored in the cache. Passing in None
for timeout
will cache the value forever. A timeout
of 0
won’t cache the value.
If the object doesn’t exist in the cache, cache.get()
returns None
:
>>> # Wait 30 seconds for 'my_key' to expire...
>>> cache.get('my_key')
None
We advise against storing the literal value None
in the cache, because you won’t be able to distinguish between your stored None
value and a cache miss signified by a return value of None
.
cache.get()
can take a default
argument. This specifies which value to return if the object doesn’t exist in the cache:
>>> cache.get('my_key', 'has expired')
'has expired'
To add a key only if it doesn’t already exist, use the add()
method. It takes the same parameters as set()
, but it will not attempt to update the cache if the key specified is already present:
>>> cache.set('add_key', 'Initial value')
>>> cache.add('add_key', 'New value')
>>> cache.get('add_key')
'Initial value'
原生客户端使用
在某些情况下你的应用需要进入原生 Redis 客户端,以使用一些 django cache 接口没有暴露出来的进阶特性。
为了避免储存新的原生连接所产生的另一份设置, django-redis 提供了方法 get_redis_connection(alias)
使你获得可重用的连接字符串:
$ python manager.py shell
>>> from django_redis import get_redis_connection
>>> con = get_redis_connection("default")
>>> con
<redis.client.StrictRedis object at 0x2dc4510>
>>> con.hset("hash1","key1","value1")
接下来,你就可以像在 redis-cli
中那样,在Python 中进行 Redis 读写操作。
以下列举了对于在 Redis 中几种不同的数据结构常用的操作命令。
基本操作
命令 | 含义 |
---|---|
del key | 删除key |
keys * | 所有键 |
TTL key | 查看还有多久过期 |
del name | 删除name |
select 2 | 表示切换到2库,注:Django的cache是存在1库的(上面设置的),进入redis的时候默认是0库的 |
expire key 100 | 设置过期时间100秒 |
EXPIRE name 300 | 设置name的300秒后自动过期 |
type name | 查看name的属性(总共:string, list, hash, set,zset) |
String
操作 | 字符 |
---|---|
set name “wuanger” | 创建“wuanger”,键为name |
get key | 获取key这个键的值 |
append key aa | 给一个值后面加aa,类似字符串相加 |
DERC key | 给key的值-1,仅限数字 |
DERCBY key 4 | 给key的值-4,仅限数字 |
List
操作 | 含义 |
---|---|
lpush list_name a b c d e f | f e d c b a (依次从左边插入,如果该 list_name 不存在,就创建) |
rpush list_name g | 从右边插入 |
lrange list_name 0 -1 | 显示所有内容(根据下表来的) |
lpop list_name | 从左边删除第一个数,返回值是删除的那个数 |
rpop list_name | 从右边删除一个数,返回值是删除的那个数 |
操作 | 含义 |
---|---|
hset hash_name key1 val1 | hash_name = {key1: val1} |
hmset hash_name key1 val1 key2 val2 | hash_name = {key1: val1, key2: val2} |
hget hash_name key1 | 获取key1 |
hmget hash_name key1 key2 | 获取多个key |
hgetall hash_name | 获取所有key |
hkeys hash_name | 获取所有的key |
hvals hash_name | 获取所有的val |
hdel hash_name key | 删除hash_name中的key |
|
Set
操作 | 含义 |
---|---|
sadd set1 val1 val2 | 添加一个set1集合里的值val1,val2 |
srem set1 val1 | 从set1中移除val1 |
smembers set1 | set1的成员 |
sismember set1 val1 | 查看val1是否在set1里,是返回1,否返回0 |
sinter set1 set2 | 求交集 |
sunion set1 set2 | 求并集 |
sdiff set1 set2 | 求差集 |
zset(有序集合)
操作 | 含义 |
---|---|
zadd zset1 score member | 创建、添加一个zset1,member的分数是score(int) |
zrangebyscore zset1 0 100 withscores | 得出zset1中分数score在0-100的member,score从小到大,后面的withscores是带score输出 |
zrevrangebyscore zset1 100 0 | 从大到小输出 |
zrange zset1 2 4 | 获取zset1中序号为3,4的member |
zrank zset1 a | zset1中成员a的序号 |
zrem zset1 a | 移除zset1中的a |
zcount zset1 1 6 | 获取score为1-6之间的member数量 |
Reference
- https://docs.djangoproject.com/en/dev/topics/cache/#the-low-level-cache-api
- https://django-redis-chs.readthedocs.io/zh_CN/latest/
- https://docs.djangoproject.com/en/dev/topics/cache/