首页 文章 精选 留言 我的

精选列表

搜索[学习笔记],共10005篇文章
优秀的个人博客,低调大师

Docker快速安装Oracle11G,搭建oracle11g学习环境

安装说明 1.操作系统CentOS7_x64 2.安装的数据库为Oracle11G 3.已经安装了Docker环境 4.安装一些必要的软件 sh 复制代码 yum install unzip -y unzip:解压oracle安装文件 5.提前准备Oracle11G安装镜像 下载地址:https://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 6.需要检查是否有swap分区,如果没有请设置 安装 1.镜像准备 将下载的Oracle安装包上传到指定目录并解压 如:/data0/oracle 解压命令 sh 复制代码 unzip linux.x64_11gR2_database_1of2.zip && unzip linux.x64_11gR2_database_2of2.zip 2.Docker安装 镜像准备 sh 复制代码 docker pull jaspeen/oracle-11g 启动镜像 sh 复制代码 docker run --privileged --name oracle11g -p 11030:1521 -v /data0/oracle:/install jaspeen/oracle-11g 注: /data0/oracle为刚刚Oracle解压路径 oracle11g为Docker容器名称 1521:1521为内部端口映射外部端口 等待安装结束 3.切换镜像配置密码 查看镜像是否在运行 sh 复制代码 docker ps 进入oracle11g容器 sh 复制代码 docker exec -it oracle11g /bin/bash 注:oracle11g为Docker容器名称,注意与上面对应 切换到image的oracle用户 sh 复制代码 su - oracle 进入oracle数据库 sh 复制代码 sqlplus / as sysdba 查看数据库运行状态 sh 复制代码 select status from v$instance; 修改sys用户密码 sh 复制代码 alter user sys identified by oracle; 4.外网连接测试 用户名:sys 密码:oracle 服务名:orcl 端口:1521

优秀的个人博客,低调大师

TweenMax学习笔记整理

因为要做一个案例,里面用到了很多动画,TweenMax真的是一个很强大的动画库,所以就学了一点里面的方法,现在整理出来 官网:https://greensock.com/tweenmax 注意:这个动画库是基于jQuery的,所以使用前要先引入jQuery哦! 下面的所有方法都在TimelineMax对象下,要先得到动画实例,所以使用我下面的方法的时候要注意先写下面的代码: var t = new TimelineMax(); 用到的方法整理: to():添加动画; 参数说明: 元素选择器或对象 持续时间 对象(变化的属性->值) 【可选】动画延迟发生的时间(可写数字,“-=0.5”,“+=0.5”) 一例胜千言,嗯,先看看下面的小实例 在这个例子中,等待1s后,元素"#div1"的left和width同时变化,left用时1s后到达目标点,width用时2s到达目标点,过1s钟高度开始变化,高度到达目标点后(用时2s),元素围绕z轴旋转180deg(用时2s),旋转后,透明度发生变化(用时2s) 注意:第四个参数是可选参数,如果我们没有写第四个参数,意味着,下面的动画执行都会在上一动画执行完之后开始执行,如果加了第四个参数,就是在上一动画的时间基础上加上或减少延迟时间(针对"+="或"-="),当然如果是数字num,那么 如果num>=0,那就是延迟num执行(注意:不是相对于前一个动画,而是相对于动画的开始时间哦),如果num<0,对于第一个t.to(),延迟负数就相当于0,第二个及以后的t.to,如果延迟时间小于0,则一打开页面运动已经执行完毕(看不到运动的过程) 2、staggerTo():添加动画 参数说明:1. 元素选择器或对象2. 持续时间3. 对象 变化的属性->值 4.【可选】一组动画间的延迟时间,数字 5. 【可选】一组动画整体延迟发生时间 可写数字,“-=0.5”,“+=0.5“ 这个方法和t.to()方法语法和使用都一样,那两者不一样的地方就是,先看下面的例子吧! 在这个例子中,如果我们没有加第四个参数的时候,两者的效果是一样的,即所有的div都同时执行,然后同时到达目标点 但是如果我们加了第四个参数的话,使用t.to()方法的时候,所有的div还是同时执行,但是如果我们使用的是t.staggerTo(),后面的div都会等到前面的div执行完成之后再执行(不是一起执行,而是依次执行) 注意:个人比较建议使用这个方法,一般是针对一类元素,然后,第四个参数,如果为正数,代表正序执行,绝对值代表延迟时间,如果是负数,则表示倒序执行,绝对值也是延迟时间(个人测试得出的结论) 如果是不同的类别元素使用t.staggerTo()方法,我测试发现,其实第四个参数并不起作用,不管时间是多少,都是按照写的顺序依次执行,并且中间是没有间隔的 <div class="div1"> </div> <div class="div2"> </div> <div class="div3"> </div> $(function(){ var t = new TimelineMax(); t.staggerTo( ".div1",1,{width:300},2 ); t.staggerTo( ".div2",3,{height:300},0); t.staggerTo( ".div3",1,{background:"blue"},-1); }); 上面的执行顺序是先div1宽度变化,然后div2的height发生变化,最后是div3的background发生变化 第五个参数,代表一组动画整体提前或延迟多少执行 上面的是我自己经过不断测试得出的结论,如果有什么地方不正确,欢迎指正哦 3、下面的比较好理解,看字面意思就知道了 stop():停止动画 play():开始动画 reverse():反向开始动画 onComplete():运动结束后触发对应的函数 onReverseComplete():反向运动结束后触发对应的函数 看例子吧 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <style> #div1{ width: 100px; height: 100px; background: red; position: absolute; left: 0; top:50px; } </style> <script type="text/javascript" src="./js/jquery-1.8.3.js"></script> <script type="text/javascript" src="./js/TweenMax.js"></script> <script> $(function(){ var t = new TimelineMax(); t.stop(); t.to( "#div1",1,{left:300,onComplete:function(){ alert("left:300") },onReverseComplete:function(){ alert("反向left:0"); }} ); t.to( "#div1",2,{width:300,onComplete:function(){ alert("width:300") },onReverseComplete:function(){ alert("反向width:100") }} ); $("#play").click(function (){ t.play(); }) $("#stop").click(function (){ t.stop(); }) $("#reverse").click(function (){ t.reverse(); }) }) </script> </head> <body> <input type="button" id="play" value="播放" /> <input type="button" id="stop" value="停止" /> <input type="button" id="reverse" value="反向动画" /> <div id="div1"></div> </body> </html> 注意:如果我们没有加t.stop()方法的时候,元素都是在打开页面后便开始执行动画,当我们加了t.stop()方法后,所有的的动画都不会执行,只有我们调用t.play()方法的时候,才会开始执行 4、add---添加状态 参数说明: 1. 字符串或一个函数 TweenTo---完成指定的动画(过渡) 参数说明: 1. 指定时间或状态的字符串 这两个方法一般都是结合使用的,所以先看例子呗 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <style> #div1{ width: 100px; height: 100px; background: red; position: absolute; left: 0; top:50px; } </style> <script type="text/javascript" src="./js/jquery-1.8.3.js"></script> <script type="text/javascript" src="./js/TweenMax.js"></script> <script> $(function(){ var t = new TimelineMax(); t.add("state1"); t.to( "#div1",1,{left:300} ); t.to( "#div1",2,{width:300} ); t.add("state2"); t.to( "#div1",3,{height:300} ); t.add("state3") t.tweenTo( "state2" ); }) </script> </head> <body> <div id="div1"></div> </body> </html> 注意:当我们使用t.tweenTo()方法的时候,即便我们添加了t.stop()方法,也不会影响t.tweenTo()方法的执行,比如在这个例子中,即便我们添加了t.stop()方法,页面在打开的时候,还是会立即执行到状态2 5、seek():完成指定的动画(无过渡) 参数说明: 1. 指定时间或状态 2. 【可选】布尔值 true:不执行函数 默认 false: 执行函数 和上面的t.tweenTo()方法很相似,不同的是,这个没有过渡效果,如果把上面的例子中t.tweenTo()方法换成t,seek()方法,结果就是一打开页面,元素的left和width就为300,看不多动画效果 5、下面两个很好理解了,就不啰嗦了 time():动画已执行的时间 clear:清除所有动画 6、 totalDuration():获取动画的总时长 getLabelTime():返回从开始到当前状态的时间参数说明:1. 状态的字符串返回值是一个数字 currentLabel():获取当前状态 返回值是状态的字符串 没什么好解释的,看例子就都懂了 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <style> #div1{ width: 100px; height: 100px; background: red; position: absolute; left: 0; top:50px; } </style> <script type="text/javascript" src="./js/jquery-1.8.3.js"></script> <script type="text/javascript" src="./js/TweenMax.js"></script> <script> $(function(){ var t = new TimelineMax(); t.add( "state1" ); t.to( "#div1",1,{left:300}); t.to( "#div1",2,{width:300,onComplete:function(){ getCurrentLabel(); }} ); t.add( "state2" ) t.to( "#div1",3,{height:300,onComplete:function(){ getCurrentLabel(); }} ); t.add( "state3" ) alert( t.totalDuration() ) alert( t.getLabelTime( "state3" ) ) alert( t.currentLabel() ) getCurrentLabel(); function getCurrentLabel(){ //alert( t.currentLabel() ) alert( t.getLabelTime( t.currentLabel() ) ) } }) </script> </head> <body> <div id="div1"></div> </body> </html> 7、getLabelAfter():获取下一个状态 参数说明:1. 时间数字返回值是状态的字符串,如果没有下一个状态返回null getLabelBefore():获取上一个状态参数说明:1. 时间数字 返回值是状态的字符串,如果没有上一个状态返回null <!DOCTYPE html> <html lang="zh-cn"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <style> #div1{ width: 100px; height: 100px; background: red; position: absolute; left: 0; top:50px; } </style> <script type="text/javascript" src="./js/jquery-1.8.3.js"></script> <script type="text/javascript" src="./js/TweenMax.js"></script> <script> $(function(){ var t = new TimelineMax(); t.add( "state1" ); t.to( "#div1",4,{left:300}); t.to( "#div1",5,{width:300,onComplete:function(){ getCurrentLabel(); }} ); t.add( "state2" ) t.to( "#div1",6,{height:300,onComplete:function(){ getCurrentLabel(); }} ); t.add( "state3" ) //alert( t.totalDuration() ) //alert( t.getLabelTime( "state3" ) ) //alert( t.currentLabel() ) getCurrentLabel(); function getCurrentLabel(){ //获取当前的时间 var currentTime = t.getLabelTime( t.currentLabel() ); //获取到上一个状态 var beforeLabel = t.getLabelBefore( currentTime ); //获取到下一个状态 var afterLabel = t.getLabelAfter( currentTime ); var str = "<p>上一个状态:"+ beforeLabel +"</p><p>当前状态:"+ t.currentLabel() +"</p><p>下一个状态:"+ afterLabel +"</p>"; $("#label").html( str ); } }) </script> </head> <body> <div id="label"></div> <div id="div1"></div> </body> </html> 原文发布时间:2018年06月18日 作者:冰雪为融 本文来源:CSDN如需转载请联系原作者

优秀的个人博客,低调大师

iOS开发学习笔记

1常用的第三方工具 1.1 iPhone Simulator 测试程序需要模拟器iPhone Simulator 1.2 设计界面需要Interface Builder,Interface Builder(IB)中将视图拖拽到窗口上并将各种视图连接到插座变量和动作上, 这样它们就能以编程方式与代码交互。IB使用Nib文件储存GUI资源,同时适用于Cocoa和Carbon程序。在需要的时候,Nib文件可以被快速地载入内存。 2iOS的常用开发框架 2.1 Foundation框架,该框架允许使用一些基本对象,如数字和字符串,以及一些对象集合,如数组、字典和集合,还有其他功能,包括处理日期和时间、自动化的 内存管理、处理基础文件系统、存储(或归档)对象、处理集合数据结构(如点和长方形)等。 2.2 Cocoa框架,术语Cocoa(适合开发桌面应用程序)是指Foundation框架和Application Kit框架(窗口、按钮、列表等能够开发交互式图形应用程序)。术语Cocoa Touch(适合iPhone和iTouch的应用程序开发)是指Foundation框架和UIKit框架。 3iOS程序框架 3.1 典型的iOS程序包含一个Window(窗口)和几个UIViewController(视图控制器),每个UIViewController可以管理多高UIView(在iPhone里看到的、摸到的都是UIView, 可能是UITableView、UIWebView、UIImageView等)。这些UIView之间如何进行层次叠放、显示、隐藏、旋转、移动等都由UIViewController进行管理,而 UIViewcontroller之间的切换,通常情况是通过UINavigationController(当程序具有层次化的工作流时,比较适合)、UITabBarController(当应用程序需要分为几个 相对比较独立的部分时,比较适合,比如tab)或UISplitViewController(适合用于“主-从”界面的情况,比如左菜单,右明细)进行。 4MVC 4.1 MVC的处理过程:首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理;然后模型用业务逻辑来处理用户的请求并返回数据;最后控制器用相应的视图格式化 模型返回的数据,并通过表示层呈现给用户。 5创建并连接输出口和操作 在Assistant Edit模式下,将视图控件拖拽到包含控件ViewController.h的代码编辑器中,当鼠标位于@interface行下时松开。 创建IBOutlet,是指输出口,用于实例变量/属性; 创建IBAction,是指操作,用于事件。 本文转自SharkBin博客园博客,原文链接:http://www.cnblogs.com/SharkBin/p/5268086.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

SWIFT学习笔记01

1、Swift。用来推断option是不是nil,相当于OC的 if(option) if let name = option{ greeting = “if=====“ }else{ greeting = "else===" } 2、执行switch中匹配到的子句之后。程序会退出switch语句,并不会继续向下执行,所以不须要在每一个子句结尾写break。 3、//使用..创建的范围不包括上界,假设想包括的话须要使用...,集合上,就是[)与[]的关系 for i in 0..3{ println("i===\(i)")//仅仅经历0,1,2三次循环 } 4、//传入数组參数 func sumOf(numbers:Int...) -> Int{ var sum = 0 for number in numbers{ sum += number } return sum } 5、//函数嵌套,函数里面定义并使用函数 func returnFifteen() -> Int{ var y = 10 func add(){ y+=5 } add() return y } 6、处理变量的可选值时。你能够在操作(比方方法、属性和子脚本)之前加? 。假设?之前的值是nil,? 后面的东西都会被忽略。而且整个表达式返回nil。否则,?之后的东西都会被执行。 本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5180947.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

学习笔记 十六 : Docker

一 docker简介 docker是一个轻量级的,运行在用户内核的一组进程,与主机系统想隔离。它有自己的进程,文件系统和其它资源,它可以和其它主机共享物理主机内核。 二 安装配置 yum install docker systemctl start docker systemctl enable docker docker pull registry.access.redhat.com/redhat/rhel7 docker load -i rhel-server-docker-7.0.tar.gz docker images docker run -i -t --rm rhel7 cat /etc/hosts docker ps -a docker start -ai silly_fermi3 2.创建docker镜像 docker run -i rhel7 bash -c "yum install -y httpd;" docker ps -l docker commit -m "RHEL7+httpd" dreamy_goodall1 rhel_httpd docker images docker run -p 8080:80 -d rhel_httpd /usr/sbin/httpd -DFOREGROUND yum install docker-registry systemctl start docker-registry systemctl enable docker-registry firewall-cmd --add-port=5000/tcp firewall-cmd --add-port=5000/tcp --permanent docker tag rhel_httpd registry.example.com:5000/usr/httpd docker push registry.example.com:5000/user/httpd 三 案例 3.1 docker 私有仓库搭建 3.2 docker 发布一个web应用 3.3 docker 发布一个mysql服务 3.4 docker高可用 本文转自 woshiwei201 51CTO博客,原文链接:http://blog.51cto.com/chenwei/1841979

优秀的个人博客,低调大师

android学习笔记(1)

1.android概念 android是一个软件合集,包括操作系统,中间件和关键应用程序.(取自android sdk所带的文档) 2.android的体系结构 官方给出来的体系结构如下: 可以看到,自顶向下,android体系结构分为4层:应用程序层,框架层,库与运行时层,linux内核层. 应用程序 我们自己开发出来的程序属于这一层.应用程序使用java编程语言来写. 应用程序框架 提供了一些api,有很好的复用性. 库与运行时 库是一些基本的程序包(C/C++实现);运行时和java的运行时类似. linux内核 提供了操作系统所需的最基本的东西(包括一些驱动) 3.android历史 2005年Google收购Android公司 2007年Google联合总共34家公司成立开放手机联盟(open handset alliance,OHA) 2008年9月22日,Google第一款手机T-Mobile G1面世 2009年2月,android sdk 1.1发布 本文转自leipei博客园博客,原文链接:http://www.cnblogs.com/leipei2352/archive/2011/08/01/2124002.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

7、yum 学习笔记

Linux的程序包管理: 软件包的组成部分: 二进制程序 /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin 库 lib, /usr/lib, /lib64, /usr/lib64, /usr/local/lib, /usr/local/lib64 /etc/ld.so.conf, /etc/ld.so.conf.d/*.conf 配置文件 /etc 帮助文件 man文件, info文件, README, INSTALL, ChangeLog man COMMAND 到某路径下查找与命令名同名的通常以.gz结尾的压缩文件的名字 /usr/share/man/ ldd命令: 查看应用所依赖的共享库 ldd [options] FILE... rpm包的使用: rpm包命名格式: 源程序:name-version.tar.{gz|bz2|xz} version: major.minor.release rpm包:name-version-release.arch.rpm release:通常包含rpm的制作发行号,还包含适用的OS bash-4.3.2-2.el6.x86_64.rpm 来源合法性验正: 源程序:通过md5或sha1校验码验正; rpm包:发行商提供的合法性是可信的 验正包完整性:校验码 验正来源合法:公钥 获取rpm包的途径: 1、发行商的光盘或站点服务器 以CentOS为例: http://mirrors.163.com http://mirrors.sohu.com 2、http://rpmfind.net 3、http://rpm.pbone.net rpm包管理:安装 # rpm -ivh [install-options] /path/to/rpm_package 安装软件包,显示安装进度 [install-options] --test 仅测试,不真正执行安装过程 --nodeps 忽略依赖关系 --replacepkgs 重新安装 原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件 rpm包管理:卸载 #rpm -e [install-options] package_name 卸载软件包 [install-options] --nodeps 忽略依赖关系 rpm包管理:查询 #rpm -qa 查询所有已经安装的包 #rpm -q package_name 查询某单个包是否安装 #rpm -qi package_name 查询包的描述信息 #rpm -ql package_name 查询包安装之后在当前系统生成文件列表 #rpm -qd package_name 查询包安装后生成的帮助文档 #rpm -qc package_name 查询包安装后生成的配置文件 #rpm -qf /path/to/somefile 查询某文件是哪个包安装生成的 #rpm -q --scripts package_name 查询包相关的脚本 脚本有四类: preinstall 安装前脚本 postinstall 安装后脚本 preuninstall 卸载前脚本 postuninstall 卸载后脚本 查询尚未安装的rpm包文件的相关信息: #rpm -pqi /path/to/package_file 查询包的描述信息 #rpm -pql /path/to/package_file 查询包安装之后在当前系统生成文件列表 #rpm -pqd /path/to/package_file 查询包安装后生成的帮助文档 #rpm -pqc /path/to/package_file 查询包安装后生成的配置文件 rpm包之升级: #rpm -Uvh [install-options] /path/to/package_file 升级或安装 #rpm -Fvh [install-options] /path/to/package_file 升级 [install-options] --nodeps 忽略依赖关系 --force 强行安装 rpm包管理:检查包安装后生成的文件是否被修改过; #rpm -V package_name S file Size differs M Mode differs (includes permissions and file type) 5 digest (formerly MD5 sum) differs D Device major/minor number mismatch L readLink(2) path mismatch U User ownership differs G Group ownership differs T mTime differs P caPabilities differ rpm包管理:检验来源合法性和软件包完整性 包完整性:通过单向加密机制(md5|sha1) 来源合法性:通过公钥加密机制(RSA) 导入制作者的公钥,CentOS发行版的公钥在iso文件中; 导入命令:rpm --import /path/to/gpg-key-file #pm -K --nosignature /path/to/package_file 只检查完整性,不检查来源合法性 #pm -K --nodigest /path/to/package_file 不检查完整性,只检查来源合法性 #pm -K /path/to/package_file 既检查完整性,又检查来源合法性 rpm包管理:数据库重建 数据库:/var/lib/rpm/ #rpm --initdb 初始化,如果事先不存在一个数据库,则新建之; #rpm --rebuilddb 重建,直接重建数据库,会覆盖原有的库; yum客户端: 1、配置文件:指定各可用的yum仓库; 2、缓存元数据:yum会到各可用yum仓库获取元数据,并缓存至本地; 3、分析元数据:根据具体操作请求完成元数据分析, 可能包括检查依赖关系、文件列表等信息; 4、执行具体操作: 客户端配置文件指定对应服务器访问方式: ftp ftp://server/path/to/repo http http://server/path/to/repo nfs nfs://server/nfs_path file file:///path/to/repository 要使用yum管理应用程序,首先得配置其可用的yum仓库,保存在配置文件中: /etc/yum.conf /etc/yum.repos.d/*.repo 配置文件格式:由两段组成,类似windows的ini配置文件 [main] :主配置段 [repo] :仓库配置段 配置repo: [repo_ID] name=String baseurl=仓库的访问路径 enabled={1|0} gpgcheck={1|0} gpgkey=公钥文件(可以在本地,也可是服务器端路径) cost=定义此仓库开销,默认为1000 [base] name=CentOS 6.5 X86_64 relase baseurl=http://172.16.0.1/cobbler/ks_mirror/centos-6.5-x86_64/ enabled=1 gpgcheck=1 gpgkey=http://172.16.0.1/cobbler/ks_mirror/centos-6.5-x86_64/RPM-GPG-KEY-CentOS-6 yum的各命令: # yum repolist 列出所有可用yum repo #yum clean all 清理缓存 #yum list [all|installed|available] 列出[所有的安装包|已安装包|可安装包] # yum info package_name 列出包的描述信息 # yumwhatprovides|provides /path/to/somefile 查询某文件是由哪个包安装生成的 # yuminstall package_name 安装指定的程序包 # yum reinstall package_name 重新安装指定的程序包 # yumerase package_name 卸载指定的程序包 # yumcheck-update 检查可升级的包 # yumupdate package_name 升级指定的程序包 # yum downgrade package_name 降级指定的程序包 # yum grouplist 列出所有包组 # yum groupinfo "group_name" 显示包组信息 # yum groupinstall "group_name" 安装指定的包组 # yum groupremove "group_name" 卸载指定的包组 如果系统为CentOS 5,常用的开发包组为“Development Tools”和“Development Libraries” 如果系统为CentOS 6,常用的开发包组为“Development Tools”和“Server Platform Development” 安装本地包: # yum install /path/to/package_file 手动禁止检查来源及完整性:--nogpgcheck # yum --nogpgcheck install /tmp/zsh-2.3.1-2.el6.x86_64.rpm 练习:安装相关的包组,确保如下命令可执行 # gcc --version gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4) Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. #yum -y groupinstall "Development tools" "Server Platform Development" yum repository: 文件服务器 repodata/: repomd.xml: 测试实现yum repository的配置: 1、准备文件服务器;使用httpd为例,请事先确保已经安装httpd程序包; 2、在/var/www/html目录,使用一个目录来保存准备制作成为yum仓库的所有rpm包; # cd /var/www/html # lftp 172.16.0.1/pub/Sources/6.x86_64 # lftp: > mirror openstack # bye 3、创建yum仓库 # rm -rf /var/www/html/openstack/repodata # createrepo /var/www/html/openstack 4、启动httpd服务 # service httpd start 5、配置使用自建的yum仓库 [openstack] name=Openstack Repository baseurl=http://172.16.100.7/openstack/ enabled=1 gpgcheck=0 6、配置好epel的yum源 7、测试使用 # yum install openstack-keystone 程序包管理之编译安装: 源程序: 项目工程:把代码分散于多个源代码文件 GNU/make autoconf: configure脚本 检查编译环境是否编译需求,并定义当前程序编译时启用哪个特性或功能,以及安装路径的定义等等; 结果:会根据Makefile.in文件生成makefile文件 automake: Makefile.in文件 用于结合configure脚本生成makefile文件 makefile文件是make命令的配置文件 编译安装的步骤: 1、拿到源代码,并解压: # tar xf package-version.tar.{gz|bz2|xz} 注意:展开后的目录名通常为package-version 2、切换至源码目录中 # cd package-version 3、执行configure脚本 # ./configure 4、编译 # make 5、安装 # make install configure脚本的通用功能: 我们需要定义的配置: 1、指定安装路径: --prefix=/usr/local/package_name --sysconfdir=/etc/package_name 2、指定启用/禁用的特性: --enable-feature: 例如--enable-fpm --disable-feature: 例如 --disable-socket 3、指定所依赖功能、程序或文件 --with-function:启用某功能 --without-function:禁用某功能 不同的程序,其configure脚本功能不同,要获取帮助: ./configure --help 练习: 1、编译安装nginx, 并启动之; 2、编译安装axel,并试用之; 3、编译安装httpd,并启动之; /usr/local/apache/bin 二进制程序: # vim /etc/profile.d/apache.sh PATH=/usr/local/apache/bin:/usr/local/apache/sbin:$PATH export PATH 头文件输出给系统: # ln -sv /usr/local/apache/include /usr/include/httpd 库文件输出: # vim /etc/ld.so.conf.d/httpd.conf /usr/local/apache/lib 让系统重新生成库文件路径缓存 # ldconfig 导出man文件: # vim /etc/man.config MANPATH /usr/local/apache/man 本文转自开源殿堂 51CTO博客,原文链接:http://blog.51cto.com/kaiyuandiantang/1942716,如需转载请自行联系原作者

优秀的个人博客,低调大师

Hadoop学习笔记一

第一个hands-on入门程序: 参考 http://blog.csdn.net/sim_szm/article/details/12578055 搭建环境并跑WordCount程序,区别是我安装的是最新的hadoop版本0.23.11,JDK我使用的是Sun JDK,Linux使用的是国产的Kylin。 问题一:Error: JAVA_HOME is not set and could not be found. 解决方案: /etc/profile 文件中export JAVA_HOME ${HADOOP_HOME}/libexec/hadoop-config.sh 显式export JAVA_HOME ${HADOOP_HOME}/etc/hadoop/yarn-env.sh显式export JAVA_HOME 问题二:NameNode 没有启动 解决方案: 删除core-site.xml文件中配置的tmp目录 运行 hadoop namenode -format 命令 再运行sbin目录下的start-dfs.sh脚步启动NameNode和datanode 问题三:为何需要SSH 解决方案:Hadoop集 群成员的通讯机制都是使用SSH,即使是单机环境,内部脚本也会运行 ssh localhost进行处理,所以安装SSH是必须的。 本文转自sarchitect 51CTO博客,原文链接:http://blog.51cto.com/stevex/1535193,如需转载请自行联系原作者

优秀的个人博客,低调大师

docker学习笔记(1)

(1)Docker介绍 关于Docker的介绍,我就不列举出来了。到百度、谷歌搜索。非常多介绍文章。以下我给出官网的介绍:https://www.docker.com/whatisdocker/ (2)体验Docker Docker官网提供了一个体验的交互教程:https://www.docker.com/tryit/ 想要尝尝鲜的能够去试一试。对docker有个大概了解。 (3)Ubuntu下Docker的安装 不同系统下docker的安装有些不一样,以下我是在ubuntu14.04 x64系统下安装。Docker官方推荐最佳的系统是Ubuntu x64。 $ sudo apt-get update $ sudo apt-get install docker.io $ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker $ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.i 假设想要使用最新的Docker,要检查APT系统能处理https,文件 /usr/lib/apt/methods/https 应该存在,假设不存在。则须要安装包 apt-transport-https apt-get update apt-get install apt-transport-https 然后。加入docker repositor $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21 $ sudo sh -c "echo deb https://get.docker.io/ubuntu docker main\ > /etc/apt/sources.list.d/docker.list" $ sudo apt-get update $ sudo apt-get install lxc-docker 到这里,docker安装完毕,要检验docker是否成功安装,能够输入以下命令检查: $ sudo docker run -i -t ubuntu /bin/bas 备注:其它操作系统。如Centos、Debian的安装见官网教程:https://docs.docker.com/installation/#installation (4)经常使用命令 在上面的安装完毕后。在终端命令行下输入:docker,会列出非常多命令,以下我列举几个最经常使用的命令。 A、docker images--------------查看images B、docker ps--------------------查看正在执行的container C、docker pull ----------------下载image活repository D、docker commit------------创建新的image E、docker rm-------------------删除container F、docker rmi-------------------删除image G、docker run-----------------在新的container中执行image或command (5)在docker下安装ubuntu A、docker pull ubuntu:14.04 这个命令表示下载ubuntu 14.04版镜像 下载完毕后。我们能够输入docker images查看全部镜像。能够看到我们刚刚下载的ubuntu镜像。 B、执行ubuntu 14.04 镜像 docker run -i -t ubuntu:14.04 输入docker run命令能够查看run下的參数意义。成功执行后,我们会进入例如以下的终端显示界面: b2a2e188ae57表示HOSTNAME。这里你执行的结果可能和我不一样,以下你就能够在这个ubuntu系统下操作。 C、保存操作记录 在进入到虚拟系统后。我们在里面做一些操作,比如在根文件夹下创建一个test.txt文件。 touch test.txt。 然后退出系统:exit。 在下次我们再次执行这个系统时,会发如今根文件夹下不存在test.txt,也就是说我们之前的操作没有保存。要想保存在虚拟系统里的操作。要用到docker commit命令 在我们运行了touch test.txt创建了文件后,使用exit退出系统。 然后输入:docker commit b2a2 ubuntu:14.04,这里b2a2是之前执行的image的标示ID。不用输入所有。仅仅需4个左右字符就可以。 这个命令表示将之前对镜像的操作保存到ubuntu:14.04下。也就是我们执行的镜像,下次再次执行docker run -t -i ubuntu:14.04,就能够看到根文件夹下的test.txt文件。假设想对保存到新的镜像。仅仅需将ubuntu:14.04改成你想要的名称就可以。 如:docker commit b2a2 myubuntu,输入docker iamges。就能够看到myubuntu,当然之前的ubuntu:14.04还在。 參考: (1)https://docs.docker.com/installation/#installation 本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5227674.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android Animation学习笔记

关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画; 2. Frame Animation:顺序播放事先做好的图像,是一种画面转换动画。 动画类型 下面先来看看Android提供的动画类型。Android的animation由四种类型组成 在XML文件中: alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 在Java 源码中定义了相应的类,可以使用这些类的方法来获取和操作相应的属性: AlphaAnimation渐变透明度动画效果 ScaleAnimation渐变尺寸伸缩动画效果 TranslateAnimation画面转换位置移动动画效果 RotateAnimation画面转移旋转动画效果 Tween Animation 一个tween动画将对视图对象中的内容进行一系列简单的转换(位置,大小,旋转,透明性)。如果你有一个文本视图对象,你可以移动它,旋转它,让它变大或让它变小,如果文字下面还有背景图像,背景图像也会随着文件进行转换。 使用XML来定义Tween Animation 动画的XML文件在工程中res/anim目录,这个文件必须包含一个根元素,可以使<alpha><scale> <translate> <rotate>插值元素或者是把上面的元素都放入<set>元素组中,默认情况下,所以的动画指令都是同时发生的,为了让他们按序列发生,需要设置一个特殊的属性startOffset。动画的指令定义了你想要发生什么样的转换,当他们发生了,应该执行多长时间,转换可以是连续的也可以使同时的。例如,你让文本内容从左边移动到右边,然后旋转180度,或者在移动的过程中同时旋转,没个转换需要设置一些特殊的参数(开始和结束的大小尺寸的大小变化,开始和结束的旋转角度等等,也可以设置些基本的参数(例如,开始时间与周期),如果让几个转换同时发生,可以给它们设置相同的开始时间,如果按序列的话,计算开始时间加上其周期。 Tween Animation共同的节点属性 属性[类型] 功能 备注 Duration[long] 属性为动画持续时间 时间以毫秒为单位 fillAfter [boolean] 当设置为true ,该动画转化在动画结束后被应用 fillBefore[boolean] 当设置为true ,该动画转化在动画开始前被应用 interpolator 指定一个动画的插入器 有一些常见的插入器 accelerate_decelerate_interpolator 加速-减速 动画插入器 accelerate_interpolator 加速-动画插入器 decelerate_interpolator 减速- 动画插入器 其他的属于特定的动画效果 repeatCount[int] 动画的重复次数 RepeatMode[int] 定义重复的行为 1:重新开始 2:plays backward startOffset[long] 动画之间的时间间隔,从上次动画停多少时间开始执行下个动画 zAdjustment[int] 定义动画的Z Order的改变 0:保持Z Order不变 1:保持在最上层 -1:保持在最下层 表二 XML节点 功能说明 alpha 渐变透明度动画效果 <alpha android:fromAlpha=”0.1″ android:toAlpha=”1.0″ android:duration=”3000″ /> fromAlpha 属性为动画起始时透明度 0.0表示完全透明 1.0表示完全不透明 以上值取0.0-1.0之间的float数据类型的数字 duration为动画持续时间,ms单位 toAlpha 属性为动画结束时透明度 表三 scale 渐变尺寸伸缩动画效果 <scale android:interpolator= “@android:anim/accelerate_decelerate_interpolator” android:fromXScale=”0.0″ android:toXScale=”1.4″ android:fromYScale=”0.0″ android:toYScale=”1.4″ android:pivotX=”50%” android:pivotY=”50%” android:fillAfter=”false” android:startOffset=“700” android:duration=”700″ android:repeatCount=”10″ /> fromXScale[float] fromYScale[float] 为动画起始时,X、Y坐标上的伸缩尺寸 0.0表示收缩到没有 1.0表示正常无伸缩 值小于1.0表示收缩 值大于1.0表示放大 toXScale [float] toYScale[float] 为动画结束时,X、Y坐标上的伸缩尺寸 pivotX[float] pivotY[float] 为动画相对于物件的X、Y坐标的开始位置 属性值说明:从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置 表四 translate 画面转换位置移动动画效果 <translate android:fromXDelta=”30″ android:toXDelta=”-80″ android:fromYDelta=”30″ android:toYDelta=”300″ android:duration=”2000″ /> fromXDelta toXDelta 为动画、结束起始时 X坐标上的位置 fromYDelta toYDelta 为动画、结束起始时 Y坐标上的位置 表五 rotate 画面转移旋转动画效果 <rotate android:interpolator=”@android:anim/accelerate_decelerate_interpolator” android:fromDegrees=”0″ android:toDegrees=”+350″ android:pivotX=”50%” android:pivotY=”50%” android:duration=”3000″ /> fromDegrees 为动画起始时物件的角度 说明 当角度为负数——表示逆时针旋转 当角度为正数——表示顺时针旋转 (负数from——to正数:顺时针旋转) (负数from——to负数:逆时针旋转) (正数from——to正数:顺时针旋转) (正数from——to负数:逆时针旋转) toDegrees 属性为动画结束时物件旋转的角度 可以大于360度 pivotX pivotY 为动画相对于物件的X、Y坐标的开始位 说明:以上两个属性值 从0%-100%中取值 50%为物件的X或Y方向坐标上的中点位置 下面给出一个完整的XML定义(SDK提供) <set android:shareInterpolator="false" xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromXScale="1.0" android:toXScale="1.4" android:fromYScale="1.0" android:toYScale="0.6" android:pivotX="50%" android:pivotY="50%" android:fillAfter="false" android:duration="700" /> <set android:interpolator="@android:anim/decelerate_interpolator"> <scale android:fromXScale="1.4" android:toXScale="0.0" android:fromYScale="0.6" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:duration="400" android:fillBefore="false" /> <rotate android:fromDegrees="0" android:toDegrees="-45" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:duration="400" /> </set> </set> Tween Animation如何使用 使用AnimationUtils类的静态方法loadAnimation()来加载XML中的动画XML文件 //main.xml中的ImageView ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage); //加载动画 Animation hyperspaceJumpAnimation =AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump); //使用ImageView显示动画 spaceshipImage.startAnimation(hyperspaceJumpAnimation); 如何在Java代码中定义动画 //在代码中定义 动画实例对象 private Animation myAnimation_Alpha; private Animation myAnimation_Scale; private Animation myAnimation_Translate; private Animation myAnimation_Rotate; //根据各自的构造方法来初始化一个实例对象 myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f); myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f); myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f); interpolator的解释 interpolator定义一个动画的变化率(the rate of change)。这使得基本的动画效果(alpha, scale, translate, rotate)得以加速,减速,重复等。 Interpolator 定义了动画的变化速度,可以实现匀速、正加速、负加速、无规则变加速等。Interpolator 是基类,封装了所有 Interpolator 的共同方法,它只有一个方法,即 getInterpolation (float input),该方法 maps a point on the timeline to a multiplier to be applied to the transformations of an animation。Android 提供了几个 Interpolator 子类,实现了不同的速度曲线,如下: AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢,在中间的时候加速 AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速 CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线 DecelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始减速 LinearInterpolator 在动画的以均匀的速率改变 Frame Animation Frame Animation是顺序播放事先做好的图像,跟电影类似。不同于animation package, Android SDK提供了另外一个类AnimationDrawable来定义、使用Frame Animation。 Frame Animation可以在XML Resource定义(还是存放到res\anim文件夹下),也可以使用AnimationDrawable中的API定义。由于Tween Animation与Frame Animation有着很大的不同,因此XML定义的格式也完全不一样,其格式是:首先是animation-list根节点,animation-list根节点中包含多个item子节点,每个item节点定义一帧动画,当前帧的drawable资源和当前帧持续的时间。下面对节点的元素加以说明: XML属性 说明 drawable 当前帧引用的drawable资源 duration 当前帧显示的时间(毫秒为单位) oneshot 如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。 variablePadding If true, allows the drawable’s padding to change based on the current state that is selected. visible 规定drawable的初始可见性,默认为flase; 下面就给个具体的XML例子,来定义一帧一帧的动画: <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true"> <item android:drawable="@drawable/rocket_thrust1" android:duration="200" /> <item android:drawable="@drawable/rocket_thrust2" android:duration="200" /> <item android:drawable="@drawable/rocket_thrust3" android:duration="200" /></animation-list> 上面的XML就定义了一个Frame Animation,其包含3帧动画,3帧动画中分别应用了drawable中的3张图片:rocket_thrust1,rocket_thrust2,rocket_thrust3,每帧动画持续200毫秒。 然后我们将以上XML保存在res/anim/文件夹下,命名为rocket_thrust.xml,显示动画的代码: AnimationDrawable rocketAnimation;public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image); rocketImage.setBackgroundResource(R.anim.rocket_thrust); rocketAnimation = (AnimationDrawable) rocketImage.getBackground();}public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { rocketAnimation.start(); return true; } return super.onTouchEvent(event);} 代码运行的结果:3张图片按照顺序的播放一次. 有一点需要强调的是:启动Frame Animation动画的代码rocketAnimation.start();不能在OnCreate()中,因为在OnCreate()中AnimationDrawable还没有完全的与ImageView绑定,在OnCreate()中启动动画,就只能看到第一张图片。这里实在拖曳事件中实现的。 下面,阅读Android SDK中对AnimationDrawable的介绍,有个简单的了解: AnimationDrawable 获取、设置动画的属性 int getDuration() 获取动画的时长 int getNumberOfFrames() 获取动画的帧数 boolean isOneShot() Void setOneShot(boolean oneshot) 获取oneshot属性 设置oneshot属性 void inflate(Resurce r,XmlPullParser p, AttributeSet attrs) 增加、获取帧动画 Drawable getFrame(int index) 获取某帧的Drawable资源 void addFrame(Drawable frame,int duration) 为当前动画增加帧(资源,持续时长) 动画控制 void start() 开始动画 void run() 外界不能直接掉调用,使用start()替代 boolean isRunning() 当前动画是否在运行 void stop() 停止当前动画 本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2010/01/11/1644482.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android Service学习笔记

一 什么是Service 服务是运行在后台的一段代码。它可以运行在它自己的进程,也可以运行在其他应用程序进程的上下文(context)里面,这取决于自身的需要。其它的组件可以绑定到一个服务(Service)上面,通过远程过程调用(RPC)来调用这个方法。例如媒体播放器的服务,当用户退出媒体选择用户界面,仍然希望音乐依然可以继续播放,这时就是由服务(service)来保证当用户界面关闭时音乐继续播放的。 它跟Activity的级别差不多,但是他不能自己运行,需要通过某一个Activity或者其他Context对象来调用,Context.startService()和Context.bindService()。两种启动Service的方式有所不同。这里要说明一下的是如果你在Service的onCreate或者onStart做一些很耗时间的事情,最好在Service里启动一个线程来完成,因为Service是跑在主线程中,会影响到你的UI操作或者阻塞主线程中的其他事情。什么时候需要Service呢?比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等。 二 如何使用Service 1.第一种是通过调用Context.startService()启动,调用Context.stopService()结束,startService()可以传递参数给Service。 2.第二种方式是通过调用Context.bindService()启动,调用Context.unbindservice()结束,还可以通过ServiceConnection访问Service。 二者可以混合使用,比如说我可以先startService再bindservice。 三 service生命周期 startService后,即使调用startService的进程结束了,Service仍然还存在,直到有进程调用stopService,或者Service自己自杀(stopSelf())。bindService后,Service就和调用bindService的进程同生共死了,也就是说当调用bindService的进程死了,那么它bind的Service也要跟着被结束,当然期间也可以调用unbindservice让Service结束。 两种方式混合使用时,比如说你startService了,我bindService了,那么只有你stopService了而且也unbindservice了,这个Service才会被结束。 Android系统将会尝试保留那些启动了的或者是绑定了服务的进程。如果该服务正在进程的onCreate(), onStart(),或者onDestroy()这些方法中执行时,那么主进程将会成为一个前台进程,以确保此代码不会被停止。如果服务已经开始,那么它的主进程会就重要性而言低于所有可见的进程但高于不可见的进程,由于只有少数几个进程是用户可见的,所以只要不是内存特别低,该服务不会停止.。如果有多个客户端绑定了服务,只要客户端中的一个对于用户是可见的,即认为该服务可见。 如果Service还没有运行,则android先调用onCreate()然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次。 stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。该Service的调用者再启动起来后可以通过stopService关闭Service。 所以调用startService的生命周期为:onCreate --> onStart(可多次调用) --> onDestroy 使用context.bindService()启动Service会经历: context.bindService()->onCreate()->onBind()->Service running onUnbind() -> onDestroy() ->Service stop onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind->onDestroy相应退出。 所以调用bindService的生命周期为:onCreate --> onBind(只一次,不可多次绑定) --> onUnbind --> onDestory。 所以,在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。 本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2010/06/14/1758336.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Python 学习笔记 - Memcached

Memcached是一个分布式内存对象缓存系统,他把数据缓存在内存里面来减少对数据库的访问,从而提高动态网页的访问速度。他的基本结构是key/value(键值对)。下面看看在Python里面如何使用。 首先来安装一下服务器端,豆子直接在一个CentOS7的机器上安装 [root@sydnagios~]#yuminstallmemcachedLoadedplugins:fastestmirror,langpacksRepodataisover2weeksold.Installyum-cron?Orrun:yummakecachefastbase|3.6kB00:00epel/x86_64/metalink|2.0kB00:00epel|4.3kB00:00extras|3.4kB00:00updates|3.4kB00:00(1/5):epel/x86_64/group_gz|170kB00:00(2/5):epel/x86_64/updateinfo|671kB00:00 然后服务器端跑起来,这个里面我指定的端口是12000,因此如果有防火墙别忘记打开对应端口 [root@sydnagios~]#memcached-d-m10-uroot-l10.2.1.107-p12000-c256-P/tmp/memcached.pid 参数说明: - d 是启动一个守护进程 - m 是分配给Memcache使用的内存数量,单位是MB - u 是运行Memcache的用户 - l 是监听的服务器IP地址 - p 是设置Memcache监听的端口,最好是 1024 以上的端口 - c 选项是最大运行的并发连接数,默认是 1024 ,按照你服务器的负载量来设定 - P 是设置保存Memcache的pid文件 打开防火墙端口 firewall-cmd--add-port=12000/tcp--permanent 接下来安装Python的客户端模块 从这里下载https://pypi.python.org/pypi/python-memcached 解压拷贝到sys.path对应的目录,就能直接用了 看看第一个例子,可以通过set来设置数据,get来获取数据。里面debug是为了显示错误的 生产环境里面不要用 #!/usr/bin/envpython#-*-coding:utf-8-*-#AuthorYuanLiimportmemcachemc=memcache.Client(['10.2.1.107:12000'],debug=True)mc.set("foo","bar")mc.add("name","John")print(mc.get('foo'))print(mc.get('name'))-----------barJohn memcached的第二个特点是他默认支持集群,原理是内存里面创建一个主机的列表;每个主机有一个权重,权重的数目和主机在列表里面出现的数目成正比。通过算法可以决定把键值对放在哪个服务器的内存里面。 例2 mc=memcache.Client([('1.1.1.1:12000',1),('1.1.1.2:12000',2),('1.1.1.3:12000',1)],debug=True)mc.set('k1','v1') 除了get和set以外,他还具有以下常用函数 add添加一条键值对,如果已经存在的 key,重复执行add操作异常 replacereplace 修改某个key的值,如果key不存在,则异常 set 和 set_multi set 设置一个键值对,如果key不存在,则创建,如果key存在,则修改set_multi 设置多个键值对,如果key不存在,则创建,如果key存在,则修改 delete 和 delete_multi delete 在Memcached中删除指定的一个键值对delete_multi 在Memcached中删除指定的多个键值对 append 和 prepend append 修改指定key的值,在该值 后面 追加内容prepend 修改指定key的值,在该值 前面 插入内容 decr 和 incr incr 自增,将Memcached中的某一个值增加 N ( N默认为1 )decr 自减,将Memcached中的某一个值减少 N ( N默认为1 ) gets 和cas 这个组合可以避免脏数据的产生,如果在gets数据,和cas数据回去这个过程中有其他用户执行了get,那么则不允许修改

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册