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的相关资源包的 首先安 ...
随机推荐
- fedora如何使用themes主题?
DBus: 是一个 local 的IPC 进程间通信机制 如果是(一对一) 多对多的通信, 则DBUS 后台充当了一个路由器的角色. ibus: 是包含: python gtk dbus的 scim- ...
- Docker - 部署 Ant Design Pro 的项目
解读 Ant Design Pro 的 Docker 配置 package.json 的 scripts -f: 使用什么配置文件 -t: 标签 up: 启动服务(的容器) build: 构建或重新构 ...
- 错误 warning: LF will be replaced by CRLF in README.md.
问题类型 windows中的换行符为 CRLF, 而在Linux下的换行符为LF,所以在执行add . 时出现提示:warning: LF will be replaced by CRLF in RE ...
- Linux_NIS+NFS+Autofs
目录 目录 前言 NIS NFS Autofs 搭建NISNFSAutofs Setup NNA environment Setup ServerSite Setup client 前言 NIS+NF ...
- == 和 equals的区别
== 和 equals的区别 基本类型:== 比较的是两个变量的面值大小 对象对象: 比较的是内存地址 特例: String a = "abc" String b = &qu ...
- ESP32、GPRS A9测试
测试内容: 1.A9作为客户端,在服务器主动断开连接或异常断开的时候,使用网络连接状态查询接口,能否获得准确的网络连接状态. 结果: TCP: A9开多连接时,成功连接TCP服务器后,发送查询语句AT ...
- Java代码执行过程概述
Java代码经历三个阶段:源代码阶段(Source) -> 类加载阶段(ClassLoader) -> 运行时阶段(Runtime) 首先我们来理清一下Java代码整个执行过程, 让我们对 ...
- 旧接口注册LED字符驱动设备(动态映射)
#include <linux/init.h> // __init __exit #include <linux/module.h> // module_init module ...
- Java JDK在Mac下的配置方法
Java JDK在Mac.Windows下的配置方法 Mac 第一步:下载JDK 官网下载地址 第二步:安装JDK 安装步骤很简单,一直点击下一步即可. 第三步:配置环境变量 打开terminal(终 ...
- HDU 4013 Distinct Subtrees(树的最小表示)
Distinct Subtrees Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Other ...