django中使用redis(django-redis) 2018-01-17

使用redis作为缓存

1. django中配置

settings.py中加入redis设置:

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379",  # 这里设定了本机的redis数据
        # "LOCATION": "redis://:passwordpassword@47.193.146.xxx:6379/0", # 如果redis设置密码的话,需要以这种格式host前面是密码
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

2. Redis如何修改密码:

  • 修改密码

    1.找到redis配置信息文件,如/etc/redis.conf
    2.找到 # requirepass foobared.   并去掉注释,后面的foobared改成你的密码。如:requirepass my_redis
    3.重启redis, sudo service redid restart.(或者这样重启:sudo service redid restart, sudo redis-server /etc/redis.conf)
    
  • 修改密码后登陆:

    1.如果直接 redis-cli. 登陆,没密码,那么你能登陆,但无任何操作权限
    2.用密码登陆。redis-cli -h 127.0.0.1 -p 6379 -a my_redis.   才能有权限操作
    3.先redis-cli登陆,此时没有操作权限,再输入:AUTH your_password. 同样可以完成认证
    

3. 配置后在django项目中使用缓存:

  • 使用cache
from django.core.cache import cache
# 给redis中加入了键为key1,值为value1缓存,过期时间20秒
cache.set(“key1”, “value1”, 20).  
# 参数:timeout=20, 过期时间20
# nx=True. 默认为False,重复命名时覆盖,True表示重复命名时不能再重新赋值

# 获取cache值:
val = cache.get(“key1”),
# 获取key3的过期时间,返回值:0表示无此键或已过期,None表示未设置过期时间,有过期时间的返回秒数。
cache.ttl(“key3”). 
# 注意:在redis中存储的值并不是按照给定的键存储的,是根据键值又拼装的键(在你的key前面加上了个“:1:”)。
# 删除redis中key1的值
cache.delete(‘key1’)
  • 使用get_redis_connection(保存热词,自动统计次数)
from django_reids import get_redis_connection
# get_redis_connection(‘default’)用法:
Conn = get_redis_connection(‘default’)
# 表示网redis里面存入了数据,键key1,值val1,但是注意不能再redis中获取,只能用conn获取,
# 返回值是添加量,初始为1.0,如果再加一个一摸一样的,就是2.0,注意:可以往一个键中添加多个值,如
Conn.zincrby(key1, '333').   
Conn.zincrby(key1, 'HELLO')
Conn.zincrby(key1, 'ooo')
Conn.zincrby(key1, 'world')
Conn.zincrby(key1, '444')
Conn.zincrby(key1, '444')
Conn.zincrby(key1, '444')。 # 注意:这里val5添加了3次
# 如何获取刚才添加的呢?
li1 = conn.zrevrange(key1, 0, 10, True)
# li1就是:[('444', 3.0), ('world', 1.0), ('ooo', 1.0), ('HELLO', 1.0), ('333', 1.0)]
# 得到的数据是一个列表,取其中0-10(前10),按照刚才添加次数排序,val5添加了3次,所以权重值最大
# True表示,获得的值是个元组,False的话里面没有权重值,默认False
li2 = conn.zrevrange(key1, 0, 10)
# li2就是:['444', 'world', 'ooo', 'HELLO', '333']
# 我统计热搜关键词排序用到了

进阶: 如何管理添加的数据,包括保留数据个数和过期时间???????get_redis_connection(‘default’)中的default的意思,有其他选项吗?待大神解答

4. redis中的操作(redis-cli)

  • redis基本操作(终端):

    命令含义
    del key删除key
    keys *所有键
    get name获取name这个键的值
    del name删除name
    set name “wuanger”创建“wuanger”,键为name
    select 2表示切换到2库,注:Django的cache是存在1库的(上面设置的),进入redis的时候默认是0库的
    TTL name查看剩余过期时间
    EXPIRE name 300设置name的过期时间为300秒
    type name查看name的属性(总共:string, list, hash, set,zset)

5. redis 数据结构

  1. string 字符

    操作含义
    set key value
    get key
    expire key 100设置过期时间100秒
    TTL key查看剩余过期时间
    append key aa给一个值后面加aa,类似字符串相加
    DERC key给key的值-1,仅限数字
    DERCBY key 4给key的值-4,仅限数字
  2. list 列表(类似于python的列表)

    操作含义
    lpush list_name a b c d e ff e d c b a (依次从左边插入),如果没有就创建
    rpush list_name g从右边插入
    lrange list_name 0 -1显示所有内容(根据下表来的)
    lpop list_name从左边删除第一个数,返回值是删除的那个数
    rpop list_name从右边删除一个数,返回值是删除的那个数
    expire TTL方法和string一样
  3. hash 哈希(类似于python的字典)

    操作含义
    hset hash_name key1 val1hash_name = {key1: val1}
    hmset hash_name key1 val1 key2 val2hash_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
  4. set 集合(存储不重复的值,无序)

    操作含义
    sadd set1 val1 val2添加一个set1集合里的值val1,val2
    srem set1 val1从set1中移除val1
    smembers set1set1的成员
    sismember set1 val1查看val1是否在set1里,是返回1,否返回0
    sinter set1 set2求交集
    sunion set1 set2求并集
    sdiff set1 set2求差集
  5. 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 azset1中成员a的序号
    zrem zset1 a移除zset1中的a
    zcount zset1 1 6获取score为1-6之间的member数量
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值