一,在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的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。