Python之操作redis数据库

Stella981
• 阅读 717
  • 使用redis模块

一、操作redis

1、添加信息

(1)直接建key-value信息:

  • 右键-Add New Key,手动添加key和value

Python之操作redis数据库

Python之操作redis数据库

  • 右键-Console,打开控制台,写入命令

Python之操作redis数据库

Python之操作redis数据库

(2)建个文件夹,在文件夹里面建key-value信息:

只需在Add New Key的Key中建立文件夹名:key即可。

Python之操作redis数据库

Python之操作redis数据库

多个冒号就是多个文件夹。

2、存储类型

(1)String类型:

Python之操作redis数据库

(2)哈希hash类型:

Python之操作redis数据库

二、Python操作redis数据库步骤

1、导入redis模块

2、建立连接

3、写入命令

import redis

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

Python之操作redis数据库

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 in res.items():
    new[k.decode()]=v.decode()
print('=====下面是转完之后的')
print(new)

#结果为:
#{b'xiaojun': b'{"age":18,"addr":"\xe5\xa4\xa9\xe9\x80\x9a\xe8\x8b\x91"}'}
#<class 'dict'>
#=====下面是转完之后的
#{'xiaojun': '{"age":18,"addr":"天通苑"}'}

在连接数据库时直接加入参数:decode_responses=True,即可直接返回字符串类型数据,就不用再decode了。

 五、设置redis失效时间

import flask
server=flask.Flask(__name__)
def get_redis(): #只返回连接redis的链接
    return redis.Redis(**setting.redis_info)

@server.route('/login',methods=['post','get'])
def login():
    uname=flask.request.values.get('username')
    pwd=flask.request.values.get('password')
    if uname and pwd:
        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'])
def pay():
    uid=flask.request.values.get('userid')
    m = flask.request.values.get('money')
    sessionid = flask.request.values.get('session')
    if uid and m and sessionid:
        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)
        

Python之操作redis数据库

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
2年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
2年前
Nginx + lua +[memcached,redis]
精品案例1、Nginxluamemcached,redis实现网站灰度发布2、分库分表/基于Leaf组件实现的全球唯一ID(非UUID)3、Redis独立数据监控,实现订单超时操作/MQ死信操作SelectPollEpollReactor模型4、分布式任务调试Quartz应用
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
2年前
SpringBoot使用RedisTemplate操作Redis时,key值出现 -xac-xed-x00-x05t-x00-tb
原因分析原因与RedisTemplate源码中的默认序列化方式有关defaultSerializernewJdkSerializationRedisSerializer(classLoader!null?classLoader:this.getClass().getClassLoader()
Stella981 Stella981
2年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Easter79 Easter79
2年前
SpringBoot使用RedisTemplate操作Redis时,key值出现 -xac-xed-x00-x05t-x00-tb
原因分析原因与RedisTemplate源码中的默认序列化方式有关defaultSerializernewJdkSerializationRedisSerializer(classLoader!null?classLoader:this.getClass().getClassLoader()
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这