# redis也是一个数据库
# 关系型数据库mysq。。。
# 有sql语句
#
# 非关系型数据库nosql,redis。。。。。
# 没有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 #k-v 看类型,每个不类型不同
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})
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是否存在
r.hvals("clsaa1")#获取所有value
r.hkeys("clsaa1")#获取所有小key
stus={"zhangqi":"asfewf","zhulixiang":"sdafef"}
# r.hmset("clsaa1",stus)#把这个字典插进去,传一个字典,key是k,value是v,,批量,结果是建议使用r.hest
r.hest("class1",mapping=stus)#mapping参数可以指定个字典
#第三种 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")) #两个集合取交集