Python redis的操作方法有哪些

77次阅读
没有评论

共计 5653 个字符,预计需要花费 15 分钟才能阅读完成。

今天丸趣 TV 小编给大家分享一下 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 ab
127.0.0.1:6379  GET mykey
127.0.0.1:6379  SETBIT mykey 0 1
(integer) 0
127.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) 0
127.0.0.1:6379  GETBIT mykey 0
(integer) 1
127.0.0.1:6379

BITCOUNT 命令

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

语法:BITCOUNT key start end

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

示例:

127.0.0.1:6379  SET mykey1 ab
127.0.0.1:6379[4]  BITCOUNT mykey
(integer) 6
127.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 value
HSETNX 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)
#  操作 hash
r.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 key2
SINTERSTORE destination key1 key2
# 11、并集
SUNION key1 key2
SUNIONSTORE destination key1 key2

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

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

python 操作 set

import redis
r = 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.0
zrangebyscore 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 max
zcount salary 6000 8000 
zcount salary (6000 8000# 6000 salary =8000
zcount salary (6000 (8000#6000 salary 8000 
#  并集
zunionstore destination numkeys key [weights  权重值] [AGGREGATE SUM|MIN|MAX]
# zunionstore salary3 2 salary salary2 weights 1 0.5 AGGREGATE MAX
# 2 代表集合数量,weights 之后   权重 1 给 salary, 权重 0.5 给 salary2 集合, 算完权重之后执行聚合 AGGREGATE
 
#  交集:和并集类似,只取相同的元素
zinterstore destination numkeys key1 key2 weights weight AGGREGATE SUM(默认)|MIN|MAX

python 操作 sorted set

import redis
r = 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 的操作方法有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,丸趣 TV 小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计5653字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)