python-Web-数据库-Redis
概述:
>>>安装:
>>>数据类型:
string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)
>>>数据备份:redis 127.0.0.1:6379> SAVE
>>>设置密码:127.0.0.1:6379> CONFIG set requirepass "123456"
>>>性能测试:redis-benchmark -n 100000
>>>最大链接数:redis-server --maxclients 100000
>>>Redis是基于客户端-服务端模型 请求/响应的TCP服务
所以客户端通常是阻塞模式,等待服务端响应
Redis管道技术可以让客户端继续向服务端发送请求,最终一次性返回所有响应
>>>Redis分区,利用多台计算机内存,构建大型数据库
范围分区:ID从0到10000的用户会保存到实例R0,ID从10001到 20000的用户会保存到R1,以此类推
哈希分区:crc32 hash函数-->key转换为一个数字-->93024922 % 4 = 2,存R2
面试题:
1 远程-非关系型数据库-内存-缓存
2 它可以用作数据库、缓存和消息中间件
3 速度快,丰富数据类型
4 redis常见性能问题和解决方案
Redis 是单进程单线程 利用队列技术将并发访问变为串行访问
命令:
String:
key - value(string/int/float)
-----set string1 ‘haha’
-----get string1
list:
key - [12,13,14,15] 左->右
-----lpush list1 12
-----lpop list1
-----llen list1
set:
key - [1,2,3,4] 无序
-----sadd set1 12
-----scard set1 查看
-----sismember set1 12 是否存在
------srem set1 删
hash:
key - key1 value(string/int/float)
key2 value(string/int/float)
key3 vlaue(string/int/float)
-----hset hash1 key1 12
-----hget hash1 key1
-----hlen hash1
sort set:
key - score(10.1) value(string/int/float) rank:1
score(9.9) value(string/int/float) rank:0
score(10.2) value(string/int/float) rank:2
----zadd zset1 12.2 val1
----zcart zset1 查
-----zrange zset1 0 2 withscores 排序
python-django应用:
'''缓冲redis'''
import redis
import pickle class PersonMetaclass(type):
'''单例模式'''
__instance = None
def __call__(self, *args, **kwargs):
if not self.__instance:
self.__instance = super().__call__(*args, **kwargs)
return self.__instance class Redis(object,metaclass=PersonMetaclass):
'''共享缓存'''
def __init__(self,host='127.0.0.1', port=6379, password=''):
'''初始'''
# 链接redis
self._redis=redis.Redis(host=host, port=port, password=password)
self.redis = self._redis def setString(self,*args):
'''' aaa',1 '''
key,value = args
self._redis.set(key,pickle.dumps(value)) def setList(self,*args):
'''' names_list', *['fi', 'li'] '''
key, *v = args
self._redis.lpush(key,pickle.dumps(*v))
map(lambda value: self._redis.lpush(key,pickle.dumps(value)),list(v)) def setSet(self):
''' key, *['fi', 1] '''
pass def setHash(self,name,**kwargs):
''' hash1,{k1:1,k2:2,} '''
keys,values = kwargs.items()
map(lambda key,value:self._redis.hset(name, key, pickle.dumps(value)),list(keys),list(values)) def setSortSet(self,name,nx=False, xx=False, ch=False, incr=False,**kwargs):
'''
key,[score:value:rank,]
设置任意数量的元素名称,将对的值设置为键
' ' name ' ' '双指定为元素名称键的dict以获得值。
' ' nx ' ' '强制ZADD只创建新元素,不更新
已经存在的元素的得分。
' ' xx ' ' '强制ZADD只更新已经更新的元素的分数
存在。不会添加新元素。
' ' ch ' '将返回值修改为已更改的元素数量。
更改的元素包括添加的新元素和元素
分数的改变。
'''
sorts, values = kwargs.items()
map(lambda sort, value: self._redis.zadd(name, pickle.dumps(sort), nx=nx, xx=xx, ch=False, incr=incr), list(sorts), list(values)) def length(self,*args):
''' 长度 list '''
try:
name,*name1 = args
if args.__len__() == 1:
return len(self.get(name))
return [ self._redis.llen(lens) for lens in args ]
except:
return None def int_or_str(value):
'''''' def set(self,*args,TYPE=None, **kwargs):
'''
存入,String,list
String:key->value(int,str,float)
list: key->list--[]
'''
try:
a,*b = args
if TYPE is not None:
if TYPE == 'hash':
self.setHash(a,**kwargs)
elif TYPE == 'sort':
self.setSortSet(a,**kwargs)
elif len(b) == 1:
self.setString(*args)
elif len(b) > 1 :
self.setList(*args)
assert 'key error'
except ValueError:
return ValueError def get(self,name):
''' 取出 '''
try:
return pickle.loads(self._redis.get(name))
except:
return None def getList(self,name):
try:
return pickle.loads(self._redis.rpop(name))
except:
return None def getHash(self,*args):
try:
name,key,*value = args
return pickle.loads(self._redis.hmget(name,key,*value))
except:
return None
python-Web-数据库-Redis的更多相关文章
- Redis的Python实践,以及四中常用应用场景详解——学习董伟明老师的《Python Web开发实践》
首先,简单介绍:Redis是一个基于内存的键值对存储系统,常用作数据库.缓存和消息代理. 支持:字符串,字典,列表,集合,有序集合,位图(bitmaps),地理位置,HyperLogLog等多种数据结 ...
- 【简说Python WEB】数据库
目录 [简说Python WEB]数据库 数据库表 docker安装MySQL Flask-SQLAlchemy操纵MySQL数据库 初始化 定义模型 定义关系 数据库的CRUD操作 创建表 inse ...
- python web开发——django学习(一)第一个连接mysql数据库django网站运行成功
1.新建一个项目 2.新建一些文件夹方便管理 3.新建一个项目叫message 4.连接数据库 python web开发Django连接mysql 5.在数据库里自动生成django的表 6.运行 ...
- 【简说Python WEB】视图函数操作数据库
目录 [简说Python WEB]视图函数操作数据库 系统环境:Ubuntu 18.04.1 LTS Python使用的是虚拟环境:virutalenv Python的版本:Python 3.6.9 ...
- python web框架——扩展Django&tornado
一 Django自定义分页 目的:自定义分页功能,并把它写成模块(注意其中涉及到的python基础知识) models.py文件 # Create your models here. class Us ...
- 使用python操作RabbitMQ,Redis,Memcache,SQLAlchemy 其二
一.概念 1.Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态 ...
- 使用python操作RabbitMQ,Redis,Memcache,SQLAlchemy 其一
一.概念 1.Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态 ...
- 缓存数据库redis
什么是Redis? Redis是一个TCP服务器,支持请求/响应协议. 在Redis中,请求通过以下步骤完成: 客户端向服务器发送查询,并从套接字读取,通常以阻塞的方式,用于服务器响应. 服务器处理命 ...
- python web 开发学习路线
转载,备着 自己目前学习python web 开发, 经过两个月的摸索,目前对web开发有了浅显的认识,把自己的学习过程贴出来.1.python入门推荐老齐<从零开始学python>,&l ...
- 实战接口开发:python + flask + mysql + redis(根据反馈,持续细化更新。。。)
前言 自动化已经成为测试的必备技能之一了,所以,很多想跳槽的测试朋友都在自学,特别是最实用的接口自动化, 但是很多人因为没有可以练手的项目而苦恼,最终导致缺乏实战经验,其实,完全可以自己开发个简单项目 ...
随机推荐
- uboot驱动模型(DM)分析(二) (转)
上篇分析了两个关键宏U_BOOT_DRIVER及U_BOOT_DEVICES的作用,有了上篇的基础,本文将分析: 1.上篇中的uboot_list段中的信息如何被用起来? 2.uclass,uclas ...
- 爱搞事情的webpack
webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler). 当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency g ...
- CSS引入外部字体方法,附可用demo
有时候我们做的页面需要用到一些更好看的字体又不想用图片代替,图片会影响加载速度则使用外部字体来显示但是直接通过font-family又不一定全部都行这就需要我们在css中进行定义并且引入字体文件路径然 ...
- Hadoop-No.7之行键
和哈希表类比,HBase中的行键类似于哈希表中的键.要构造一个良好的HBase模式,关键之一就是选择一个合适的行键. 1 记录检索 行键是HBase中检索记录所使用的键.HBase记录含有的列在数量上 ...
- Jmeter接口测试+压力测试(转)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/github_27109687/artic ...
- C# 数据类型转化为byte数组
short数据与byte数组互转 public byte[] ShortToByte(short value) { return BitConverter.GetBytes(value); } pub ...
- [Python之路] 实现简易HTTP服务器与MINI WEB框架(利用WSGI实现服务器与框架解耦)
本文描述如果简单实现自定义Web服务器与自定义简易框架,并且不断进行版本迭代,从而清晰的展现服务器与Web框架之间是如何结合.如何配合工作的.以及WSGI是什么. 本文帖的代码有点多,但基本每次迭代修 ...
- 一、Django入门
1.安装: 下载地址:https://www.djangoproject.com/download/ 原文节选: How to get Django Django is available open- ...
- CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)G
题面 一道暴水的dp....别问我为什么直接打开了G题,我只是对题目名称感兴趣而已.... #include<bits/stdc++.h> #define ll long long usi ...
- vue-cli3的vue.config.js文件配置,生成dist文件
//vue.config.jsonconst path = require('path'); // const vConsolePlugin = require('vconsole-webpack-p ...