zoukankan      html  css  js  c++  java
  • python学习笔记(十六)python操作redis数据库

    Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。
    
     Redis特点
    Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。以设置和获取一个256字节字符串为例,它的读取速度可高达110000次/s,写速度高达81000次/s。
    Redis跟memcache不同的是,储存在Redis中的数据是持久化的,断电或重启后,数据也不会丢失。因为Redis的存储分为内存存储、磁盘存储和log文件三部分,重启后,Redis可以从磁盘重新将数据加载到内存中,这些可以通过配置文件对其进行配置,正因为这样,Redis才能实现持久化。
    Redis支持主从模式,可以配置集群,这样更利于支撑起大型的项目,这也是Redis的一大亮点。

    redis的操作

     1 import redis
     2 #r=redis.Redis(host='211.149.218.16',port=6379,password='123456',db=2)#连接redis
     3 
     4 r=redis.Redis(host='localhost',port=6379,db=2)#连接本地redis数据库
     5 r.set('hqg_session','2018012116')
     6 print(r.get('hqg_session'))#b'2018012116'
     7 print(r.get('hqg_session').decode())#2018012116 redis里面取出来的数据都是bytes类型的,所以要用decode方法转成字符串
     8 
     9 r.set('qaz','qwe')
    10 r.set('wsx','哈哈哈')
    11 r.delete('qaz')#删除
    12 print(r.get('qaz'))#None
    13 
    14 r.setex('edc','hahahh','20')#可以指定key的失效时间,单位是秒

    hash类型:

    1 r.hset('230_session','qew','123')#hash类型插入数据
    2 r.hset('230_session','asd','1234')
    3 r.hset('230_session','zxc','12345')

    上三行代码的结果为:

     1 r.hset('230_session','qew','123')#hash类型插入数据
     2 r.hset('230_session','asd','1234')
     3 r.hset('230_session','zxc','12345')
     4 print(r.hget('230_session','qew'))#b'123'
     5 print(r.hget('230_session','qew').decode())#123
     6 print(r.hgetall('230_session'))#{b'zxc': b'12345', b'qew': b'123', b'asd': b'1234'}
     7 
     8 
     9 
    10 redis_data=r.hgetall('230_session')
    11 all_data={}
    12 for k,v in redis_data.items():
    13     k=k.decode()
    14     v=v.decode()
    15     all_data[k]=v
    16 print(redis_data)#{b'qew': b'123', b'zxc': b'12345', b'asd': b'1234'}
    17 print(all_data)#{'qew': '123', 'zxc': '12345', 'asd': '1234'}

    #hash类型没有过期时间
    # r.set('try:homework:er','白')
    # r.set('try:homework:ty','黑')

    # print(r.keys())#获取所有的key [b'wsx', b'230_session', b'hqg_session']
    # print(r.keys('txz*'))#以txz开头的key
    # print(r.type('txz:xj'))#获取key的类型
    # print(r.type('sessions'))
     

    将redis连接封装成函数

     1 def op_redis(host,passwd,k,v,port=6379,db=0):
     2     r=redis.Redis(host=host,passwd=passwd,port=port,db=db)
     3     if v:
     4         r.set(k,v)
     5         res='ok'
     6     else:
     7         res=r.get(k)
     8         if res:#这里是判断有没有get到数据
     9             res.decode()
    10         else:
    11             res=None
    12         return res

    redis数据迁移小程序:

     1 import redis
     2 
     3 src_redis = redis.Redis(host='211.149.218.16',port=6379,password='123456',db=2)#连上redis
     4 target_redis = redis.Redis(host='211.149.218.16',port=6379,password='123456',db=14)#连上redis
     5 for key in src_redis.keys():
     6     if src_redis.type(key) == b'string':  #判断key的类型,因为redis数据取出来都是二进制的,所以这里也用bytes
     7         v = src_redis.get(key) #先获取到原来的数据
     8         target_redis.set(key,v) #再set到新的里面
     9     else:
    10         all_hash_data = src_redis.hgetall(key)   #先获取到hash类型里面所有的数据
    11         for k,v in all_hash_data.items(): #因为hash类型的获取到之后是一个字典,所以这里循环字典
    12             target_redis.hset(key,k,v)  #key是外面的大key,k是里面的小k,v就是小k对应的value
  • 相关阅读:
    mysql 执行计划 explain
    深度学习论文翻译解析(二十):YOLOv4: Optimal Speed and Accuracy of Object Detection
    卷积神经网络学习笔记——轻量化网络MobileNet系列(V1,V2,V3)
    OpenCV计算机视觉学习(13)——图像特征点检测(Harris角点检测,sift算法)
    人工智能必备数学基础:概率论与数理统计(2)
    人工智能必备数学基础:概率论与数理统计(1)
    深度学习论文翻译解析(十九):Searching for MobileNetV3
    深度学习论文翻译解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks
    深度学习论文翻译解析(十七):MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
    卷积神经网络学*笔记——SENet
  • 原文地址:https://www.cnblogs.com/wxcx/p/8338500.html
Copyright © 2011-2022 走看看