常用命令
# 设置某一位上的值,offset是偏移量,从0开始 setbit key offset value # 获取某一位上的值 getbit key offset # 统计键所对应的值中有多少个,二进制中1的格式 bitcount key应用场景
网站用户的上线次数统计(寻找活跃用户)
用户名为key,上线天数为offset,上线设置为1
示例:用户名为user001的用户,今年第1天上线,第30天上线
setbit user 001 setbit user 29 1 bitcount user001python文件
import redis r = redis.Redis(host="127.0.0.1", port=6379, db=0) #user1:一年之中第一天和第五天登录 r.setbit("user1", 0, 1) r.setbit("user1", 4, 1) #user2:一年之中第100天和第200天登录 r.setbit("user2", 99, 1) r.setbit("user2", 199, 1) #user3:一年中有100天以上登录 for i in range(0, 365, 2): r.setbit("user3", i, 1) #user4:一年中有100天以上登录 for i in range(0, 365, 3): r.setbit("user4", i, 1) #统计活跃用户和非活跃用户 ## 先找到所有用户 user_list = r.keys("user*") ## 定义两个列表,活跃用户和非活跃用户 active_users = [] no_active_users = [] for user in user_list: # 统计位图中有多少个1 login_count = r.bitcount(user) if login_count >= 100: active_users.append((user, login_count)) else: no_active_users.append((user, login_count)) #打印活跃用户 #活跃用户: [(b'user4', 122), (b'user3', 183)] for user in active_users: print("活跃用户:%s 活跃次数:%s" % (user[0].decode(), user[1])) 3. 散列 3.1 概述 3.1.1 定义由filed和关联的value组成的键值对
filed和value是字符串类型
一个hash中最多包含个键值对
3.2.1 优点节约内存空间
每创建一个键,他都会为这个键存储一些附加的管理信息(比如这个键的类型,这个键最后一次访问的事件等)
键越多,redis数据库在存储附件管理信息方面耗费内存越多,花在管理数据库键上的CPU也会越多
3.2.2 缺点使用二进制位操作命令:setbit、getbit、bitcount等,如果想使用这些操作,只能用字符串键
使用过期功能:键过期功能只能对键进行过期操作,而不能对散列的字段进行过期操作
3.2 基本命令 # 1、设置单个字段 hset key filed value hsetnx key filed value # 2、设置多个字段 hmset key filed value filed value # 3、返回字段个数 hlen key # 4、判断字段是否存在(不存在返回0) hexists key field # 5、返回字段值 hget key field # 6、返回多个字段值 hmget key field1 filed2 # 7、返回所有键值对 hgetall key # 8、返回字段长度 hlen key # 9、返回所有字段名 hkeys key # 10、返回所有值 hvals key # 11、删除指定字段 hdel key field1 field2 field3 # 12、在字段对应值上进行整数增量运算 hincrby key filed increment # 13、在字段对应值上进行浮点数增量运算 hincrbyfloat key filed increment 4. 集合与python集合类似
4.1 概述无序、去重
元素是字符串类型
最多包含个元素
4.2 基本命令 # 1、增加一个或多个元素,自动去重 sadd key member1 member2 # 2、查看集合中所有元素 smembers key # 3、删除一个或多个元素,元素不存在则自动忽略 sismember key count # 4、随机弹出元素(默认弹出一个) spop key [count] # 5、元素是否存在(返回1表示存在,0表示不存在) sismember key member # 6、随机返回集合中指定个数的元素,默认一个 srandmember key count # 7、返回集合中元素的个数,不会遍历整个集合,只是存储在键当中 scard key # 8、把元素从源集合移动到目标集合 smove source desctination member # 9、差集(number1 1 2 3 4 number2 1 2 4) sdiff key1 key2 sdiffstore destination key1 key2 #将差集保存至新集合里 # 10、交集 sinter key1 key2 sinserstore destination key1 key2 #同上 # 11、并集 sunion key1 key2 sunionstore destination key1 key2 #同上sina的共同关注
需求:当用户访问另一个用户的时候,会显示出两个用户共同关注过哪些相同的用户
设计:将每一个用户关注的用户放在集合,求交集即可
实现:
user001 = {"peiqi", "qiaozhi", "danni"}