python---redis操作

# redis也是一个数据库
# 关系型数据库mysq.....
# sql语句
#
# 非关系型数据库nosqlredis......
# 没有sql语句,基本都是 key-value 存储
# redis--数据全部存到内存里面 10w/s 适合做缓存


import redis

redis_info ={
"host": "110.40.129.50",
"password": "REDIS_123456!",
"port": 6380, # 默认6379
"db": 14 # 默认取0的数据库
}
r=redis.Redis(**redis_info) #连接方法1
#conn=redis.Redis(host="110.40.129.50",password="REDIS_123456!",
# port="6380",db="14") #连接方法2

数据类型:
#第一种 string #key,value 看类型,每个不类型不同
r.set("error_count.18612532945",5) #set插入数据 k-v
r.get("error_count.18612532945")#get获取数据
print(r.get("error_count.18612532945")) #结果b'5' 字节类型
print(r.get("error_count.18612532945").decode()) #结果'5' 变成字符串
print(r.ttl("error_count.18612532945"))#查看失效时间,不针对某个类型都可以,通用

r.set("token.18612532945","sdjfjergre",20)#第三个参数可以指定一个key的失效时间,是多少秒,到时间了自动就没了

# r.delete("error_count.18612532945") 删除
print(r.type("error_count.18612532945")) #查看key类型
print("exists",r.exists("error_count.18612532945"))#查看key是否存在,存在返回1 不存在返回0

#第二种 hash类型 是个大字典,嵌套
#hash类型 只能对外面的大key指定失效时间,里面的小key不可以
# {
# "class1":{
# "xiaohong":1,
# "xiaohong2":2
# },
# "clsaa2":{
# "xiaobai":1,
# "xiaobai2":3
# }
# }

插入:
r.hset("clsaa1","xiaohong",{"id":1,"age":18}) #k 里面是小k 存的数据
r.hset("clsaa1","xiaohei",{"id":2,"age":28})
r.hset("clsaa1","zhoujielun",{"id":3,"age":38})

r.hset("clsaa2","zhoujielun1",{"id":4,"age":48})
r.hset("clsaa2","zhoujielun2",{"id":5,"age":58})

d={"lxp02":"{'id':'2','name':'lxp2','sex':'女'}","lxp03":"{'id':'3','name':'lxp3','sex':'女'}"}
r.hmset("students",d) # 直接插入多条数据
取值:
print(r.hget("clsaa1","xiaohei"))#取出指定的
print(r.hgetall("clsaa1"))#取出所有的

删除:
r.hdel("clsaa1","xiaohei")#删除指定的key
r.delete("clsaa1") #删除大类

r.expire("clsaa1",500)#对指定的key设置失效时间
r.hexists("clsaa1","xiaohei") #指定的小key是否存在,判断小key是否存在:hexists
r.hvals("clsaa1")#获取所有value
r.hkeys("clsaa1")#获取所有小key

stus={"zhangqi":"asfewf","zhulixiang":"sdafef"}
# r.hmset("clsaa1",stus)#把这个字典插进去,传一个字典,keykvaluev,,批量,结果是建议使用r.hest
r.hest("class1",mapping=stus)#mapping参数可以指定个字典

byte类型转化为字符串类型


第一种方法:


创建连接时写入:


decode_responses=True将btye 转化为字符串

第二种方法:decode


lxp=r.hget("students","lxp2")
print(lxp.decode()) # 转化为字符串


#第三种 list

r.lpush("students","weixiangjing2","xiaohei","xiaobai")#从开头增加
# r.lpushx("students","zhulixiang") #如果这个key不存在,那么就不会新增
print(r.lrange("students",0,-1)) #取所有的
print(r.lindex("students",0)) #指定下标获取元素
print(r.llen("students")) #list的长度
print(r.linsert("students","BEFORE","xiaohei","DAHUA"))
#在指定的位置添加元素,要传key 位置(before/after) 哪个参数 实际你要插入的值
print(r.linsert("students","AFTER","xiaohei","XIAOMING"))
# r.lset("students",0,"Zhulixiang") #修改指定下标的元素
print(r.lpop("students")) #删除末尾的元素
print(r.lrange("students",0,-1)) # 取所有的
r.lrem("students",1,"xiaohei") #删除指定的元素,传0的话,删除所有的


#第四种 集合 set
r.sadd("stu2","xiaohei","xiaozi","xiaobai") #添加
r.sadd("stu3","xiaohei","xiaolan","xiaobai") #添加
print(r.smembers("stu2") )#返回这个集合里面所有的元素
#print(r.spop("stu2"))#随机删除一个元素
print(r.sismember("stu2","xiaohei")) #判断一个元素是否在这个集合里面
print(r.scard("stu2")) #返回集合种有几个元素
print(r.sinter("stu2","stu3")) #两个集合取交集


通用方法


(1)获取失效时间:ttl()


获取失效时间  -1 代表永久生效 除非是重启服务
print(r.ttl("lxp_session"))

(2)获取当前数据库中所有的key:keys()


print(r.keys()) # 获取当前数据库中的所有key
print(r.keys("*_*")) # 获取可以加条件

(3)判断key是否存在:exists()


 print(r.exists("lxp_session")) # 判断是否存在 返回0代表不存在 1代表存在

(4)查看key的类型:type()


print(r.type("lxp_session")) # 查看key的类型

(5)设置过期时间:expire()


r.expire("lxp_session",60) # 设置过期时间 前面为key 后面为过期时间 单位为秒

(6)清空所有数据库


r.flushall()# 清空所有数据库

(7)清空当前数据库


r.flushdb()# 清空当前数据库

数据迁移:


import redis
r=redis.Redis(host="xxx.xx.xx.xx",password="HK139bc&*",port=6379,db=4,decode_responses=True)
r2=redis.Redis(host="xxx.xx.xxx.xx",password="HK139bc&*",port=6379,db=11,decode_responses=True)
for k in r.keys():
k_type=r.type(k)
if k_type=="string":
value=r.get(k)
r2.set(k,value)
elif k_type=="hash":
dic=r.hgetall(k)
r2.hmset(k,dic)
elif k_type=="list":
l_len=r.llen(k)
result=r.lrange(k,0,l_len)
r2.rpush(k,*result)
 
posted @ 2021-11-04 13:54  王王的王  阅读(87)  评论(0)    收藏  举报