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的操作
import redis
#r=redis.Redis(host='211.149.218.16',port=6379,password='123456',db=2)#连接redis r=redis.Redis(host='localhost',port=6379,db=2)#连接本地redis数据库
r.set('hqg_session','')
print(r.get('hqg_session'))#b'2018012116'
print(r.get('hqg_session').decode())#2018012116 redis里面取出来的数据都是bytes类型的,所以要用decode方法转成字符串 r.set('qaz','qwe')
r.set('wsx','哈哈哈')
r.delete('qaz')#删除
print(r.get('qaz'))#None r.setex('edc','hahahh','')#可以指定key的失效时间,单位是秒
hash类型:
r.hset('230_session','qew','')#hash类型插入数据
r.hset('230_session','asd','')
r.hset('230_session','zxc','')
上三行代码的结果为:

r.hset('230_session','qew','')#hash类型插入数据
r.hset('230_session','asd','')
r.hset('230_session','zxc','')
print(r.hget('230_session','qew'))#b'123'
print(r.hget('230_session','qew').decode())#
print(r.hgetall('230_session'))#{b'zxc': b'12345', b'qew': b'123', b'asd': b'1234'}
redis_data=r.hgetall('230_session')
all_data={}
for k,v in redis_data.items():
k=k.decode()
v=v.decode()
all_data[k]=v
print(redis_data)#{b'qew': b'123', b'zxc': b'12345', b'asd': b'1234'}
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连接封装成函数
def op_redis(host,passwd,k,v,port=6379,db=0):
r=redis.Redis(host=host,passwd=passwd,port=port,db=db)
if v:
r.set(k,v)
res='ok'
else:
res=r.get(k)
if res:#这里是判断有没有get到数据
res.decode()
else:
res=None
return res
redis数据迁移小程序:
import redis src_redis = redis.Redis(host='211.149.218.16',port=6379,password='',db=2)#连上redis
target_redis = redis.Redis(host='211.149.218.16',port=6379,password='',db=14)#连上redis
for key in src_redis.keys():
if src_redis.type(key) == b'string': #判断key的类型,因为redis数据取出来都是二进制的,所以这里也用bytes
v = src_redis.get(key) #先获取到原来的数据
target_redis.set(key,v) #再set到新的里面
else:
all_hash_data = src_redis.hgetall(key) #先获取到hash类型里面所有的数据
for k,v in all_hash_data.items(): #因为hash类型的获取到之后是一个字典,所以这里循环字典
target_redis.hset(key,k,v) #key是外面的大key,k是里面的小k,v就是小k对应的value
python学习笔记(十六)python操作redis数据库的更多相关文章
- python学习笔记(十六)-Python多线程多进程
一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...
- python 学习笔记十六 django深入学习一 路由系统,模板,admin,数据库操作
django 请求流程图 django 路由系统 在django中我们可以通过定义urls,让不同的url路由到不同的处理函数 from . import views urlpatterns = [ ...
- python学习笔记(十)、文件操作
在前面我们了解到了没得模块,其中有一个模块为fileinput,为文件操作模块,不知道小伙伴们是否还记得? 1 打开文件 要打开文件,可以使用fileinput中的fileinput.input函数进 ...
- python学习笔记(十 二)、操作数据库
每一种语言都少不了多数据库进行各种操作. python支持多种数据库.有关python支持的数据库清单,请参阅:https://wiki.python.org/moin/DatabaseInterfa ...
- python学习笔记十六:读取JSON文件
读取JSON文件可以用JSON库,示例代码: #coding:utf-8 import json with open("msg.json") as jsonfile: json_d ...
- python学习笔记(十四)python实现发邮件
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart u ...
- Python学习笔记(六)
Python学习笔记(六) Ubuntu重置root密码 Ubuntu 16.4 目录结构 Ubuntu 命令讲解 1. Ubuntu重置root密码 启动系统,显示GRUB选择菜单(如果默认系统启动 ...
- python学习笔记(六)文件夹遍历,异常处理
python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...
- python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL
python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...
- python3.4学习笔记(十六) windows下面安装easy_install和pip教程
python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...
随机推荐
- linux基本目录
/ 根目录: dev : 存放抽象硬件 ib : 存放系统库文件 sbin : 存放特权级二进制文件 var : 存放经常变化的文件 home : 普通用户目录 etc : 存放配置文件目录 /etc ...
- 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第1节 网络通信概述_5_端口号
- myeclipse 2015 myeclipse2010破解共存
1.高版本选择bling版本,低版本选择profession版本2.用高版本的公钥替换低版本的公钥3.先破解低版本的后破解高版本的4.最后用高版本的替换低版本的文件
- Proteus报错处理经验:power rails ‘GND’ and 'VCC/VDD' are interconnected in net VCC
1 前言 初学Proteus,画好原理图后遇到了power rails 'GND' and 'VCC/VDD' are interconnected in net VCC的报错. 尝试了网上的解决办法 ...
- Docker中使用多阶段Dockerfile构建容器镜像image(镜像优化)
使用多阶段构建 预计阅读时间: 6分钟 多阶段构建是守护程序和客户端上需要Docker 17.05或更高版本的新功能.多阶段构建对于那些努力优化Dockerfiles同时使其易于阅读和维护的人来说非常 ...
- [19/05/26-星期日] JavaScript_ 基本语法_运算符
一.概念 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...
- NameVirtualHost的使用
如果某个ip:port 上只设置了一个虚拟主机,那么NameVirtualHost ip:port 可以不写,因为从这个ip:port的访问不需要做任何选择:如上例中192.168.1.197只对应于 ...
- python学习第四十五天__name__用法和作用
在python导入模块导入另外一个模块的时候,有时候只是想用其一个方法,会出现其他的方法也运行了,python用到__name__==‘__main__’ 解决问题,那么__name__用法和作用 1 ...
- A.Gennady and a Card Game
http://m3.codeforces.com/contest/1097/problem/A Gennady and a Card Game time limit per test 1 second ...
- PowerDesigner 使用说明
1. 附加:工具栏不见了 调色板(Palette)快捷工具栏不见了PowerDesigner 快捷工具栏 palette 不见了,怎么重新打开,找回来呢 上网搜索了一下"powerdesig ...