使用python操作redis数据库

本文详细介绍了在Linux环境下使用Redis的方法,包括连接、基本命令如set、get、ttl的使用,以及如何通过Python脚本批量操作Redis,提高数据处理效率。

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

一,在Linux环境下:

1,连接redis

redis-cli -h host -p port -a password
比如:

redis-cli -h  172.16.15.2008 -p 6379 -a 4uM5ormgE3YsssssssiBZvDT2dRPybFh --raw
172.16.15.2008:6379>
 

然后就是在redis界面进行操作了,常用的set,get,ttl等

#1,查询key的值
get key
#2, 设置一个<key,value>
set key value
如:set mid_123 'phone,ipad'

参考连接:https://www.redis.net.cn/order/3528.html

二,使用python操作redis

1, 对redis的连接,查询,删除,增加操作

#连接
def conn_redis():
    redis_cli = redis.StrictRedis(host='rcs.com',port=6379,db=0,password='8z',decode_responses=True)
    #redis_cli = redis.StrictRedis(host='127.0.0.1',port=6379,db=0)
    return redis_cli
#设置并加上生命周期
def set_item_feat(delete_item_id_list):
    rds = conn_redis()
    for itemid in delete_item_id_list:
        print(itemid)
        rds.set(itemid,"sssss")
        rds.expire(itemid,60*60*2)
    rds.close()
#查询
def get_item_feat(item_list):
    rds = conn_redis()
    for itemid in item_list:
        item_f = rds.get(itemid)
        ttl = rds.ttl(itemid)
        print itemid,item_f,ttl
        #print item_f
        #print("{}:{}".format(itemid,item_f))
    rds.close()
#删除
def delete_item_feat(delete_item_id_list):
    rds = conn_redis()
    for itemid in delete_item_id_list:
        print(itemid)
        rds.delete(itemid)
    rds.close()
def main():
    #search redis
    search_file = "search_item_id"
    item_id_list = [line.strip() for line in open(search_file,'r').readlines()]
    get_item_feat(item_id_list)

    #delete redis
    delete_file = "delete_itemid"
    delete_item_id_list = [line.strip() for line in open(delete_file,'r').readlines()]
    #删除
    print("delete_item_id_list:")
    delete_item_feat(delete_item_id_list)
    
    #增加
    #print("set_item_feat:")
    set_item_feat(delete_item_id_list)

    print("new:")
    get_item_feat(item_id_list)

2,获取redis中的key

使用keys()命令获取全量的或者部分的key

def get_keys():
    rds = connect_redis()
    #获取全部的key
    all_keys = rds.keys('*')
    #获取以’mid‘开头的key
    mid_keys = rds.keys('mid*')
    for k in all_keys:
        print(k)
    for k in mid_keys:
        print(k)

使用scan()命令增量获取部分keys

#参数分别是:起始位置,匹配模式,匹配的个数
len_1000_key = rds.scan(-1,'new_cat_1_*',1000)

 

然后使用mget批量的得到key对应的value,如下所示:

#analyze_query_catelist函数是解析函数,根据具体返回的数据格式来处理
rds = connect_redis()
batch_num = 100
wfilename = "query_code_cateid_file"
filename = 'cate_query_1_file'
key_list = [line.strip() for line in open(filename,'r').readlines()]
wfile = open(wfilename,'w')
tmp_key_list = []
for key in key_list:
    if len(tmp_key_list) > batch_num:
        ft_list = rds.mget(tmp_key_list)
        for idx in range(len(ft_list)):
            query = tmp_key_list[idx]
            feature = ft_list[idx]
            feature2 = analyze_query_catelist(feature)
            strm = query+"\t"+",".join(feature2)
            wfile.write(strm+"\n")
        tmp_key_list = []
    tmp_key_list.append(key)
if len(tmp_key_list) > 0:
    ft_list = rds.mget(tmp_key_list)
    for idx in range(len(ft_list)):
        query = tmp_key_list[idx]
        feature = ft_list[idx]
        feature2 = analyze_query_catelist(feature)
        wfile.write(query+"\t"+",".join(feature2)+"\n")
rds.close()
wfile.close()
    

 

 

三,对于操作大量数据时

1,使用Python脚本批量插入数据

为了保证灌入数据的效率,需要批量插入。批量插入在一次连接时插入多条数据,效率高很多。

1,使用mset可以批量插入

缺点是不能设置生命周期

2,使用pipeline批量插入,并设置生命周期

代码如下:

import redis
#每次批量插入10000条,设置生命周期是604800
def input2redis(filename):
    global redis_cli      

    with redis_cli.pipeline(transaction=False) as redis_pp:
        num = 1
        readfile = open(filename,'r')
        redis_list = []
        while True:       
            line = readfile.readline()
            num += 1     
            if not line: 
                break
            line = line.strip().split("\t")
            redis_list.append(line)
            if len(redis_list) > 10000:
                for line in redis_list:
                    redis_pp.set(line[0],line[1],604800)   
                redis_pp.execute()
                #print("Insert to redis")
                #print(redis_list[0][0])
                #print(redis_list[0][1])
                redis_list = [] 

四,在linux环境下对redis进行操作

1,可以直接在linux下操作redis,与在redis环境下一样

比如查某个key

#获取key为‘new_cat_1_123542’的值
redis-cli -h r-2.com -p 6379 -a '34ddd8w' get 'new_cat_1_123542'

redis-cli -h 'r-2.com' -p 6379 -a '34ddd8w' get 'new_cat_1_123542'

#获取key为‘new_cat_1_123542’的生命周期
redis-cli -h 'r-2.com' -p 6379 -a '34ddd8w' ttl 'new_cat_1_123542'

 

2,批量的对于redis下的key进行加生命周期

#将前缀为‘shm_word_’的key加上生命周期2592000
redis-cli -h 'r-om' -p 6379 -a '348w' keys "shm_word_*" | xargs -i redis-cli -h 'r-om' -p 6379 -a '348w' expire {} 2592000

 其中 xargs 的参数i的含义为:-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一杯拿铁go

你的打赏是我更新最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值