千家信息网

Python redis的操作方法有哪些

发表于:2024-09-23 作者:千家信息网编辑
千家信息网最后更新 2024年09月23日,今天小编给大家分享一下Python redis的操作方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下
千家信息网最后更新 2024年09月23日Python redis的操作方法有哪些

今天小编给大家分享一下Python redis的操作方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

位图操作bitmap

定义

1、位图不是真正的数据类型,它是定义在字符串类型中2、一个字符串类型的值最多能存储512M字节的内容,位上限:2^32# 1MB = 1024KB# 1KB = 1024Byte(字节)# 1Byte = 8bit(位)

强势点

可以实时的进行统计,极其节省空间。官方在模拟1亿2千8百万用户的模拟环境下,在一台MacBookPro上,典型的统计如"日用户数"的时间消耗小于50ms, 占用16MB内存

SETBIT 命令

  • 说明:设置某位置上的二进制值

  • 语法:SETBIT key offset value

  • 参数:offset - 偏移量 从0开始

    value - 0或者1

  • 示例:

# 默认扩展位以0填充127.0.0.1:6379> SET mykey abOK127.0.0.1:6379> GET mykey"ab"127.0.0.1:6379> SETBIT mykey 0 1(integer) 0127.0.0.1:6379> GET mykey"\xe1b"127.0.0.1:6379>

GETBIT 命令

  • 说明:获取某一位上的值

  • 语法:GETBIT key offset

  • 示例:

127.0.0.1:6379> GETBIT mykey 3(integer) 0127.0.0.1:6379> GETBIT mykey 0(integer) 1127.0.0.1:6379>

BITCOUNT 命令

  • 说明:统计键所对应的值中有多少个 1

  • 语法:BITCOUNT key start end

  • 参数:start/end 代表的是 字节索引

  • 示例:

127.0.0.1:6379> SET mykey1 abOK127.0.0.1:6379[4]> BITCOUNT mykey(integer) 6127.0.0.1:6379[4]> BITCOUNT mykey 0 0(integer) 3

应用场景案例

# 网站用户的上线次数统计(寻找活跃用户)        用户名为key,上线的天作为offset,上线设置为1# 示例        用户名为 user1:login 的用户,今年第1天上线,第30天上线        SETBIT user1:login 0 1         SETBIT user1:login 29 1        BITCOUNT user1:login

Hash散列数据类型

  • 定义

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

1、节约内存空间 - 特定条件下 【1,字段小于512个,2:value不能超过64字节】2、可按需获取字段的值
  • 缺点(不适合hash情况)

1,使用过期键功能:键过期功能只能对键进行过期操作,而不能对散列的字段进行过期操作2,存储消耗大于字符串结构
  • 基本命令操作

# 1、设置单个字段HSET key field valueHSETNX key field value# 2、设置多个字段HMSET key field value field value# 3、返回字段个数HLEN key# 4、判断字段是否存在(不存在返回0)HEXISTS key field# 5、返回字段值HGET key field# 6、返回多个字段值HMGET key field filed# 7、返回所有的键值对HGETALL key# 8、返回所有字段名HKEYS key# 9、返回所有值HVALS key# 10、删除指定字段HDEL key field # 11、在字段对应值上进行整数增量运算HINCRBY key field increment# 12、在字段对应值上进行浮点数增量运算HINCRBYFLOAT key field increment

python操作hash

# 1、更新一条数据的属性,没有则新建hset(name, key, value) # 2、读取这条数据的指定属性, 返回字符串类型hget(name, key)# 3、批量更新数据(没有则新建)属性,参数为字典hmset(name, mapping)# 4、批量读取数据(没有则新建)属性hmget(name, keys)# 5、获取这条数据的所有属性和对应的值,返回字典类型hgetall(name)# 6、获取这条数据的所有属性名,返回列表类型hkeys(name)# 7、删除这条数据的指定属性hdel(name, *keys)

应用场景:用户维度数据统计

用户维度统计   统计数包括:关注数、粉丝数、喜欢商品数、发帖数   用户为key,不同维度为field,value为统计数   比如关注了5人         HSET user:10000 fans 5         HINCRBY user:10000 fans 1

python操作hash

import redis# 创建redis数据库的连接对象r = redis.Redis(password='123456')# 操作hashr.hset('pyhk1', 'username', 'aid2102')r.hmset('pyhk1', {'age': 18, 'major': 'python'})print(r.hget('pyhk1', 'username').decode())print(r.hmget('pyhk1', ['username', 'age']))print(r.hgetall('pyhk1'))# 字典推导式data = {k.decode(): v.decode() for k, v in r.hgetall('pyhk1').items()}print(data)r.hdel('pyhk1','age')print(r.hgetall('pyhk1'))# 删除键r.delete('pyhk1')

集合数据类型(set)

  • 特点

1、无序、去重2、元素是字符串类型3、最多包含2^32-1个元素
  • 基本命令

# 1、增加一个或者多个元素,自动去重;返回值为成功插入到集合的元素个数SADD key member1 member2# 2、查看集合中所有元素SMEMBERS key# 3、删除一个或者多个元素,元素不存在自动忽略SREM key member1 member2# 4、元素是否存在SISMEMBER key member# 5、随机返回集合中指定个数的元素,默认为1个SRANDMEMBER key [count]# 6、弹出成员SPOP key [count]# 7、返回集合中元素的个数,不会遍历整个集合,只是存储在键当中了SCARD key# 8、把元素从源集合移动到目标集合SMOVE source destination member# 9、差集(number1 1 2 3 number2 1 2 4 结果为3)SDIFF key1 key2 # 10、差集保存到另一个集合中SDIFFSTORE destination key1 key2# 11、交集SINTER key1 key2SINTERSTORE destination key1 key2# 11、并集SUNION key1 key2SUNIONSTORE destination key1 key2

案例: 新浪微博的共同关注

# 需求: 当用户访问另一个用户的时候,会显示出两个用户共同关注过哪些相同的用户# 设计: 将每个用户关注的用户放在集合中,求交集即可# 实现:        user001 = {'peiqi','qiaozhi','danni'}        user002 = {'peiqi','qiaozhi','lingyang'}  user001和user002的共同关注为:        SINTER user001 user002        结果为: {'peiqi','qiaozhi'}

python操作set

import redisr = redis.Redis(password='123456')'''   武将: 张飞 许褚 赵云 马超 周瑜   文臣: 诸葛亮 周瑜 司马懿   结果: 1.纯武将 2.纯文臣  3.文武双全  4.文臣武将'''# set集合类型的操作r.sadd('武将', '张飞', '许褚', '赵云', '马超', '周瑜')r.sadd('文臣', '诸葛亮', '周瑜', '司马懿')data1 = r.sdiff('武将', '文臣')result = []for item in data1:    result.append(item.decode())print('纯武将:', result)data2 = r.sdiff('文臣', '武将')result = []for item in data2:    result.append(item.decode())print('纯文臣:', result)data3 = r.sinter('文臣', '武将')result = []for item in data3:    result.append(item.decode())print('文武双全:', result)data4 = r.sunion('文臣', '武将')result = []for item in data4:    result.append(item.decode())print('文臣武将:', result)

有序集合sortedset

  • 特点

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

    一个保存了水果价格的有序集合

分值2.04.06.08.010.0
元素西瓜葡萄芒果香蕉苹果

一个保存了员工薪水的有序集合

分值600080001000012000
元素lucytomjimjack

一个保存了正在阅读某些技术书的人数

分值300400555666777
元素核心编程阿凡提本拉登阿姆斯特朗比尔盖茨
  • 有序集合常用命令

# 在有序集合中添加一个成员 返回值为 成功插入到集合中的元素个数zadd key score member# 查看指定区间元素(升序)zrange key start stop [withscores]# 查看指定区间元素(降序)zrevrange key start stop [withscores]# 查看指定元素的分值zscore key member# 返回指定区间元素# offset : 跳过多少个元素# count : 返回几个# 小括号 : 开区间  zrangebyscore fruits (2.0 8.0zrangebyscore key min max [withscores] [limit offset count]# 每页显示10个成员,显示第5页的成员信息: # limit 40 10# MySQL: 每页显示10条记录,显示第5页的记录# limit 40,10# limit 2,3   显示: 第3 4 5条记录# 删除成员zrem key member# 增加或者减少分值zincrby key increment member# 返回元素排名zrank key member# 返回元素逆序排名zrevrank key member# 删除指定区间内的元素zremrangebyscore key min max# 返回集合中元素个数zcard key# 返回指定范围中元素的个数zcount key min maxzcount salary 6000 8000 zcount salary (6000 8000# 6000

python操作sorted set

import redisr = redis.Redis(password='123456')# 有序集合类型的操作r.zadd('pyzk1', {'tedu': 100, 'tedu2': 200})print(r.zrange('pyzk1', 0, -1, withscores=True))r.zadd('pyzk2', {'tedu2': 200, 'tedu3': 200})# 并集运算r.zunionstore('pyzk3',['pyzk1','pyzk2'],aggregate='sum')print(r.zrange('pyzk3', 0, -1, withscores=True))# 并集运算(带权重)r.zunionstore('pyzk4',{'pyzk1':0.8,'pyzk2':0.2},              aggregate='sum')print(r.zrange('pyzk4', 0, -1, withscores=True))

以上就是"Python redis的操作方法有哪些"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

0