python中redis的连接和操作

一、redis

  redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

  Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便,Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。从盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。

redis作为非关系型数据库,其数据时存储在内存中。(MongoDB同为非关系型数据库,但是MongoDB的数据时存储在磁盘上的)

redis 安装:pip install redis

二、redis数据库的客户端连接

1、安装Redis Desktop Manager

2、打开,并建立连接,redis默认端口6379,host为redis所在的ip地址

三、python操作redis

1、连接方式

  redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类

import  redis
ip = ‘127.0.0.1‘
password = ‘123456‘

r1=redis.Redis(host=ip,password=password,port=6379,db=0,decode_responses=True)#redis默认连接db0
r2=redis.Redis(host=ip,password=password,port=6378,db=0,decode_responses=True)#decode_responses=True 自动解码,输出的结果自动由bytes类型变为字符串类型
print(r1.get(‘name‘))

2、连接池

  redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。

连接池:当程序创建数据源实例时,系统会一次性创建多个数据库连接,并把这些数据库连接保存在连接池中,当程序需要进行数据库访问时,无需重新新建数据库连接,而是从连接池中取出一个空闲的数据库连接

import  redis
ip = ‘127.0.0.1‘
password = ‘123456‘

conn_pool = redis.ConnectionPool(host=ip,password=password, port=6379)
r = redis.Redis(connection_pool=conn_pool)
r.set(‘name‘,‘zhangsansan‘)
print(r.get(‘name‘))

3、string操作

set() 新增或修改redis中的数据,r.set(key,value)

set(name, value, ex=None, px=None, nx=False, xx=False)。在Redis中设置值,默认,不存在则创建,存在则修改

参数:

ex,过期时间(秒)

px,过期时间(毫秒)

nx,如果设置为True,则只有name不存在时,当前set操作才执行

xx,如果设置为True,则只有name存在时,当前set操作才执行

r1.set(‘zyh001‘,‘89898‘)#redis中设置值,默认不存在则创建,存在则修改
print(r1.get(‘zyh001‘))
r1.set(‘zyh_info‘,‘{"name":"xxxx","password":"123456","account":11234}‘) #类似字典的形式插入数据

get()查看操作的数据,r.get(key),通过key去查看数据,输出的结果是value值

res  = r1.get(‘zyh_info‘) #如果在连接时,没加decode_responses=True,则默认输出结果是bytes类型,前面带b
print(‘bytes类型输出是‘,res)
print(‘字符串类型输出是‘,res.decode()) #由bytes类型转成字符串类型;如果在连接时加上decode_responses=True,则可自动转成字符串,此步骤就不需要了,且加入此步骤还会报错
# s.encode()  字符串变成bytes类型

#输出结果如下
bytes类型输出是 b‘{"name":"xxxx","password":"123456","account":11234}‘  #最前面会显示一个‘b’
字符串类型输出是 {"name":"xxxx","password":"123456","account":11234}

r.delete(key)、r.flushall()、r.flushdb() 删除数据

r1.delete(‘zyh001‘)#删除这条数据,print的时候存在返回1,不存在返回0.key不存在的话,也不会报错
r.flushall() #清空所有数据库里面的数据
r.flushdb() #只清空当前数据库里面的数据,连接时指定的数据库:db=10

r.keys()获取表中所有的key

print(r1.keys())

查找key的模糊匹配操作

print(r1.keys(‘*info*‘))#模糊匹配所有带info的key,*代表全部

r.expire()指定key的过期时间,到期后此条数据被自动删除

r.set(‘qml_session‘,‘sdfsdfsdfss‘)
r.expire(‘qml_session‘,30) #指定过期时间为30秒,单位默认是秒

r.type(key) 获取key的数据类型

print(r.type(‘sms_code‘))
print(r.type(‘yulin:xxx‘))

#输出结果:
hash
string

4、hash类型的操作

r.hset(key_A, key_a, value_a) 新增或修改

res1=r1.hset(‘zyh‘,‘123456‘,‘09876544‘)#新增值
r1.hset(‘zyh‘,‘123456‘,‘1234567‘) #修改值,有的时候修改,没有新增
print(r1.hget(‘zyh‘,‘123456‘))

查询单条key操作 r.hget(key_A, key_a)

print(r1.hget(‘zyh‘,‘123456‘))

查询某个大key_A下的所有内容  r.hgetall(key_A)

print(r1.hgetall(‘zyh‘))
#输出
{‘123456‘: ‘1234567‘, ‘12345678‘: ‘1234567‘}

删除指定的key_a   r.hdel(key_A, key_a)

r1.hdel(‘zyh‘,‘12345678‘)#删除指定的小key_a,即使key_a不存在,程序也不会报错
print(r1.hgetall(‘zyh‘))

r.delete(key-A)删掉整个key的值

r1.delete(‘zyh‘)

获取数据类型 r.type(key_A)

print(r.type(‘sms_code‘))
print(r.type(‘yulin:xxx‘))

#输出结果:
hash
string

5、更多操作及参考

http://www.cnblogs.com/melonjiang/p/5342505.html

http://www.cnblogs.com/melonjiang/p/5342383.html

https://www.jianshu.com/p/2639549bedc8

原文地址:https://www.cnblogs.com/blueteer/p/10140858.html

时间: 2024-07-30 10:40:03

python中redis的连接和操作的相关文章

Python中 redis StrictRedis对象操作string类型

准备 在桌面上创建redis目录 使用pycharm打开 redis目录 创建redis_string.py文件 from redis import * if __name__=="__main__": try: #创建StrictRedis对象,与redis服务器建?连接 sr=StrictRedis() except Exception as e: print e string-增加 ?法set,添加键.值,如果添加成功则返回True,如果添加失败则返回False 编写代码如下 f

python 中对list做减法操作

问题描述:假设我有这样两个list,          一个是list1,list1 = [1, 2, 3, 4, 5]          一个是list2,list2 = [1, 4, 5]           我们如何得到一个新的list,list3,          list3中包括所有不在list2中出现的list1中的元素.          即:list3 = list1 - list2          解决方案:我们可以用set(集合)操作          list3 = l

python 中调用windows系统api操作剪贴版

# -*- coding: utf-8 -*- ''' Created on 2013-11-26 @author: Chengshaoling ''' import win32clipboard as w32 import win32con class OperateClipboard(object): def __init__(self): # print "OperateClipboard" pass def getText(self): w32.OpenClipboard()

Python中numpy 数组的切片操作

Python中numpy 数组的切片操作简介取元素 X[n0,n1]切片 X[s0:e0,s1:e1]切片特殊情况 X[:e0,s1:]示例代码输出结果简介X[n0,n1]是通过 numpy 库引用二维数组或矩阵中的某一段数据集的一种写法.类似的,X[n0,n1,n2]表示取三维数组,取N维数组则有N个参数,N-1个逗号分隔.以二维数组为例: import numpy as npX = np.array([[0,1,2,3],[10,11,12,13],[20,21,22,23],[30,31,

python中redis获得到的值是带b'**'

原因在于在python中从Redis取出的Sting都变成bytes格式 解决一 # 加上decode_responses=True即可解决 redis_store = redis.StrictRedis(host='127.0.0.1', port=6379, decode_responses=True) 解决二 取值时后面加上decode() redis_store.get("name:%s"%name).decode() python中redis获得到的值是带b'**' 原文地址

Python中使用SQLAlchemy连接Mysql数据库2(多表连接操作)

http://blog.csdn.net/u011573853/article/details/51355113 在上面我们已经说了单表的一些操作,现在我们说一下多表的连接 >>> from sqlalchemy import distinct >>> from sqlalchemy.orm import aliased >>> Astu = aliased(Stu,'Astu') >>> Acla = aliased(Cla,'Ac

Python中关于列表的具体操作如下实例(待续)

上图为排序操作 Python中删除.修改.添加等操作

python中的列表以及常见操作

列表介绍 想一想: 前面学习的字符串可以用来存储一串信息,那么想一想,怎样存储咱班所有同学的名字呢? 定义100个变量,每个变量存放一个学生的姓名可以吗?有更好的办法吗? 答:列表 列表的格式:变量A的类型为列表 namesList = ['xiaoWang','xiaoZhang','xiaoHua'] 比C语言的数组强大的地方在于列表中的元素可以是不同类型的 testList = [1,'a'] 打印列表: demo: namesList = ['xiaoWang', 'xiaoZhang'

Python中的三个骚操作和黑魔法技术,装逼必备

本文主要介绍Python的高级特性:列表推导式.迭代器和生成器,是面试中经常会被问到的特性.因为生成器实现了迭代器协议,可由列表推导式来生成,所有,这三个概念作为一章来介绍,是最便于大家理解的,现在看不懂没关系,下面我不仅是会让大家知其然,重要的更是要知其所以然. 列表推导式 前几天有个HR让我谈谈列表推导式,我说这我经常用,就是用旧的列表生成一个新的列表的公式,他直接就把我拒了,让我回去复习一下,挺受打击的,所以决定也帮助大家回顾一下. 内容 列表推导式:旧的列表->新的列表 了解:字典推导式