这 11 款 Chrome 扩展,让网页看起来更舒服 - 少数派

mikel阅读(1265)

来源: 这 11 款 Chrome 扩展,让网页看起来更舒服 – 少数派

Chrome 已经成为越来越多人的默认浏览器。其丰富多样的扩展程序可以大幅度提高网页浏览体验。这篇文章,为你推荐几款让网页浏览更加舒适的扩展程序。

为什么你们就不能加个空格呢?

这款扩展专门治疗由于汉字与英文之间没有空格导致的腰酸,背痛以及神情恍惚。其内置的空格之神,可以为一切中文字和半形的英文、数字、符号之间插入空白。

相关文章:为什么你们就是不能加个空格呢?

下载:为什么你们就不能加个空格呢?(Chrome 网上应用店)

维基百科视觉现代化:Wikiwand

多年来,维基百科网页的视觉风格坚定不移地停留在 Web2.0 时代。Wikiwand 可以让你看到一个属于这个时代的维基百科。

除了视觉上的提升,Wikiwand 也添加了一些人性化的交互:比如超链接悬浮窗,类似 Kindle 的书签功能,搜索联想,黑色模式等等…

相关文章:轻、快、美,浏览维基百科的魔杖:Wikiwand

下载:Wikiwand(Chrome 网上应用店)

微博界面改造:眼不见心不烦

或许你也像我一样,面对微博右侧的「主播红人榜」全是陌生面孔,怀疑自己一定是老了。为了麻痹自己,我开始使用「眼不见心不烦」。这款扩展不仅可以屏蔽主播红人榜,亚洲新歌榜,会员专区等一切右边栏;还可以无限制地屏蔽关键词、用户、来源…

下载:眼不见心不烦(Chrome 网上应用店)

Safari 的阅读体验:阅读模式

「阅读模式」这款扩展可以为 Chrome 带来了类似 Safari 的阅读体验。点击图标即可进入,再次点击退出,完全的无痛体验。有一种 Chrome 原生阅读模式的错觉。

下载:阅读模式(Chrome 网上应用店)

悬浮大图:Imagus

嫌弃「查看大图」永远不够大?有了 Imagus 这款扩展程序,只要鼠标在图片上悬浮三秒,图片就会以原始尺寸显示出来。

下载:Imagus(Chrome 网上应用店)

关灯看视频

视频页面关灯是一个老生常谈的问题了,许多网站并没有支持这个功能,如果你有这个需要,这款「关灯看视频」可以提供比较广泛的支持。亲测兼容优酷,Youtube,腾讯视频以及 Freestyle。

下载:关灯看视频

Darkness

连 iOS11 都开始以「智能反转颜色」变相支持夜间模式了,众网页支持夜间模式还只是个美好愿景。

Darkness 可以为 Google,Facebook,YouTube,Reddit 等不存在的网站提供完美的夜间模式支持,不会有图片反转,文字颜色奇怪等尴尬问题。当然了,Darkness适配的网站还很少,如果你需要广泛适用的,可能需要下面这款神级扩展。

下载:Darkness(Chrome 网上应用店)

Stylish

许多网页的视觉风格是用 CSS 文件进行管理的,替换网页本身的 CSS 可以达到美化的目的了。通过安装 CSS,可以把知乎「拍扁」,让微博网页版变得简洁无比,让 Feedly 用上 Material Design 等等等…… Stylish 作为一个 CSS 管理器,可以让替换 CSS 变得简单。

至于前文提到的「暴力夜间模式」以及更多好用的 CSS,可以阅读这篇文章详细了解:不喜欢某个网站的样子?用 Stylish 给它一键「换肤」

下载:Stylish(Chrome 网上应用店)

油猴脚本:Tampermonkey

在介绍这款扩展之前,我们来了解一下「用户脚本」的用处:用户脚本可以通过修改网页为特定网站增加功能,美化等等。Tampermonkey 类似 Stylish,是一个用户脚本管理器,由于用户脚本比 CSS 更为神通广大,其应用面比 Stylish 更广。有了这个管理器,就可以轻松的安装和管理脚本了。先安装 Tampermonkey,再去寻找和安装脚本即可。(此时你的 Chrome 会有一种扩展里套扩展的感觉)

关联阅读:用 Chrome 的人都需要知道的「神器」扩展:「油猴」使用详解

下载:Tampermonkey(Chrome 网上应用店)

这里为大家推荐两个用户脚本分享网站,相当于脚本商店:

OpenUserJS

Greasyfork.org

除了以上两个网站,GitHub 上也可以找到用户脚本。为了展示用户脚本的能力,这里推荐几个:

Yet Another Weibo Filter

可以实现前文中「眼不见心不烦」的功效,几乎无异。

下载:Yet Another Weibo Filter(Greasy Fork)

视频站启用 HTML5 播放器

用 HTML5 播放器替代优酷土豆、腾讯、新浪、微博、搜狐、乐视等视频网站的 Flash 播放器,免受 MacBook 风扇声音洗礼。

下载:视频站启用 HTML5 播放器(Greasy Fork)

跳过网站等待、验证码及登录

移除登录,下载,验证码等无法跳过的倒计时。

下载:跳过网站等待、验证码及登录(Greasy Fork)

克制

对于扩展与脚本的使用,这里有句忠告:在接下来的探索过程中,你可能会发现油猴脚本更加强大额功能,但冲突与混沌一定不是你想要的效果,在添加和使用的过程中,建议谨慎添加,勤于管理。

WIN7 下SQL Server 2008 提示“无法进行远程调试问题”的个人解决方法_一跃一_新浪博客

mikel阅读(1238)

WIN7 下SQL Server 2008 提示“无法进行远程调试问题”的个人解决方法_一跃一_新浪博客,一跃一,

来源: WIN7 下SQL Server 2008 提示“无法进行远程调试问题”的个人解决方法_一跃一_新浪博客

一、在“控制面板”中,单击“系统和安全”。

二、单击“Windows 防火墙”。

三、为 TCP 135 添加例外,这是 DCOM 用来与远程计算机通信的端口:

  1. 在“Windows 防火墙”控制面板中,单击“高级设置”。
  2. 如果“用户帐户控制”对话框出现,请单击“是”继续。
  3. “高级安全 Windows 防火墙”窗口将打开。
  4. 单击“入站规则”。
  5. 在“操作”窗格中,单击“新建规则”。
  6. 此时将显示“新建入站规则向导”。
  7. 在“要创建的规则类型”下选择“端口”,然后单击“下一步”。
  8. 选择“TCP”和“特定本地端口”,然后在“特定本地端口”框中输入“135”。
  9. 单击“下一步”。
  10. 在“操作”页上选择“允许连接”,然后单击“下一步”。
  11. 在“配置文件”页上,选择要在其中应用规则的配置文件。 通常,您需要选择“域”,并且可能选择“专用”,但不会选择“公用”。
  12. 单击“下一步”。
  13. 在“名称”页上的名称框中键入一个有意义的名称,取名叫“SQL 135”规则。。
  14. 单击“完成”。

四、如果您的域策略要求通过 IPSec 进行网络通信,则执行此步骤。 否则,请转到步骤 5:

  1. 单击“新建规则”。

    此时将显示“新建入站规则向导”。

  2. 在“要创建的规则类型”下选择“端口”,然后单击“下一步”。
  3. 选择“UDP”和“特定本地端口”,然后在“特定本地端口”框中输入“4500”和“500”。
  4. 单击“下一步”。
  5. 在“操作”页上选择“允许连接”,然后单击“下一步”。
  6. 在“配置文件”页上,选择您在步骤 3 中选择的相同的配置文件。
  7. 单击“下一步”。
  8. 在“名称”页上的名称框中键入一个名称,取名叫“sql 4500,500”规则。
  9. 单击“完成”。
  10. 将关闭“高级安全 Windows 防火墙”窗口。

五、再将“SQL Server Management Studio”程序图标对应的“Ssms.exe”文件也添加进入站规则里就可以了。

WIN7 <wbr>下SQL <wbr>Server <wbr>2008 <wbr>提示“无法进行远程调试问题”的个人解决方法

最新iOS发布App Store详细图文教程 - CocoaChina_让移动开发更简单

mikel阅读(1195)

CocoaChina前身是全球成立最早规模最大的苹果开发中文站,现致力为所有移动开发者提供资讯服务、问答服务、代码下载、工具库及人才招聘服务

来源: 最新iOS发布App Store详细图文教程 – CocoaChina_让移动开发更简单

c58adf586a0a12cc0de55c8b255f5342.png

网上有很多关于iOS发布上架的教程,但大多比较旧而且不完整、不够清晰。所以整理了一个详细完整的iOS APP发布上架App Store的图文教程。分享给小白到大神路上前进的你我。

上架iOS需要一个苹果开发者账号,还没有的话申请一个。

上架过程分七个步骤,按步骤一步步来。照着教程做简单、快速就能完成iOS APP的上传。

  • 1、创建APP身份证(App IDs)
  • 2、申请iOS发布证书
  • 3、申请iOS发布描述文件
  • 4、导入iOS证书到xocde打包IPA
  • 5、在iTunes Connect创建App
  • 6、上传IPA到App Store
  • 7、上传好IPA回到iTunes Connect填写APP信息并提交审核

一、创建唯一标示符App IDs

APP IDs在后面创建发布文件,创建APP时都要用到。

如果之前iOS调试时创建过了,就不用重新创建了,还是用那个appid。

首先打开开发者中心https://developer.apple.com/cn/,进入证书页面。

1.1点击证书、ID及配件文件,进入设置。

1.1.png

 

1.2选择App IDs –>点击+创建一个新的App ID

 

1.2.png

其中有两项需要你自己填:

  • 第一项Name,用来描述你的App ID,这个随便填,没有什么限制,最好是项目名称,这样方便自己辨识(不允许中文)
  • 第二项Bundle ID (App ID Suffix),这是你App ID的后缀,需要仔细填写。用来标示我们的 app,使它有一个固定的身份,和你的程序直接相关。填写  Explicit App ID 的格式为:com.company.appName,照着格式写,写个方便记的,后面很多地方要用到。
  • 第三项App Services,默认会选择2项,不能修改,其它如APP需要推送通知就勾选下推送通知的服务,没有其他要求选择默认的,然后点击Continue确认,下一步。

1.3.png

检查下没有错的话直接点击Register后点击Done完成App ID的创建。

1.4.png

二、申请发布证书

这里使用Appuploader工具,直接申请导出p12证书文件和.mobileprovision描述文件

2.1打开Appuploader,输入苹果开发者中心账号,登录。

2.1.png

2.2选择Certification

2.2.png

2.3点击+ADD,这里有开发证书等等创建选项,这里选第三项发布证书。

如果你之前有了发布证书也可以不用创建,用之前的也行,苹果规定个人只能创建3个发布证书。

2.3.png

2.4输入,证书名称(随意) 邮箱(任何邮箱都行) 密码(后面打包编译时用到)然后点击ok

2.4.png

2.5此时生成了好了一个发布证书,点击p12 File,下载证书文件,保存到电脑。

2.5.png

这样就得到了一个p12的iOS发布证书文件

三、申请发布描述文件

3.1回到软件点击Profiles

3.1.png

3.2点击+ADD,这里有开发描述文件等等选项,这里选发布描述文件。

3.2.png

3.3选择APP IDs,之前在开发者中心创建的,这里会自动出现。

3.3.png

3.4勾选刚创建的发布证书关联好,输入name,点击ok

注意:如果你之前创建了多个发布证书,下面发布证书框显示多个发布证书,

可以全选,默认最新创建的发布证书,打包时输入最新创建的发布证书密码。

ps:发布证书不同的app可以通用的,描述文件不同就行了。

3.4.png

3.5此时生成了发布描述文件,点击 Download下载到电脑保存

3.5.png

四、Xcode上传证书编译打包

1、导入iOS证书p12到钥匙串

1.1打开钥匙串助手,双击p12文件,默认钥匙串是(登录),注意这里一定要选择(系统)

这样后面打包时iOS证书才不会报错,输入创建iOS证书设置的密码,导入进去。

1.png

1.2.png

1.2导入后提示此证书是由未知颁发机构签名的,因为不是用本机的钥匙串文件申请的iOS证书

不过没关系,设置一下信任就好了

2.png

1.3双击证书、点击信任,使用此证书时,设置为始终信任。

3.png

3.1.png

2、xcode配置iOS证书和打包环境

2.1用xocde打开你的项目,点击进入设置证书界面。

有两个地方都要设置

选择Code Signing下面的release(发布版)Debugs是测试版,上架App Store选择发布版的。

然后选择你刚上传的对应iOS发布证书

4.1.png4.png

2.2回到基本信息设置界面,Bundie 这项填写,最先创建的那个appid,跟创建iOS描述文件时选择的要一样。

现在下面还有个错误提示,因为还没有导入iOS描述文件。

5.png

2.3双击.mobileprovision描述文件,闪一下就自动导入到xcode,不报错表示可以了。

6.png

2.4选择xcode菜单栏如果图所示

7.png

2.5把Archived修改为Release

8.png

2.6点击选择设备,选择为打包设备。

9.png

3、项目打包IPA包导出

3.1选择菜单栏如图所示,如果Archive还是灰色的,说明之前的配置没有生效,退出重新打开下。

点击Archive,开始打包。

10.png

3.2打包进度条走完后,会弹出以下界面,点击Expcrt

11.png

3.3这里是个人开发账户发布到App Store,所以选择第一个,点击Next。

12.png

3.4选择你的开发者账号,还没登录会提示你登录,点击Choose,会检查你的证书是否正确。

13.png

3.5iOS证书检测通过就到了这一步、点击Export,就会导出 一个文件夹,里面就是IPA文件,大功告成了。

14.png

14.1.png

这个IPA包就可以上传到App Store了。

五、在iTunes Connect创建App

5.1进入iTunes Connect进入创建APP,选择我的APP点击左上角+号选择新建APP,输入你的应用名称,语言,套装ID,之前在开发者中心创建的对应APP IDs(与刚才创建iOS发布描述文件时所选的appid要一致,这样用iOS证书打包的IPA,上传就能对应识别到)sku不能写中文,点击创建。

5.2.png

5.3这里提示要用到Xcode或者Application loader提交IPA,等下可以用Appuploader直接上传ipa,更快。

现在APP各项信息都没填写,等下把IPA上传成功了再填写。

这里构建版本旁边还没有出现+号,后面上传了IPA就会出现,等下会用到。

5.3.png

六、Windows环境下上传IPA到App Store

6.1打开Appuploader程序,点击Upload.

6.1.png

6.2选择刚生成的iap包、Appuploader将自动上传你的IPA,当出现以下提示时,说明上传成功,点击deail可以查看APP信息。

6.3.png

七、回到iTunes Connect提交审核

7.1上传好了IPA,然后回到iTunes Connect,进入填写信息的页面,下边有一个构建版本的选项,之前这旁边没有+号的,如果上传成功了,过几分钟旁边会出现一个加号按钮,点击一下+然后会出现你刚上传的APP,有上传多个版本会出现多个,点选、点击完成即可。

注意:如果一段时间后没有出现+号,可能ipa不符合要求,会有个反馈邮件过来,根据反馈的问题修改后重新上传。

7.1.png

添加了构建版本,如果要修改添加,打包时增加下版本号,如果跟之前的相同那上传不了。

点击删除又会出现+号,可选择其他上传的版本去提交审核。

7.02.png

7.03.png

7.2然后设置好APP相关的信息、类别,价格、销售服务等。

7.20.png

7.21.png

截图的话、如果你的应用只支持 iPhone,你只需提供 5.5 英寸的显示屏截图

像素-纵向:1242 x 2208,横向:2208 x 1242

72 dpi、RGB、平展、不透明
高品质 JPEG 或 PNG 图像文件格式)即可。

其他尺寸的勾选引用5.5寸的就行,最多上传5张。

如果你的应用支持iPad,一套 12.9 英寸的屏幕截图就可以满足要求。

APP图标的规格则为1024*1024

7.3设置好相应的APP信息后,点击提交以供审核。

7.3.png

7.4提交审核回到我的APP查看会提示正在等待审核,审核有时很快一两天,或要几天时间,常登陆看看审核情况,或看邮件提示。

如果变成可供销售,恭喜你~上架成功了,如果显示被拒绝,点击查看问题,根据反馈修改再重新上传。

7.4.png

angularjs弹出框方法二 - sinat_36146776的博客 - CSDN博客

mikel阅读(1054)

来源: angularjs弹出框方法二 – sinat_36146776的博客 – CSDN博客


使用时,首先引入这三个必要的文件


注意,在主模块依赖注入
var routerApp=angular.module('routerApp',['ui.router','ngAnimate','tm.pagination','ui.bootstrap']);
routerApp.controller('takeGoodsSearch',['$scope','$http','$modal','$anchorScroll','$log','$location','$rootScope',function($scope,$http,$modal,$anchorScroll,$log,$location,$rootScope) {
$scope.cancelApply=function(index){
$scope.result={};
$scope.result.title = "提示消息";
$scope.result.msg = "确定要删除?";
$rootScope.loanId=index;
$modal.open({
templateUrl : 'tpls/common/reconfirmMessage.html',
controller :ModalInstanceCtrl,
resolve : {
requestResults : function() {
return $scope.result;
}
}
});
}
var ModalInstanceCtrl = function($scope, $modalInstance,requestResults) {
$scope.results = requestResults;
// 确认按钮(close()可以带参数)
$scope.ok = function() {
$modalInstance.close();
$http.post('/deletePickup',$rootScope.loanId).success(function(){
reSearch();
});
};
// 取消按钮
$scope.cancel = function() {
$modalInstance.dismiss('cancel');
};
};
//弹窗结束
}])

reconfirmMessage.html:

 

angularjs弹出框方法一 - sinat_36146776的博客 - CSDN博客

mikel阅读(1264)

触发事件:取消申请 × 模态框(Modal)标题 –> 确定 关闭

来源: angularjs弹出框方法一 – sinat_36146776的博客 – CSDN博客

触发事件:用id控制

  1. <button class=“btn-cancel” data-toggle=“modal” data-target=“#myModal”>取消申请</button>
  1. <!– 模态框(Modal) –>
  2. <div class=“modal fade” id=“myModal” tabindex=“-1” role=“dialog” aria-labelledby=“myModalLabel” aria-hidden=“true”>
  3.     <div class=“modal-dialog”>
  4.         <div class=“modal-content”>
  5.             <div class=“modal-header”>
  6.                 <!– 关闭按钮 –>
  7.                 <button type=“button” class=“close” data-dismiss=“modal” aria-hidden=“true”>
  8.                     ×
  9.                 </button>
  10.                 <!– 标题 –>
  11.                 <h3 class=“modal-title” data-ng-bind=‘results.title’></h3>
  12.                 <!– <h4 class=“modal-title” id=“myModalLabel”>
  13.                     模态框(Modal)标题
  14.                 </h4> —>
  15.             </div>
  16.             <div class=“modal-body”>
  17.                 <b data-ng-bind=‘results.message’></b>
  18.             </div>
  19.             <div class=“modal-footer”>
  20.                 <button type=“button” class=“btn btn-primary” data-ng-click=“ok()”>确定</button>
  21.                 <button type=“button” class=“btn btn-default” data-dismiss=“modal”>关闭</button>
  22.             </div>
  23.         </div><!– /.modal-content –>
  24.     </div><!– /.modal –>
  25. </div>

angular.js 下如何动态插入删除dom节点 一介布衣

mikel阅读(999)

angular.js ,插入dom,移除dom,angular.js 下如何动态插入删除dom节点,一介布衣

来源: angular.js 下如何动态插入删除dom节点 一介布衣

angular.js 是新一代web开发框架,它轻松在web前端实现了MVC模式,相比 JQuery 模式,这种新玩意竟然不需要开发者直接去操作dom .

作为前端开发而不去操作dom ,这简直是一个玩笑! 没错,确实是这样的.关于 angular.js 的详细说明及事例请在博客搜索 angular.js

既然上面提到 angular.js 下无需用户直接操作dom ,而是在编译间断 dom 与 控制层model 实现了双向绑定,一方做出改变,另一方就会立即改变,那问题来了,我想插入一个文本框和按钮,并且文本框里数据要和控制层一个属性绑定,按钮要实现 ng-click 事件,如何做?

传统实现方法,在父节点里直接新增一段 dom ,html标签的事件也会被自动注册.

angular.js实现方法: 将节点添加到父节点后,我们需要重新编译, 将数组对象 (包含 ng-click 等 angular.js 指令)绑定到当前作用域.绑定以后对应的angular.js 指令才会有效.

前提是:

插入dom节点以后,需要手动调用 $compile 服务(调用前先依赖注入) 才能将 angular.js 指令和模型绑定生效.类似如下代码:

$('div[name=father]').html(
  $compile('<input type="text" ng-model="person.name" /> <input type="input" ng-model="person.age" value="{{person.age}}" /><a ng-show="$index!=0" style="color:red;" ng-click="del($index)">移除</a>'
  )(scope)
);

很明显,没有 $compile 服务,无法将上面插入的dom绑定到当前作用域.但是这种拼串的方式看上去很挫,我们说过 angular.js 是用模型和控制器去实现双向绑定. 这一段不伦不类的 JQuery 代码实在有点鹤立鸡群的感觉.

下面简绍第二种方案.

ng-repeat

这是angular.js 的一个迭代指令,如果你之前接触过 ASP.NET 的话, repeat 控件一定很熟悉吧,他们功能相似,都是从一个集合里,遍历元素然后迭代出来展示在UI上.

你可能有个疑问, 用ng-repeat 迭代出来就能把 angular.js 的事件绑定到当前作用域吗?

是的.

因为 ng-repeat 在实现上就自动执行了 $compile 服务.

这样省事了不少,我们唯一需要关注的是模型.

比如我们用一个数组容器作为迭代数据集 ,比如 var list=[{id:100,age:30,name:”张三”}]

            <div ng-repeat="person in list">
                <input type="text" ng-model="person.name" /> <input type="input" ng-model="person.age" value="{{person.age}}" />
                <a ng-show="$index!=0" style="color:red;" ng-click="del($index)">移除</a>
            </div>
            <a ng-click="add()">增加一个</a>

控制器响应的需要实现 add() 方法 和 del(idx) 方法.

$scope.add=function(){
    var obj={id:101,age:30,name:"李四"};
    $scope.list.push(obj);
}

$scope.del=function(idx){
    $scope.list.splice(idx,1);
}

ok,这样我们就可以动态添加 /删除 dom 节点了.

angular.js删除一条记录后如何让视图自动更新 | Angular中文社区

mikel阅读(892)

Angular是Google开发的前端技术框架。

来源: angular.js删除一条记录后如何让视图自动更新 | Angular中文社区

假设我们有这么一个视图:

记录 操作
记录1 删除
记录2 删除

想实现的效果是:点击 记录1 后面的删除,如果删除成功,视图自动更新为

记录 操作
记录2 删除

视图的html代码如下

<table>
    <tr>
        <th>记录</th>
        <th>操作</th>
    </tr>
    <tr ng-repeat="record in records">
        <td>{ { record.title } }</td>
        <td><a href ng-click="delete(record)">删除</a></td>
    </tr>
</table>

要实现视图自动更新,可以在控制器代码里这样写

$scope.delete = function(record) {
    $scope.records.splice($scope.records.indexOf(record), 1);
};

Android studio 出现 Unsupported major.minor version 52.0 - yxhuang2008的专栏 - CSDN博客

mikel阅读(1543)

来源: Android studio 出现 Unsupported major.minor version 52.0 – yxhuang2008的专栏 – CSDN博客

最近更新了Android studio 之后,出现了Error:Java.lang.UnsupportedClassVersionError:com/android/dx/command/Main : Unsupported major.minor version 52.0 异常,

一、这是因为 compileSdKVersion 和 buildToosVersion 版本对不上导致的,例如我这里compileSdkVersion 是23,而 buildToolsVersion 却是 24.0.0.rc2 。所以,出现 Unsupported major.minor version 52.0 异常

只要将 complileSdkVersion 和 builToolsVersion 的版本修改一致就可以了。

例如,我这里将 buildToolsVersion 修改为 23.0.2 就可以了。

二、如果不是这个问题,可以进 Open Module Settings 看看 Complie Sdk Version 和 Build Tools Version 是否为空

三、如果都不是上面的这个问题,那就把jdk 的版本升级的 1.8

C# Redis Server分布式缓存编程(一) - Master HaKu - 博客园

mikel阅读(1025)

来源: C# Redis Server分布式缓存编程(一) – Master HaKu – 博客园

这篇文章我将介绍如果用最简洁的方式配置Redis Server,

以及如何使用C#和它交互编程

一. 背景介绍

Redis是最快的key-value分布式缓存之一

缺点: 没有本地数据缓冲, 目前还没有完整的数据聚集化支持

优点: 配置简单, 使用方便, 高性能,支持不同的数据类型(hashes, lists, sets, sorted sets)

ASP.NET WebUI for viewing content of the cache

 

二. 安装Redis

1) 从github下载最新的32/64位安装

https://github.com/dmajkic/redis/downloads

解压到你自己的目录

eg: d:\RedisServer

 

2) 从github下载Redis服务程序

dll手工版

https://github.com/kcherenkov/redis-windows-service/downloads

 

安装版

https://github.com/rgl/redis/downloads

 

拷贝到RedisServer的安装目录

eg: d:\RedisServer

 

3) 安装redis服务

进入你的应用程序目录,运行下面的命令

sc create %name% binpath= \”%binpath%\” %configpath%” start= auto” DisplayName= Redis”

 

%name% — name of service instance, ex. redis-instance;

%binpath% — path to this project exe file, ex. C:\Program Files\Redis\RedisService_1.1.exe;

%configpath% — path to redis configuration file, ex. C:\Program Files\Redis\redis.conf;

 

sc create my-redis binpath= \”D:\RedisServer\RedisService_1.1.exe\”  D:\RedisServer\redis.conf” start= auto” DisplayName= MyRedis”

 

 

 

4) 基本配置

redis.conf

# requirepass foobared

去掉注释,重启服务

这样实例化一个Redis服务的时候,就需要密码

RedisClient client = new RedisClient(serverHost, port, redisPassword);

Redis server replication (master – slave配置)

# slaveof <masterip> <masterport>

eg:

slaveof 192.168.1.1 6379

 

三. 客户端编程

1) 安装Redis包

 

2) 简单例子

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ServiceStack.Redis;
using System.Threading;

namespace Zeus.Cache.Redis.Demo
{
    public class SimpleRedisDemo
    {
        public void SimpleDemo()
        {
            string host = "localhost";
            string elementKey = "testKeyRedis";

            using (RedisClient redisClient = new RedisClient(host))
            {
                if (redisClient.Get<string>(elementKey) == null)
                {
                    // adding delay to see the difference
                    Thread.Sleep(2000);
                    // save value in cache
                    redisClient.Set(elementKey, "default value");
                }

                //change the value
                redisClient.Set(elementKey, "fuck you value");

                // get value from the cache by key
                string message = "Item value is: " + redisClient.Get<string>(elementKey);

                Console.WriteLine(message);
            }
        }
    }
}
复制代码

运行结果: