美文网首页django
Django-33 Redis2

Django-33 Redis2

作者: JuliusL | 来源:发表于2021-12-18 01:42 被阅读0次

    安装

    pip3 freeze|grep -i redis
    pip3 install redis

    操作流程

    1,建立连接对象

    import redis
    r = redis.Redis(host='127.0.0.1',port=6379,db=0,password='123456')
    

    2,连接对象.redis命令即可
    例如:r.set(key,value)
    说明:大部分命令跟redis终端中使用雷同

    位图

    常用命令

    • setbit key index (0|1)
    1. key 不存在时,初始化最小字节数的bit位,默认补0
    2. key存在时:满足长度要求,直接修改当前bit位,不满足的话在原有value上初始化最小字节数的bit位。
    • setbit key offset
      获取某一位上的值,返回0或1

    • bitcount key start end
      统计key的值中有多少个1
      注:start和end是字节的索引而不是bit位的索引

    应用场景

    • 假设现在我们希望记录自己网站上的用户上线频率,比如说计算用户A上线了多少天,用户B上线了多少天,诸如此类,此作为数据,从而决定让哪些用户参加重要活动——这个模式可以使用SETBIT和SETCOUNT来实现。
      哪天上线就在那一天的offset值1。

    哈希

    定义

    1. 由field和关联的value组成的键值对
    2. field和value必须是字符串类型
    3. 一个hash中最多包含2^32-1个键值对

    优缺点

    优点:

    • 节约内存空间-特定条件下【1、字段小于512个,2、value不能超过64字节】,如果超过了条件,则不是用散列算法存了。会影响效率。
    • 可按需获取字段的值
      缺点:
    • 使用过期key功能,key过期功能只能对key进行过期操作,而不能对散列的字段进行过期操作
    • 存储消耗大于字符串结构

    常用命令

    • hset key field value
    • hsetnx key field value
      field不存在则存
    • hmset key field value field value
      设置多个字段
    • hlen key
      返回字段个数
    • hexists key field
      判断字段是否存在,不存在返回0
    • hget key field
      返回字段值
    • hmget key field field
      返回多个字段值
    • hgetall key
      返回所有键值对
    • hkeys key
      返回key所有的字段名
    • hvals key
      返回key所有值
    • hdel key field
      删除key的field
    • hincrby key field increment
    • hincrbyfloat key field increment
      在字段对应值上进行整数增量运算

    应用场景

    1、用户维度数据统计
    原理:基于hash压缩特点,和字段可计数
    用户维度统计
    统计包括:关注数、粉丝数、喜欢商品数、发帖数
    用户key,不同维度为field,value为统计数
    比如关注了5人

    hset user:10000 fans 5
    hincrby user:10000 fans 1
    hincrby user:10000 fans -1
    

    2、缓存
    redis+mysql+hash组合使用
    原理:可以按需求取出字段数据,也比较适合做缓存
    示例:
    用户想要查询个人信息
    1、到redsi中查询个人信息
    2、redis中查不到,到mysql查询,并缓存到redis
    3、再次查询个人信息

    集合

    基础概念

    1、无序、去重
    2、元素是字符串类型
    3、最多包含2^32-1个元素
    类似于Python中所学集合

    常用命令

    • sadd key member1 member2
      增加一个或多个元素,自动去重,返回值为成功插入到集合的元素个数
    • smembers key
      查看集合中的所有元素
    • srem key member1 member2
      删除一个或多个元素,元素不存在自动忽略
    • sismemeber key member
      元素是否存在
    • srandmember key [count]
      随机返回集合中指定个数的元素,默认为1个
    • spop key [count]
      弹出成员
    • scard key
      返回集合中元素的个数
    • smove source destination member
      把元素从源集合移动到目标集合
    • sdiff key1 key2
      差集(number1 1 2 3 number2 1 2 4 结果为3(左减右为3))
    • sdiffstore destination key1 key2
      差集保存到另一个集合中
    • sinter key1 key2
    • sinterstore destination key1 key2
      交集
    • sunion key1 key2
    • sunionstore destination key1 key2
      并集

    应用场景

    社交类平台,共同好友-交集
    纯随机类抽奖
    防止元素重复
    黑/白名单

    集合如果元素全是整型并且元素个数512个以内,用的是数组实现,否则用的是哈希
    • object encoding 集合key
      返回该集合的底层实现
      hashtable | intset

    有序集合

    基础概念
    1、有序,去重
    2、元素是字符串类型
    3、每个元素都关联着一个浮点数分值(score),并按照分值从小到大的顺序排列集合中的元素(分值可以相同)
    4、最多包含2^32-1个元素

    常用命令

    • zadd key score member
      在有序集合中添加一个成员,返回值是成功插入到集合中的元素个数
    • zrange key start stop [withscore]
      查看指定区间元素(升序)
    • zrevrange key start stop [withscore]
      查看指定区间元素(降序)
    • zscore key member
      查看指定元素的分值
    • zrangebyscore key min max [withscore] [limit offset count]
      返回指定区间元素
      参数说明:
      min/max:最小值最大值区间,默认闭区间(大于等于或小于等于);(min,可开启开区间(大于或小于))
      offset:跳过多少个元素
      count:返回几个
      limit:选项跟mysql一样
    • zrem key member
      删除成员
    • zincrby key increment member
      增加或减少分值
    • zrank key member
      返回元素排名
    • zremrangebyscore key min max
      删除指定区间内的元素(默认闭区间,可做开区间)
    • zcard key
      返回集合中元素的个数
    • zcount key min max
      返回指定范围中元素的个数(默认闭区间,可做开区间)
    • zunionstore destination numkeys key [weights权重值] [aggregate sum|min|max]

    zunionstore salary3 2 salary salary2 weight 1 0.5 aggregate max

    2代表集合数量,weights之后,权重1给salary,权重0.5给salary2集合,算完权重之后执行聚合aggregate

    应用场景

    各种排行榜

    相关文章

      网友评论

        本文标题:Django-33 Redis2

        本文链接:https://www.haomeiwen.com/subject/ccpbfrtx.html