Python之操作redis数据库
Python操作redis数据库步骤
1、导入redis模块
2、建立连接
3、写入命令
importredis
ip='xxx.xx.xx.xx'password='123456'r=redis.Redis(host=ip,password=password,port=6379,db=1)
res=r.get('lrx2')print(res) #结果为:b'\xe5\x97\xafohyeah234324'
#结果是二进制类型的,需要将二进制类型的转成字符串类型 res.decode()
#.decode()是二进制类型转成字符串
print(res.decode()) #结果为:嗯ohyeah234324
#字符串转成byte二进制类型
res.encode()#二进制转成字符串类型
res.decode()
三、操作命令——string类型
1、删除数据库里所有的key
使用.flushdb()方法
r.flushdb() #删除这个数据库里的所有Key
2、获取所有的key
使用.keys('key')方法
print(r.keys('session*')) #获取所有的只以session开头的key
3、新增和修改
使用.set('key','value')方法
r.set('lrx','sfdsdf1232')#新增和修改都是它
4、删除
使用.delete('key')方法
r.delete('lrx') #删除指定的key
5、获取值
使用.get('key')方法
r.get('lrx') #获取key为lrx的value值
四、操作命令——哈希(hash)类型
格式:
二层字典
session={"nhy":{'sex':'男','age':18},"nhy2":{'sex':'男','age':18},
}
优点:
管理方便,易于查找。
返回值直接就是字典,不是字符串。
1、新增和修改
使用.hset('key')方法
r.hset('lrx_stus','xiaohong','{"age":23,"addr":"上海"}')#大key 小key
2、获取指定value值
使用.hget('大key','小key')方法
res=r.hget('lrx_stu','xiaohong') #指定获取里面小key的值
3、获取所有的小key
使用.hgetall('大key')方法
res=r.hgetall('lrx_stus') #获取到大key里面所有的数据
print(res)
4、删除大key
使用.delete('大key')方法
r.delete('lrx_stus') #删除大key
5、删除小key
使用.hdel('大key','小key')方法
r.hdel('lrx_stus','xiaojun') #删除指定的小key
6、返回值由二进制类型转为字符串类型
res=r.hgetall('lrx_stus') #获取到大key里面所有的数据
print(res)
new={}#1、先循环res#2、k和v decode一下,放到new这个字典里面
for k,v inres.items():
new[k.decode()]=v.decode()print('=====下面是转完之后的')print(new)#结果为:#{b'xiaojun': b'{"age":18,"addr":"\xe5\xa4\xa9\xe9\x80\x9a\xe8\x8b\x91"}'}##=====下面是转完之后的#{'xiaojun': '{"age":18,"addr":"天通苑"}'}
在连接数据库时直接加入参数:decode_responses=True,即可直接返回字符串类型数据,就不用再decode了。
五、设置redis失效时间
importflask
server=flask.Flask(__name__)def get_redis(): #只返回连接redis的链接
return redis.Redis(**setting.redis_info)
@server.route('/login',methods=['post','get'])deflogin():
uname=flask.request.values.get('username')
pwd=flask.request.values.get('password')if uname andpwd:
sql="select * from lrx_user_table where username='%s' and password='%s';" %(uname,pwd)
sessionid=tools.my_md5(uname)
login_time=time.strftime("%Y%m%d%H%M%S")
u_id=result[0].get('id')
r=get_redis()
r.set('lrx_session:%s'%u_id,sessionid,60) #存redis的key、value、失效时间
res={"error_code":200,"sessionid":sessionid,"login_time":login_time}else:
res={"error_code":3001,"msg":"必填信息不全,请查看接口文档"}return json.dumps(res,ensure_ascii=False,indent=4)
@server.route('/pay',methods=['post'])defpay():
uid=flask.request.values.get('userid')
m= flask.request.values.get('money')
sessionid= flask.request.values.get('session')if uid and m andsessionid:
r=get_redis()
result=r.get('lrx_session:%s'%uid)if sessionid==result:
sql="select balance from lrx_account_table where u_id='%s';" %uid
bal=tools.my_mysqldb(sql)[0].get('balance')
balance=float(bal)
res={"error_code":200,"msg":"ok"}else:
res={"error_code":3003,"msg":"session已过期,请重新登录"}else:
res={"error_code":3001,"msg":"必填信息不全,请查看接口文档"}return json.dumps(res,ensure_ascii=False)
server.run(**server_info)