Django-33 Redis2 位图 哈希 集合 有序集合 zunionstore salary3 2 salary salary2 weight 1 0.5 aggregate max

安装

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

应用场景

各种排行榜

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章