和python进行互动 安装redis库
pip3 install redis 连接数据库
import redis # StrictRedis和Redis效果一样,后者是前者的子集 r = redis.StrictRedis(host='localhost',port=6379,db=0) r.set(key1,value111) print(r.get(key1).decode(utf-8)) 设置过期时间
r.set(key2,value211,px=5000) # 单位为毫秒 r.setex(haha1,10,nihao123) # 单位为秒 使用连接池去链接(Redis集群)
pool = redis.ConnectionPool(host='localhost',port=6379,decode_responses=True) r = redis.Redis(connection_pool=pool) r.set(key2,value211,px=5000) print(r.get(key2)) mset功能
r.mset({'haha1':'value1','haha2':'value2','haha3':'value3'}) print(r.mget(haha1,haha3)) # 获取的就是一个list hash功能
r.hset(hash1,k1,value1) r.hset(hash1,k2,value2222) print(r.hkeys(hash1)) # ['k1','k2'],hash1相当于特殊的键 print(r.hget(hash1,k2)) # hash1中k2键的值 print(r.hmget(hash1, k2,k1)) # 获取hash1中k2,k1的全部内容,list保存,可以遍历提取 # 批量hash操作,但快要被hset取代 r.hmset(hash2,{n1:nnn1,n2:nnn2}) print(r.hgetall(hash2)) print(r.hexists(hash1,k1)) 自增自减
# 整数 r.hincrby(hash2,n3,amount=-11) # 浮点数 r.hincrbyfloat(hash2,n3,amount=+11.12) list
r.rpush(list1,1,2,3,4,5,6,7) # list长度 print(r.
以编译opencv4.5.5为例。
这些文件其实最终会下载到“……\opencv-4.5.5\.cache”里
里边的文件都以(MD5码-原名)方式命名,如下图
带MD5码的全名可以从你指定生成build的目录中CMakeDownloadLog.txt里查看,下载失败的都会以https开头(在里边搜https,就可以定位到带MD5的全名了)。
把我分享的对应文件里的名字改掉,自己在CMake界面再次Configure。
下载地址链接: https://pan.baidu.com/s/1gd0HrZ4TBOEynLPrT0gIow 提取码: rxn5
当然,也可以自己用迅雷下载CMakeDownloadLog.txt里https开头的链接,然后将文件放入.cache对应位置,注意全名(MD5码-原名)
1、创建自定义函数
格式:
function name {
command
}
[root@rhel7pc1 test]# ls test.sh [root@rhel7pc1 test]# cat test.sh ## shell中创建函数格式 #!/bin/bash function fun_test { echo hello world! } 2、加载、调用函数
[root@rhel7pc1 test]# ls test.sh [root@rhel7pc1 test]# cat test.sh #!/bin/bash function fun_test { echo hello world! } [root@rhel7pc1 test]# fun_test ## 函数未加载前 bash: fun_test: command not found... [root@rhel7pc1 test]# source test.sh ## 加载函数 [root@rhel7pc1 test]# fun_test ## 调用函数 hello world! 3、取消函数加载
1、查看系统环境变量:env、export
2、查看自定义变量: set、declare
测试系统环境变量:
[root@rhel7pc1 test]# ls [root@rhel7pc1 test]# env > a.txt && export > b.txt ## 将env和export命令的输出结果保存为文件 [root@rhel7pc1 test]# wc -l * ## 统计行数 25 a.txt 24 b.txt 49 total [root@rhel7pc1 test]# head -n 2 a.txt ## 查看前两行 XDG_SESSION_ID=17 HOSTNAME=rhel7pc1 [root@rhel7pc1 test]# head -n 2 b.txt declare -x HISTCONTROL=ignoredups declare -x HISTSIZE=1000 [root@rhel7pc1 test]# sort a.txt > a && mv a a.txt ## 排序 [root@rhel7pc1 test]# awk '{print $3}' b.
1.vim vi 和 vim是不同的,vi 源自UNIX。 查看系统中vim的版本: which vim, which vi, ls -l /usr/bin/vim, vim --version 两种模式:普通模式,插入模式。 按 i 进入插入模式,按 esc 退回到普通模式。 当打开要编辑的文件时,vim进入普通模式,此时所有按键都会被vim解释为命令;插入模式中,会把每个键都插入缓冲区。 在普通模式中的操作 移动光标 h 左移,j 下移, k 上移, l 右移 PageDown (Ctrl + F), 往上翻页;PageDown (Ctrl + B),往下翻页;G 移到缓冲区最后一行; num G 移到缓冲区中第num行; gg 移到缓冲区第一行。 编辑数据 x 删除当前位置的字符;dd 删除当前一整行; dw 删除当前位置的单词;d$ 删除当前位置到行尾的内容;J 删除当前行行尾的换行符(拼接行)。 以上这些删除都可以用p 取回数据,因为vim的删除会将数据保存到一个寄存器中。 u 撤销。 a 在当前位置后追加数据;A 在当前行行尾追加数据 r char 用char 替换当前位置的单个字符;R text 用text覆盖当前位置的数据,直到按下esc 有些命令允许数字修饰,如 2x 会删除2个字符,5dd 会删除5行。 复制粘贴 y 复制,可以使用和d命令相同的第二字符yw复制一个单词 y$ 复制一行。 p 粘贴。 如何看到想要选择的文本:先把光标移到开始位置,按 v 进入可视模式,移动光标选择要复制的区域,按y,复制成功,再移到要粘贴的位置,按p。 查找替换 按正斜线 /, 输入想搜索的内容,回车;要继续查找,按正斜线 /,回车,或者按n。 替换必须先进入命令行模式,即先按冒号:。 替换命令 :s/old/new , 只替换第一次出现处。 :s/old/new/g 替换所有old;:%s/old/new/g替换整个文件中所有old :n,ms/old/new/g替换n行和m行之间的所有old (普通模式下的)命令行模式 在普通模式下按下冒号键,并用额外的命令来控制vim。 q 如果未做任何改动,直接退出;q!
索引的含义和特点 索引是创建在表上的,是对数据库表中一列或多列的值进行排序的一种结构,可以提高查询速度。使用索引类似于使用新华字典的音序表,通过提取拼音,可以快速定位该数据的位置
索引有其明显的优势,也有不可避免的缺点:
创建和维护索引同样需要耗费时间,并随着数据量的增加而增加 索引也会占用一定的物理空间 增加、删除和修改数据时,要动态地维护索引 索引的分类和操作 1. 普通索引 所谓普通索引,就是在创建索引时,不附加任何限制条件(唯一、非空等限制),可以创建在任何数据类型的字段上
创建表时直接创建索引
CREATE TABLE tablename( propname1 type1 [CONSTRAINT1], propname2 type2 [CONSTRAINT2], ...... INDEX|KEY [indexName] (propname1 [(length) [ASC|DESC]]) ); 在已存在的表上通过 CREATE 语句创建索引
CREATE INDEX indexName ON tablename (propname [(length) [ASC|DESC]]) 通过 ALTER TABLE 语句创建
ALTER table tablename ADD INDEX|KEY indexName(propname [(length) [ASC|DESC]]) 2. 唯一索引 所谓唯一索引,就是在创建索引时,限制索引的值必须唯一,主键就是一种特殊的唯一索引
创建表时直接创建索引
CREATE TABLE tablename( propname1 type1 [CONSTRAINT1], propname2 type2 [CONSTRAINT2], .
进程与线程详解 本博客分以下几个部分来阐述进程与线程
1、进程的概念很抽象?那么什么是进程呢?
2、开启一个进程,操作系统会做哪些工作?
3、既然进程也可以使多个程序能并发执行,为什么还需要线程?
4、进程与线程有哪些联系呢?
什么是进程? 进程是计算机程序从启动到结束的过程。 那么什么是计算机程序呢? 我们常见的QQ、微信、英雄联盟这些软件都是一个计算机程序,(可以说我们从打开QQ到关闭QQ就是一段进程)。 不难理解,这些计算机程序是由代码,以及图片、音频、jar包等必要的资源文件组成的。 开启一个进程,操作系统会做哪些工作呢? ①进程的ID号。当操作系统收到我们要打开QQ进程的时候,操作系统会给QQ进程一个ID号,我们可以通过任务管理器窗口看到该进程ID ②申请内存空间。每个进程拥有独立的地址空间。 既然进程也可以使多个程序能并发执行,为什么还需要线程? 从用户使用的角度来看 进程的并发解决了哪些问题呢? 多应用同时进行,在QQ音乐听歌的同时 还可以刷QQ空间。 应用分身,这允许我们同时登录好多人的QQ号。 如果我们QQ进程中只有一个线程,会发生什么呢? 单线程的进程是完全顺序结构,只能在同一时间做一件事情。比如我们在使用QQ进行文件传输的时候,就无法和好友发消息 闲聊了。 从上下文状态切换的角度来看 进程的单位比较大,创建/销毁、进行上下文切换比较浪费资源 线程的单位比较小,创建/销毁、上下文切换不太浪费资源 所以,需要频繁创建销毁时,要考虑线程 。在需要大量计算、切换频繁时 使用线程可以提高程序的响应速度 。 线程的引入优点很多,又有哪些问题呢? 开发更加麻烦。 线程可以共享一个进程的资源,所以共享的数据要保证安全。 线程的执行顺序,也需要保证,比如我们要给QQ好友发送一张图片,这篇文章传输过程中可能被分成了很多份小的 数据包来发送,这个时候QQ好友接收数据包的顺序不能乱。 进程与线程有哪些联系呢? 一个进程之中可以包含多个线程 线程可以共享一个进程的资源
Linux下磁盘的挂载 一、物理连接 插入磁盘或者其他可移动存储设备
二、查看设备 使用fdisk -l 查看当前的设备
可以查看到当前连接的设备
三、挂载设备 使用命令mount来进行挂载
mount /dev/sda1 /mnt/usb
其中: /dev/sda1 表示要挂载的设备 /mnt/usb 表示挂载的目标文件夹
四、NTFS支持
Redis 概念: redis是一款高性能的NOSQL系列的非关系型数据库 1.1.什么是NOSQL NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。 随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
1.1.1. NOSQL和关系型数据库比较 优点: 1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。 2)查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。 3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。 4)扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。 缺点: 1)维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。 2)不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本。 3)不提供关系型数据库对事务的处理。 1.1.2. 非关系型数据库的优势: 1)性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。 2)可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。 1.1.3. 关系型数据库的优势: 1)复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。 2)事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。 1.1.4. 总结 关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库, 让NoSQL数据库对关系型数据库的不足进行弥补。 一般会将数据存储在关系型数据库中,在nosql数据库中备份存储关系型数据库的数据 1.2.主流的NOSQL产品 • 键值(Key-Value)存储数据库 相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB 典型应用: 内容缓存,主要用于处理大量数据的高访问负载。 数据模型: 一系列键值对 优势: 快速查询 劣势: 存储的数据缺少结构化 • 列存储数据库 相关产品:Cassandra, HBase, Riak 典型应用:分布式的文件系统 数据模型:以列簇式存储,将同一列数据存在一起 优势:查找速度快,可扩展性强,更容易进行分布式扩展 劣势:功能相对局限 • 文档型数据库 相关产品:CouchDB、MongoDB 典型应用:Web应用(与Key-Value类似,Value是结构化的) 数据模型: 一系列键值对 优势:数据结构要求不严格 劣势: 查询性能不高,而且缺乏统一的查询语法 • 图形(Graph)数据库 相关数据库:Neo4J、InfoGrid、Infinite Graph 典型应用:社交网络 数据模型:图结构 优势:利用图结构相关算法。 劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。 1.
一、nginx正向代理介绍及配置 1、环境介绍# 代理服务器系统环境为:centos
nginx代理服务器为:192.168.10.10
测试客户端为局域网内任意windows电脑或Linux电脑
2、正向代理简介# nginx不仅可以做反向代理,还能用作正向代理来进行上网等功能。如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理(也就是大家常说的,通过正向代理进行上网功能) 3、nginx正向代理的配置# 现在的网站基本上都是https,要解决既能访问http80端口也能访问https443端口的网站,需要配置两个SERVER节点,一个处理HTTP转发,另一个处理HTTPS转发,而客户端都通过HTTP来访问代理,通过访问代理不同的端口,来区分HTTP和HTTPS请求。 [root@localhost ~]# vim /usr/local/nginx-1.12.1/conf/nginx.conf server { resolver 114.114.114.114; #指定DNS服务器IP地址 listen 80; location / { proxy_pass http://$host$request_uri; #设定代理服务器的协议和地址 proxy_set_header HOST $host; proxy_buffers 256 4k; proxy_max_temp_file_size 0k; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_next_upstream error timeout invalid_header http_502; } } server { resolver 114.114.114.114; #指定DNS服务器IP地址 listen 443; location / { proxy_pass https://$host$request_uri; #设定代理服务器的协议和地址 proxy_buffers 256 4k; proxy_max_temp_file_size 0k; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_next_upstream error timeout invalid_header http_502; } } [root@localhost ~]# /usr/local/nginx-1.