python操作redis,一次插入字典多个值

博客介绍了在Redis中对name对应的hash进行操作的方法,包括设置键值对(hmset批量设置)、获取值(hget、hmget、hgetall等)、获取个数(hlen)、获取key和values值(hkeys、hvals)、判断key是否存在(hexists)、删除key(hdel)、自增(hincrby、hincrbyfloat)以及增量式迭代获取数据(hscan、hscan_iter)等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import redis
fd = redis.Redis(host='127.0.0.1', password="123!@#456", port = 6379, db =1)
#连接池
#pool = redis.ConnectionPool(host='127.0.0.1',password='123!@#456',port=8080)
#hset(name, key, value)
fd.hset('k4','username','alex')

name对应的hash中设置一个键值对(不存在,则创建;否则,修改)
参数:

# name,redis的name
# key,name对应的hash中的key
# value,name对应的hash中的value

注:

# hsetnx(name, key, value),当name对应的hash中不存在当前key时则创建(相当于添加)
# 在name对应的hash中批量设置键值对

hmset 批量设置值
参数:

# name,redis的name
# mapping,字典,如:{'k1':'v1', 'k2': 'v2'} 

如:

fd.hmset('xx', {'k1':'v1', 'k2': 'v2'})

hget(name,key)

val = fd.hget('k4','username')
#在name对应的hash中获取根据key获取value

hmget 获取多个值

# 在name对应的hash中获取多个key的值
#参数:
    # name,reids对应的name
    # keys,要获取key集合,如:['k1', 'k2', 'k3']
    # *args,要获取的key,如:k1,k2,k3
 
# 如:
fd.mget('xx', ['k1', 'k2'])
# 或
print r.hmget('xx', 'k1', 'k2')

hgetall 获取name对应的all

#获取name对应hash的所有键值

'''
    k4:{
    username:alex,
    age:18
    }

'''
val=conn.hgetall('k4')

#结果
{
    username:alex,
    age:18
    }

hlen 获取个数

fd.hlen(name)
# 获取name对应的hash中键值对的个数

hkeys 获取key值

fd.hkeys(name)
# 获取name对应的hash中所有的key的值

hvals 获取values值

hvals(name)
# 获取name对应的hash中所有的value的值

hexists 判断是否有key值

fd.hexists(name, key)
# 检查name对应的hash是否存在当前传入的key

hdel 删除key

fd.hdel(name,*keys)
# 将name对应的hash中指定key的键值对删除

hincrby 自增值

fd.hincrby(name, key, amount=1)
# 自增name对应的hash中的指定key的值,不存在则创建key=amount
# 参数:
    # name,redis中的name
    # key, hash对应的key
    # amount,自增数(整数)

**hincrbyfloat 自增值浮点型 **

fd.hincrbyfloat(name, key, amount=1.0)
# 自增name对应的hash中的指定key的值,不存在则创建key=amount
 
# 参数:
    # name,redis中的name
    # key, hash对应的key
    # amount,自增数(浮点数)
 
# 自增name对应的hash中的指定key的值,不存在则创建key=amount

hscan 增量式迭代获取

fd.hscan(name, cursor=0, match=None, count=None)
# 增量式迭代获取,对于数据大的数据非常有用,hscan可以实现分片的获取数据,并非一次性将数据全部获取完,从而放置内存被撑爆
 
# 参数:
    # name,redis的name
    # cursor,游标(基于游标分批取获取数据)
    # match,匹配指定key,默认None 表示所有的key
    # count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
 
# 如:
    # 第一次:cursor1, data1 = r.hscan('xx', cursor=0, match=None, count=None)
    # 第二次:cursor2, data1 = r.hscan('xx', cursor=cursor1, match=None, count=None)
    # ...
    # 直到返回值cursor的值为0时,表示数据已经通过分片获取完毕

hscan_iter 实现分批去redis中获取数据

fd.hscan_iter(name, match=None, count=None)
# 利用yield封装hscan创建生成器,实现分批去redis中获取数据
 
# 参数:
    # match,匹配指定key,默认None 表示所有的key
    # count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
 
# 如:
    # for item in r.hscan_iter('xx'):
    #     print item

### 将Pandas DataFrame最后一行存入Redis并用PHP读取 为了实现这一目标,可以按照以下流程操作: #### Python端:将DataFrame的最后一行插入Redis作为Hash 假设有一个名为`dataframe_handled`的DataFrame对象,其中包含了多条记录。要提取最后一行并将之保存至Redis中作为一个哈希表项,可采用如下代码片段[^1]。 ```python import redis import pandas as pd # 建立与本地Redis服务器连接 r = redis.Redis(host='localhost', port=6379, db=0) # 获取DataFrame的最后一行数据 last_row = dataframe_handled.iloc[-1] # 构建键名前缀 prefix = "latest_entry" # 创建唯一的hash key名称 hash_key = f"{prefix}:{last_row['part_num']}:{last_row['name']}" # 准备要存储的数据字典 row_dict = { last_row.index[i]: str(last_row.values[i]) for i in range(len(last_row)) } # 向Redis中的指定hash key插入或更新字段 for field_name, field_value in row_dict.items(): r.hset(hash_key, mapping={field_name: field_value}) ``` 这段脚本首先建立了与Redis实例之间的通信链接;接着选取了给定DataFrame的最后一行,并构建了一个新的散列表来表示这条记录的信息;最后利用`hset()`函数把上述信息写回到Redis数据库里去。 #### PHP端:从Redis获取特定Hash 当需要在PHP应用程序内访问之前由Python程序设置好的那个特殊hash时,则可以通过下面的方法完成查询工作[^2]。 ```php <?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379); // 定义想要查找的目标hash key $target_hash_key = 'latest_entry:<part_num>:<machine_name>'; // 执行HGETALL命令取出整个hash的内容 $result = $redis->hGetAll($target_hash_key); print_r($result); // 输出结果供调试查看 ?> ``` 这里需要注意的是,在实际部署环境中应当替换掉占位符 `<part_num>` 和 `<machine_name>` 成具体的数以匹配先前创建的那个唯一标识符 `hash_key` 的模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值