iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python Redis
  • 516
分享到

Python Redis

PythonRedis 2023-01-31 02:01:06 516人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

  NoSQL(NoSQL = Not Only sql ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,泛指非关系型的数据库。随着互联网WEB2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SN

  NoSQL(NoSQL = Not Only sql ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,泛指非关系型的数据库。随着互联网WEB2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

  NoSQL四个大分类:

  键值(Key-Value)存储数据库:这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, oracle BDB。

  列存储数据库:这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.

  文档型数据库:文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB, mongoDB. 国内也有文档型数据库SequoiaDB,已经开源

  图形(Graph)数据库:图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询api。如:Neo4J, InfoGrid, Infinite Graph.

  NoSQL数据库使用场景:

  1、数据模型比较简单;

  2、需要灵活性更强的IT系统;

  3、对数据库性能要求较高;

  4、不需要高度的数据一致性;

  5、对于给定key,比较容易映射复杂值的环境。

键值(key-value)Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。Key 指向 Value 的键值对,通常用hash table来实现查找速度快数据无结构化,通常只被当作字符串或者二进制数据
列存储数据库Cassandra, HBase, Riak分布式的文件系统以列簇式存储,将同一列数据存在一起查找速度快,可扩展性强,更容易进行分布式扩展功能相对局限
文档型数据库CouchDB, MonGoDbWeb应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容)Key-Value对应的键值对,Value为结构化数据数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构查询性能不高,而且缺乏统一的查询语法。
图形(Graph)数据库Neo4J, InfoGrid, Infinite Graph社交网络,推荐系统等。专注于构建关系图谱图结构利用图结构相关算法。比如最短路径寻址,N度关系查找等很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案

对于NoSQL并没有一个明确的范围和定义,但是他们都普遍存在下面一些共同特征:

(1)不需要预定义模式:不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。

(2)无共享架构:相对于将所有数据存储的存储区域网络中的全共享架构。NoSQL往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。

(3)弹性可扩展:可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。

(4)分区:相对于将数据存放于同一个节点,NoSQL数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。

(5)异步复制:和RaiD存储系统不同的是,NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据。

(6)BASE:相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。BASE是最终一致性和软事务。

(7)NoSQL数据库并没有一个统一的架构,两种NoSQL数据库之间的不同,甚至远远超过两种关系型数据库的不同。可以说,NoSQL各有所长,成功的NoSQL必然特别适用于某些场合或者某些应用,在这些场合中会远远胜过关系型数据库和其他的NoSQL。

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常用shell
[root@localhost ~]# redis-cli      # 进入redis cli窗口
127.0.0.1:6379> set name fgf     # 设置值
OK
127.0.0.1:6379> set age 02
OK
127.0.0.1:6379> keys *              # 当前所有key
1) "age"
2) "name"
127.0.0.1:6379> set sex m ex 2      # 设置值,只存活2秒
OK
127.0.0.1:6379> get sex       # 获取值
"m"
127.0.0.1:6379> flushdb      # 清空当前db下的所有键值
OK
127.0.0.1:6379> flushall      # 清空所有db下的键值
OK

Python操作Redis

1)操作模式 
  redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。

import redis
r = redis.Redis(host='127.0.0.1', port=6379)
r.set('foo', 'Bar')       #添加
print (r.get('foo'))      #获取

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

import redis
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)
r = redis.Redis(connection_pool=pool)
r.set('foo', 'Bar')     #添加
print r.get('foo')      #获取

3)管道 

  redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作。

import redis
pool = redis.ConnectionPool(host='192.168.0.110', port=6379)
r = redis.Redis(connection_pool=pool)
pipe = r.pipeline(transaction=True)
r.set('name', 'zhangsan')
r.set('name', 'lisi')
pipe.execute()

1、字符串操作

  redis中的String在在内存中按照一个name对应一个value来存储

#在Redis中设置值,默认不存在则创建,存在则修改r.('name', 'zhangsan')'''参数:
     set(name, value, ex=None, px=None, nx=False, xx=False)
     ex,过期时间(秒)
     px,过期时间(毫秒)
     nx,如果设置为True,则只有name不存在时,当前set操作才执行,同setnx(name, value)
     xx,如果设置为True,则只有name存在时,当前set操作才执行'''
#设置过期时间(秒)
setex(name, value, time)
#设置过期时间(豪秒)
psetex(name, time_ms, value)
#批量设置值
r.mset(name1='zhangsan', name2='lisi')
#或
r.mget({"name1":'zhangsan', "name2":'lisi'})
#批量获取
print(r.mget("name1","name2"))
#或
li=["name1","name2"]
print(r.mget(li))
#设置新值,打印原值
print(r.getset("name1","wangwu"))     #输出:zhangsan
print(r.get("name1"))                 #输出:wangwu
#根据字节获取子序列
r.set("name","zhangsan")
print(r.getrange("name",0,3))         #输出:zhan
#修改字符串内容,从指定字符串索引开始向后替换,如果新值太长时,则向后添加
r.set("name","zhangsan")
r.setrange("name",1,"z")
print(r.get("name"))                  #输出:zzangsan
r.setrange("name",6,"zzzzzzz")
print(r.get("name"))                  #输出:zzangszzzzzzz

2、List操作

  redis中的List在在内存中按照一个name对应一个List来存储 

# 在name对应的list中添加元素,每个新的元素都添加到列表的最左边
r.lpush("list_name",2)
r.lpush("list_name",3,4,5)      #保存在列表中的顺序为5,4,3,2
#同lpush,但每个新的元素都添加到列表的最右边
rpush(name,values)
#在name对应的list中添加元素,只有name已经存在时,值添加到列表的最左边
lpushx(name,value)
#在name对应的list中添加元素,只有name已经存在时,值添加到列表的最右边
rpushx(name,value)
# name对应的list元素的个数
print(r.llen("list_name"))
# 在name对应的列表的某一个值前或后插入一个新值
r.linsert("list_name","BEFORE","2","SS")   #在列表内找到第一个元素2,在它前面插入SS
'''参数:
    name: redis的name
    where: BEFORE(前)或AFTER(后)
    refvalue: 列表内的值
    value: 要插入的数据'''
#对list中的某一个索引位置重新赋值
r.lset("list_name",0,"bbb")
#删除name对应的list中的指定值
r.lrem("list_name","SS",num=0)
''' 参数:
    name:  redis的name
    value: 要删除的值
    num:   num=0 删除列表中所有的指定值;
           num=2 从前到后,删除2个;
           num=-2 从后向前,删除2个'''
#移除列表的左侧第一个元素,返回值则是第一个元素
print(r.lpop("list_name"))
#根据索引获取列表内元素
print(r.lindex("list_name",1))
#分片获取元素
print(r.lrange("list_name",0,-1))
#移除列表内没有在该索引之内的值
r.ltrim("list_name",0,2)

3、Set操作

#给name对应的集合中添加元素
r.sadd("set_name","aa")
r.sadd("set_name","aa","bb")
# 获取多个name对应集合的并集
r.sadd("set_name","aa","bb")
r.sadd("set_name1","bb","cc")
r.sadd("set_name2","bb","cc","dd")
print(r.sinter("set_name","set_name1","set_name2"))       #输出:{bb}
#获取name对应的集合的所有成员
smembers(name)
#获取name对应的集合中的元素个数
r.scard("set_name")
# 在name对应的有序集合中添加元素
r.zadd("zset_name", "a1", 6, "a2", 2,"a3",5)
#或r.zadd('zset_name1', b1=10, b2=5)
#获取有序集合中分数在[min,max]之间的个数
print(r.zcount("zset_name",1,5))
#自增有序集合内value对应的分数
r.zincrby("zset_name","a1",amount=2)      #自增zset_name对应的有序集合里a1对应的分数

其他常用操作:

delete(*names)          #根据name删除redis中的任意数据类型

exists(name)             #检测redis的name是否存在

keys(pattern='*')      #根据* ?等通配符匹配获取redis的name

expire(name ,time)   # 为某个name设置超时时间

rename(src, dst)      # 重命名

move(name, db))    # 将redis的某个值移动到指定的db下

randomkey()          #随机获取一个redis的name(不删除)

type(name)           # 获取name对应值的类型

--结束END--

本文标题: Python Redis

本文链接: https://www.lsjlt.com/news/187113.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • [Redis]python连接redis
    只是看看能不能成功使用python操作redis,redis具体的数据结构和使用会在以后学习。安装连接redis的包pip install redis本地已经在6379端口启动了redis服务。In [1]: importredis In ...
    99+
    2023-01-31
    Redis python redis
  • Python Redis
      NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SN...
    99+
    2023-01-31
    Python Redis
  • 安装redis及python redis
    第一部分:安装redis mkdir /usr/local/redis cd /usr/local/srcwget http://download.redis.io/releases/redis-2.8.12.tar.gztar xzf r...
    99+
    2023-01-31
    redis python
  • 【Python】Python使用redis
    转自:http://www.diybl.com/course/3_program/python/20110510/555370.html #1、安装  好吧,我承认我只会最简单的安装&n...
    99+
    2024-04-02
  • Redis Python Queue
    RedisQueue.py文件内容:import redisclass RedisQueue(object): """Simple Queue with Redis Backend""" def __init__(self, name,...
    99+
    2023-01-31
    Redis Python Queue
  • 【Redis】用python操作redis集群
    https://blog.csdn.net/bitcarmanlee/article/details/51852126  密码不能写到列表中去: 有密...
    99+
    2024-04-02
  • python连接redis
    一、安装服务下载、编译安装wget http://download.redis.io/releases/redis-3.0.1.tar.gz tar -zxvf redis-3.0.1.tar.gz cd redis-3.0.1 make二...
    99+
    2023-01-31
    python redis
  • python redis模块
      redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)...
    99+
    2023-01-31
    模块 python redis
  • Python操作redis
    Python操作redispythonredis数据库searchimport首先确保redis已经正常启动。安装   可以去pypi上找到redis的Python模块:   http://pypi.python.org/pypi%3Aac...
    99+
    2023-01-31
    操作 Python redis
  • python 分析redis
    #!/usr/bin/env python#coding=utf-8import MySQLdbimport redisimport osimport socket,fcntl,struct#print redis._file_def ge...
    99+
    2023-01-31
    python redis
  • python访问redis
    首先说一下在Windows下安装Redis,安装包可以在https://github.com/MSOpenTech/redis/releases中找到,可以下载msi安装文件,也可以下载zip的压缩文件。下载zip文件之后解压,解压后是这些...
    99+
    2023-01-31
    python redis
  • 【python】redis模块
    单线程,通过epoll实现高并发,端口6379linux下载地址:http://redis.io/downloadwindows下载地址:https://github.com/MSOpenTech/redis/releases 本文介绍的内...
    99+
    2023-01-31
    模块 python redis
  • Python 操作Redis
    在 Python中我们使用 redis库来操作 Redis数据库。Redis数据库的使用命令这里就不介绍了。 需要安装 redis库。检查是否安装redis: pip redis 如果未安装,使...
    99+
    2023-09-16
    Python 操作Redis
  • Python中使用Redis
    安装Redis的有3种方式https://github.com/andymccurdy/redis-py第一种:进⼊虚拟环境py_django,联⽹安装包redispip install redis第二种:进⼊虚拟环境py_django,联...
    99+
    2023-01-31
    Python Redis
  • python之操作redis
    # coding:utf8 # 导入模块 import redis # 连接redis库 # r = redis.Redis(host='192.168.10.128',port=6379,db=0) # 主要是为了向后兼容 r = red...
    99+
    2023-01-31
    操作 python redis
  • python 操作 redis,redi
    python 操作redis 需要导入redis模块import redis """ 连接redis ConnectionPool 方式连接 """ def connRedis(self): ...
    99+
    2023-01-31
    操作 python redi
  • 33. Python redis的 h
    1.hash 类型操作import redis pool = redis.ConnectionPool(host="192.168.48.131", port=6379, db=0) r = redis.Redis(connection_p...
    99+
    2023-01-31
    Python redis
  • Python之Redis操作
    目录 一. 介绍A. 什么是 Redis?B. Redis 的特点和用途C. Python 操作 Redis 的优势 二. 使用 Redis 客户端库A. 安装 Redis 客户端库B...
    99+
    2023-08-31
    redis python
  • redis怎么用python
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-21
  • python 操作redis集群
    redis集群cd /usr/local/redis3.0/src./redis-trib.rb  create --replicas 1 ip1:7000 ip1:7001cluster info/nodesredis-cli -c -h...
    99+
    2023-01-31
    集群 操作 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作