当前位置: 首页 > news >正文

卓光网站建设/百度在线

卓光网站建设,百度在线,开宾馆做独家网站好吗,wordpress 隐藏内容插件文章目录1.认识Redis1.1.优点1.2.缺点2.在Django中Redis的连接3.Redis的基础用法3.1.hashmap结构3.2.list结构4.命令行查看数据库5.作者答疑1.认识Redis Remote DIctionary Server(Redis) 是一个key-value 存储系统,是跨平台的非关系型数据库。是一个开源的使用 AN…

文章目录

    • 1.认识Redis
      • 1.1.优点
      • 1.2.缺点
    • 2.在Django中Redis的连接
    • 3.Redis的基础用法
      • 3.1.hashmap结构
      • 3.2.list结构
    • 4.命令行查看数据库
    • 5.作者答疑

1.认识Redis

Remote DIctionary Server(Redis) 是一个key-value 存储系统,是跨平台的非关系型数据库。是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

1.1.优点

它是内存数据库,速度快,也支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis支持数据的备份,即master-slave模式的数据备份。支持事务。
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。(事务)
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

1.2.缺点

数据存储在内存,主机断电则数据丢失。
存储容量受到物理内存的限制,只能用于小数据量的高性能操作。
在线扩容比较困难,系统上线时必须确保有足够的空间。
用于缓存时,易出现’缓存雪崩‘,’缓存击穿‘等问题。

2.在Django中Redis的连接

安装Redis组件: Django4.0才原生支持Redis,Django3.2中需要通过第三方组件库进行配置。

pip install django-redis			# 安装Redis缓存后端 (基于并自动安装redis-py驱动)

编写Redis配置: 在Django项目配置文件的CACHES配置字典中进行缓存系统、客户端连接参数或连接池连接参数。

#配置缓存
CACHES = {'default': {'VERSION': 1,                                           # 默认缓存版本'KEY_PREFIX': 'ZhiLiaoAI',                              # 默认缓存前缀,推荐用项目名'TIMEOUT': 60 * 5,                                      # 默认过期时间,300秒'BACKEND': 'django_redis.cache.RedisCache','LOCATION': ['redis://127.0.0.1:6379/1', ],    			# 服务器列表,第一个为主服务器,其余为副本服务器'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient','PASSWORD': '','SOCKET_CONNECT_TIMEOUT': 5,                        # 秒级连接超时时间'SOCKET_TIMEOUT': 5,                                # 秒级读写超时时间'IGNORE_EXCEPTIONS': True,                          # 是否忽略连接异常'CONNECTION_POOL_KWARGS': {                         # redis.ConnectionPool的参数'max_connections': 100,                         # 连接池最大数量}}}
}SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"#DJANGO_REDIS_LOGGER = 'logger_name'                             # 使用哪个日志记录器记录忽略的异常
DJANGO_REDIS_IGNORE_EXCEPTIONS = True                           # 是否忽略所有缓存的连接异常
DJANGO_REDIS_LOG_IGNORED_EXCEPTIONS = True                      # 是否在忽略异常时通过日志记录该异常

[注意事项] 提交到缓存系统中的value值必须为pickable的.

3.Redis的基础用法

在使用过程中,首先注意编码问题,可以指定代码为utf-8,如下所示:

# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.shortcuts import render
from web import models
from django.core.cache import cache
from django_redis import get_redis_connection# Create your views here.
def index(request):redis_conn = get_redis_connection("default")redis_conn.set("name", "中国")print(str(redis_conn.get("name"),'utf-8'))#解码return HttpResponse("Hello world ! ");

永不超时设置
django-redis 支持永不超时设置。 其表现和 django backend 指定的相同:
timeout=0 立即过期
timeout=None 永不超时

cache.set("key", "value", timeout=None)

locks
django-redis 支持 redis 分布式锁. 锁的线程接口是相同的, 因此你可以使用它作为替代.
使用 python 上下文管理器分配锁的例子:

with cache.lock("somekey"):do_some_thing()

数据类型
redis是一种高级的键值对key:value存储系统,非关系型数据库(Nosql),其中value支持五种数据类型:
1.字符串(strings)
2.字符串列表(lists)
3.字符串集合(sets)
4.有序字符串集合(sorted sets)
5.哈希(hashes)

3.1.hashmap结构

redis-hash函数常用操作方法:
1.hset(name, key, value) ---- 更新一条数据的属性,没有则新建
2.hget(name, key) ---- 读取这条数据的指定属性, 返回字符串类型
3.hmset(name, mapping) ---- 批量更新数据(没有则新建)属性
4.hmget(name, keys, *args) ---- 批量读取数据(没有则新建)属性
5.hgetall(name) ---- 获取这条数据的所有属性和对应的值,返回字典类型
6.hkeys(name) ---- 获取这条数据的所有属性名,返回列表类型
7.hdel(name, *keys) ---- 删除这条数据的指定属性

import redisr = redis.Redis(host="127.0.0.1", port=6379, db=0)
# 新建一条键名为"123456"的数据, 包含属性attr_1
r.hset("123456", "attr_1", 100)
# 更改键名为"123456"的数据, 更改属性attr_1的值
r.hset("123456", "attr_1", 200)# 取出属性attr_1的值
attr_1 = r.hget("123456", "attr_1")# 输出看一下(发现属性值已经为str)
print "-- get attr_1:", attr_1# 属性集合
attr_dict = {"name": "常成功","alias": "常城","sex": "male","height": 175,"postal code": 100086,"Tel": None,
}
# 批量添加属性
r.hmset("123456", attr_dict)# 取出所有数据(返回值为字典)
h_data = r.hgetall("123456")# 输出看一下(取出来的时候都变成了str)
print("-- get all attr:", h_data)# 删除属性(可以批量删除)
r.hdel("123456", "Tel")# 取出所有属性名
h_keys = r.hkeys("123456")

3.2.list结构

  1. lpush命令将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行lpush操作。 当 key 存在但不是列表类型时,返回一个错误。执行lpush命令后,返回列表的长度。
print(r.lpush("1",1))  #输出的结果是1
print(r.lpush("1",1))  #输出的结果是2
print(r.lpush("1",2,3,4))  #输出的结果是5print(r.set("2",1))   #输出的结果是 True
print(r.lpush("2",2))     #输出的结果是 redis.exceptions.ResponseError: WRONGTYPE Operation against a key holding the wrong kind of value,原因是键 2 是字符串类型,我们用list中的lpush给他添加元素
  1. rpush命令用于将一个或多个值插入到列表的尾部(最右边)。如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误。执行rpush操作后,列表的长度。
print(r.rpush("2",1))     #输出的结果是1
print(r.rpush("2",2,3))   #输出的结果是3
print(r.rpush("2",4,5))  #输出的结果是5
  1. blpop 命令移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。如果列表为空,返回一个 None 。 否则,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。
print(r.rpush("3",1,2,3,4,5,6,))      #输出的结果是6
print(r.blpop("3"))                   #输出的结果是('3', '1')
print(r.blpop("3"))                   #输出的结果是('3', '2')
print(r.blpop("3"))                   #输出的结果是('3', '3')
print(r.blpop("4",timeout=2))         #因为键 4 不存在,所以2秒后输出的结果是None
  1. Brpop 命令移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。假如在指定时间内没有任何元素被弹出,则返回一个None 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。
print(r.rpush("4",1,2,3,4,5,6,))       #输出的结果是6
print(r.brpop("4"))       #输出的结果是('4', '6')
print(r.brpop("4"))       #输出的结果是('4', '5')
print(r.brpop("4"))       #输出的结果是('4', '4')
print(r.brpop("5",timeout=2))       #因为键 4 不存在,所以2秒后输出的结果是None
  1. llen命令用于返回列表的长度。 如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误。
print(r.llen("8"))       #key 不存在,输出的结果是0
print(r.rpush("8",1))    #输出的结果是1
print(r.llen("8"))       #输出的结果是1
print(r.rpush("8",2,3))  #输出的结果是3
print(r.llen("8"))       #输出的结果是3
  1. lrange返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
print(r.rpush("11",1,2))       #输出的结果是2
print(r.rpush("11",3,4))       #输出的结果是4
print(r.lrange("11",0,-1))     #输出的结果是['1', '2', '3', '4']
print(r.lrange("11",1,2))      #输出的结果是['2', '3']
  1. lset通过索引来设置元素的值。当索引参数超出范围,或对一个空列表进行lset时,返回一个错误。操作成功返回True,否则返回错误信息。
print(r.rpush("13",1,2,3,4))     # 输出的结果是4
print(r.lset("13",1,5))          # 输出的结果是True
print(r.lrange("13",0,-1))       # 输出的结果是['1', '5', '3', '4']

4.命令行查看数据库

redis的数据库个数是可以配置的,默认为16个。对应数据库的索引值为0 - (databases -1),即16个数据库,索引值为0-15。默认使用第0个数据库,可使用select进行数据库切换(redis命令是不区分大小写的),当切换db成功时,可以看到当前使用的是哪一个db。双击打开安装路径下的redis-cli.exe。然后输入命令:

select 1 #切换到1号数据库,默认del key #删除keyflushall #清空数据库

结果如下图所示:
在这里插入图片描述

5.作者答疑

如有疑问,欢迎留言。

相关文章:

Python3.8.8-Django3.2-Redis-连接池-数据类型-字符串-list-hashmap-命令行操作

文章目录1.认识Redis1.1.优点1.2.缺点2.在Django中Redis的连接3.Redis的基础用法3.1.hashmap结构3.2.list结构4.命令行查看数据库5.作者答疑1.认识Redis Remote DIctionary Server(Redis) 是一个key-value 存储系统,是跨平台的非关系型数据库。是一个开源的使用 AN…...

Android kotlin 系列讲解(进阶篇)高级项目架构模式 - MVVM

<<返回总目录 1、MVVM是什么 MVVM是Model-View-ViewModel的缩写&#xff0c;是一种高级项目架构模式。 MVVM架构可以将程序结构主要分成三个部分&#xff1a; Model&#xff1a;数据模型部分&#xff0c;包括从服务端获取的json数据或者从本地获取的数据等等View&…...

8. 查找

1 题目描述 查找成绩10开启时间2021年09月24日 星期五 18:00折扣0.8折扣时间2021年11月15日 星期一 00:00允许迟交否关闭时间2021年11月23日 星期二 00:00 输入 n(n ≤ 10^6)个不超过 10^9的单调不减的&#xff08;就是后面的数字不小于前面的数字&#xff09;非负整数 &#…...

二分查找算法

感谢“五点七边”工作室的算法讲解&#xff0c;详细内容可以参考视频讲解 二分查找为什么总是写错&#xff1f;_哔哩哔哩_bilibili 此处仅是个人学习总结 以target等于5为例&#xff0c;输入: 1 2 3 5 5 5 8 9 1. 找到第一个 > target 的元素 判断条件 < target&am…...

Git(3)之远程服务器

Git基础之远程服务器 Author&#xff1a;onceday date&#xff1a;2023年3月5日 满满长路有人对你微笑过嘛… windows安装可参考文章&#xff1a;git简易配置_onceday_CSDN博客 參考文档&#xff1a; 《progit2.pdf》&#xff0c;Progit2 Github。《git-book.pdf》 文章目…...

Javalin解构

Javalin Javalin是一个轻量级http框架&#xff0c;我们可以很容易的了解请求的处理过程及其设计&#xff0c;具有较高的学习意义。 从demo说起 public static void main(String[] args) {Javalin app Javalin.create(config -> {System.out.println("用户配置"…...

yolov5算法,训练模型,模型检测

嘟嘟嘟嘟&#xff01;工作需要&#xff0c;所以学习了下yolov5算法。是干什么的呢&#xff1f; 通俗来说&#xff0c;可以将它看做是一个小孩儿&#xff0c;通过成年人&#xff08;开发人员&#xff09;提供的大量图片的学习&#xff0c;让自己知道我看到的哪些场景需要提醒给成…...

linux系统防火墙开放端口

linux系统防火墙开放端口 在外部访问CentOS中部署应用时&#xff0c;需要通过防火墙管理软件,开端口,或者直接关闭防火墙进行解决(不建议) 加粗样式 常用命令&#xff1a; systemctl start firewalld #启动 systemctl stop firewalld #停止 systemctl status firewalld #查看…...

CSAPP第九章 虚拟内存

理解虚拟内存的原因 本章前部分描述虚拟内存是如何工作的&#xff0c;后一部分描述应用程序如何使用和管理虚拟内存 物理和虚拟寻址 虚拟内存作为缓存的工具 页表 页命中 缺页 虚拟内存作为内存管理的工具 简化链接&#xff0c;简化加载&#xff0c;简化共享&#xff0c;简化…...

numpy数组与矩阵运算(二)

文章目录矩阵生成与常用操作矩阵生成矩阵转置查看矩阵特性矩阵乘法计算相关系数矩阵计算方差、协方差、标准差计算特征值与特征向量计算逆矩阵求解线性方程组奇异值分解函数向量化矩阵生成与常用操作 矩阵生成 扩展库numpy中提供的matrix()函数可以用来把列表、元组、range对…...

Dubbo 中 Zookeeper 注册中心原理分析

Dubbo 中 Zookeeper 注册中心原理分析 文章目录Dubbo 中 Zookeeper 注册中心原理分析一、ZooKeeper注册中心1.1 ZooKeeper数据结构1.2 ZooKeeper的Watcher机制1.3 ZooKeeper会话机制1.4 使用ZooKeeper作为注册中心二、源码分析2.1 AbstractRegistry2.2 FailbackRegistry2.2.1 核…...

素数产生新的算法(由筛法减法改为增加法)--哥德巴赫猜想的第一次实际应用

素数产生新的算法&#xff08;由筛法减法改为增加法&#xff09;--哥德巴赫猜想的第一次实际应用 摘要&#xff1a;长期以来&#xff0c;人们认为哥德巴赫猜想没有什么实际应用的。 现在&#xff0c;我假设这个不是猜想&#xff0c;而是定理或公理&#xff0c;就产生了新的应用…...

递归-需要满足三个条件

一&#xff0c;概述 递归是一种应用非常广泛的算法&#xff08;或者编程技巧&#xff09;。很多数据结构和算法的编码实现都要用到递归&#xff0c;比如 DFS 深度优先搜索、前中后序二叉树遍历等。 去的过程叫“递”&#xff0c;回来的过程叫“归”。基本上所有的递归问题都可…...

【剑指Offer-Java】两个栈实现队列

题目 用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和 deleteHead &#xff0c;分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素&#xff0c;deleteHead 操作返回 -1 ) 输入&#xff1a; [“CQueue”,“appendT…...

Allegro如何将Waived掉的DRC显示或隐藏操作指导

Allegro如何将Waived掉的DRC显示或隐藏操作指导 在用Allegro做PCB设计的时候,如果遇到正常的DRC,可以用Waive的命令将DRC不显示,如下图 当DRC被Waive掉的时候,如何将DRC再次显示出来。类似下图效果 具体操作如下 点击Display...

MATLAB——数据及其运算

MATLAB数值数据数值数据类型的分类1&#xff0e;整型整型数据是不带小数的数&#xff0c;有带符号整数和无符号整数之分。表中列出了各种整型数据的取值范围和对应的转换函数。2&#xff0e;浮点型浮点型数据有单精度(single&#xff09;和双精度&#xff08;(double)之分&…...

【微信小程序】-- 页面导航 -- 声明式导航(二十二)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…...

gdb查看汇编代码的例子

gdb查看汇编代码的例子 操作步骤 用 gdb 启动可执行文件&#xff1a;gdb executable_file在 gdb 中设置断点&#xff1a;break function_name 或者 break *memory_address运行程序&#xff1a;run当程序停止在断点处时&#xff0c;使用 disassemble 命令来查看汇编代码&#…...

第四讲:如何将本地代码与服务器代码保持实时同步

一、前言 在我们进行 Ambari 二次开发时,通常会先在服务器上部署一套可以使用的 Ambari 环境。 二次开发,就肯定是要改动代码的,我们不能老是在服务器上用vim编辑文件,那样效率太低,始终不是长久之计。 所以我们需要在本地打开我们的Ambari源码项目,比如用idea工具,可…...

cuda调试(一)vs2019-windows-Nsight system--nvtx使用,添加nvToolsExt.h文件

cuda调试 由于在编程过程中发现不同的网格块的结构&#xff0c;对最后的代码结果有影响&#xff0c;所以想记录一下解决办法。 CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid cuda context (上下文) context类似于CPU进程上下&#xff0c;表示由管理层 Drive …...

向Spring容器中注入bean有哪几种方式?

文章前言&#xff1a; 写这篇文章的时候&#xff0c;我正在手机上看腾讯课堂的公开课&#xff0c;有讲到 Spring IOC 创建bean有哪几种方式&#xff0c;视频中有提到过 set注入、构造器注入、注解方式注入等等&#xff1b;于是&#xff0c;就想到了写一篇《Spring注入bean有几种…...

如何用 Python采集 <豆某yin片>并作词云图分析 ?

嗨害大家好鸭&#xff01;我是小熊猫~ 总有那么一句银幕台词能打动人心 总有那么一幕名导名作念念不忘 不知道大家有多久没有放松一下了呢&#xff1f; 本次就来给大家采集一下某瓣电影并做词云分析 康康哪一部才是大家心中的经典呢&#xff1f; 最近又有哪一部可能会成为…...

Python装饰器的具体实用示例

示例1&#xff1a;普通装饰器 def name(n):def func(x):res n(xx)return resreturn funcname def run(x): # run name(run)print(x)if __name__ __main__:run(1) # 2def name(n):def func(*x):res n(xx)return resreturn funcname def run(x): # run name(run)pr…...

谈谈我对Retrofit源码的理解

文章目录一、Retrofit简介二、使用介绍2.1 app / build.gradle添加依赖2.2 创建 Retrofit 实例2.3 创建 API 接口定义文件2.4 使用 Retrofit 进行网络请求三、源码分析3.1 创建 Retrofit 实例: 建造者模式创建Retrofit3.2 实例化API接口: 动态代理模式3.3 获取Observable返回值…...

八股文(三)

目录 一、 如何理解原型与原型链 二、 js继承 三、 vuex的使用 1.mutation和action的区别 mutation action 2.Vuex都有哪些API 四、 前端性能优化方法 五、 类型判断 题目 &#xff08;1&#xff09;typeof判断哪个类型会出错&#xff08;即结果不准确&#xff09;&…...

2023最新实施工程师面试题

1、两电脑都在同一个网络环境中,A 电脑访问不到 B 电脑的共享文件。此现象可能是哪些 方面所导致?怎样处理? 答:首先你要确定是不是在一个工作组内,只有在一个工作组内才可以共享文件,然后看一个看一看有没有防火墙之类的,然后确定文件是不是已经共享 2、 电脑开机时风扇…...

安卓逆向_6 --- JNI 和 NDK

Java 本机接口规范内容&#xff1a;https://docs.oracle.com/en/java/javase/19/docs/specs/jni/index.html JNI官方中文资料&#xff1a;https://blog.csdn.net/yishifu/article/details/52180448 NDK 官方文档&#xff1a;https://developer.android.google.cn/training/ar…...

Pod控制器

K8S之控制器详解#简介#在kubernetes中&#xff0c;按照Pod的创建方式可以将其分为两类&#xff1a;自主式:kubernetes直接创建出来的Pod&#xff0c;这种Pod删除后就没有了&#xff0c;也不会重建。控制器创建pod:通过Pod控制器创建的Pod&#xff0c;这种Pod删除之后还会自动重…...

微服务到云原生

微服务到云原生 微服务 微服务架构&#xff08;Microservice Architecture&#xff09;是一种架构概念&#xff0c;旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。 微服务是一种架构风格&#xff0c;一个大型复杂软件应用由一个或多个微服务组成。系统中的各…...

Spring Security 实现自定义登录和认证(1):使用自定义的用户进行认证

1 SpringSecurity 1.1 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency>1.2 编写配置类 在spring最新版中禁用了WebSecurityConfigurerAdapter…...