新普金娱乐网址


不去做,你凭什么说自己不会做

《鲁南小城的故事》|40.鲁南结业,总以为遥遥无期

按照C#的MongoDB数据库开发应用(4)–Redis的安装及采纳

  • 一月 20, 2019
  • 数学
  • 没有评论

在眼前介绍了三篇有关MongoDB数据库的支出使用小说,严苛来讲那几个无法归类于MongoDB数据库开发,不过Redis又不无和MongoDB数据库分外仔细的涉及,它们两者很类似,Redis主若是内存中的NoSQL数据库,用来加强性能的;MongoDB数据库则是文本中的NoSQL数据库,做多少连串号存储使用的,它们两者关系密切又有所分歧。本篇首要介绍Redis的安装及使用,为前面Redis和MongoDB数据库的共同利用先铺下基础。

秋天夏天,来十斤麻辣小龙虾(文/远方不远)

从小生活在江南的农村,江南是多水的,水柔软而多情,待在那种位置,人就特意简单被带上水的精通,融合着化不开的中庸。春天里,想象自己用竹篙撑着一拏小舟,在荷塘里逐渐地荡悠,推开一片荷叶,看见一处小渚,渚上落着一座茅草屋,穿着大红肚兜的千金坐在门扉的竹凳上,自顾自地剥着茂密,偶然间抬头看到了客人,赶忙冲屋子里的太婆招呼一声,“曾祖母,来人啊。”那时候,一位老外祖母人,穿着素色蜡染的船服,头上绑着共同头带,便会暂缓地走出来,“哎哎,伢伲,回来了啊,刚才囡囡钓了一大桶虾子,清晨正好留下来一起吃海虾。”

那就是江南的春天,就像每个小孩都会去池塘里钓龙虾,家家户户的灶膛里,也由烟囱弥漫开一股鲜美辣爽的红烧龙虾的香气。在自身的桑梓,但凡是小活物,都要后缀一个“子”,譬如小狗是狗子,龙虾就是虾子了,而孩子们的乳名自然也是小狗子,小虾子等等。即使探讨起大小来,小的话,都叫作一渺渺,“那一点虾子小得开不得眼,唯有一渺渺。”好不简单抓到了大虾子,那就在面前加一个海字,海是一个形容词,因为苏皖交界的水乡人是很少看到海的,没有观望,那就是大得不可以想像,故而他们把广大大物件都要喊作海,家里盛饭的大腕叫作海碗,很大的龙虾就就叫作海虾,清晨烧了龙虾,儿童嘴馋,就会发声,“庚早,我要吃一海碗海虾。”

本身的孩提生存,自然也是那般过来的。门前桑树上的知了一叫,我们就了解夏日来了,春天对此孩子们来讲就好像天堂,打着赤膊,光着脚丫,落魄不羁地得以在各处里撒泼,整整浪荡三个月。祖父天天吃中饭,二两酒下肚后,都要午寐一会,那时候村里的小伙伴就会躲在我家的窗檐沿下学了两声狗叫,我等到祖父一翻身,呼噜声乍起,就会悄悄地溜出家门。出门后就干两件工作,捞知了仍旧钓龙虾。其实祖父那是假睡,因为自身每趟晚上进家门,东西还没提进门槛,他的声音就飘了出来,“你介个小鬼,后天钓了略微虾子啊。”祖父是贪吃的,秋天里,小龙虾和苦味酒总是很配。

钓龙虾对于我们的孩提来讲,是一项保留节目,就如每年的夏日,我家那台熊猫牌黑白电视机总是各处地播报《西游记》,那部经典三番三遍剧里头也是有虾子的,不过那是龙宫里的新兵,即使身为虾兵蟹将,按理讲也该算是神明,或许虾被喊作龙虾龙虾的,就是从《西游记》里流出来的,无非是身在龙宫,又长了两根类似龙须的胡须。

我们提着一个塑料桶,从二姨裹好的用来针定被子的线球上,直接咬下一段来,找根牙签团上塞在裤兜里,然后在居家的景况里拔一根扶苗的竹竿,那事需要偷的,每一回被浇菜的中老年看见都要把我们追出去老远老远,追不到还要在后边大骂,“生头家小鬼,你跑,早晨去你家上门。”不过把她田里的竹竿都拔光了,也没见老头去我家上门,水乡的老汉都是勒迫恐吓人的,因为他俩小时候也是那般过来的。大家不管找一处池塘或者河汊,而且要有一棵大树能够庇荫,那种地点在江南水乡遍地可见,把家伙事一撂,多少人便要去稻田里抓饵料,饵料是小田蛙,龙虾最爱吃的事物。

那儿的包谷已经割了,很多田蛙都跳来跳去,抓到了就要剥皮,那事我干过无数,近年来想来也是造孽。不仅剥青蛙皮,也得以剥水蛇皮,不过蛇比青蛙少点,它地处食品链下面,竟然到头来被食品链下边的动物给吃了,可谓是一件悲催的事情,不过精用,一个青蛙顶多钓半天,而一条蛇大家可以用来钓两三日。其实最残暴的工作是,大家反复是先钓了一只龙虾后,会把龙虾壳给剥了,用龙虾钓龙虾,那是才是很灭绝虾性的,同类相残啊。家里人也不让大家这么干,因为蛇在乡间被喻为家神,造房子际遇了,会对它烧香请它离开,而青蛙在农人眼里更是益虫,可以吃虫的。不过不抓它们又怎么能钓龙虾呢,我后来就偷偷割一点肥猪肉,肥猪肉会浮在水面上沉不下去,我便找块石头系着,水面上冒一层油花,能引起来广大龙虾。即使按那种逻辑来讲,猪也是生命啊,而且自己偷割了猪肉,总会被祖母骂,害他少熬了二两猪油。

一个早上都在钓龙虾,时间总是过得很快,水面上飘落了几片叶子,泛起了几多水花,龙虾就上当了,龙虾很笨也很贪心,它的大耳怀调一夹到饵料,就不愿甩手了,其实也不叫手,拿东西叫作螯。鱼吞了鱼钩,那是想吐没有主意吐,不过龙虾就是那么执着而不甘放任,那大家就唯有把它扔进水桶了。大家多少个小伙伴出门钓龙虾都是光着膀子的,闲着粗俗的农人也来凑热闹,然则他们戴着凉帽,穿着长袖,每一次大家都笑他们就是热,因为狗子都早就趴在地上吐舌头。然后一到早上下班,就轮到他们骂大家太嫩了。大家的臂膀一回家就疼痛地燎疼,齐刷刷蜕皮,而且再也穿不上衣裳了,因为布料咯着晒伤的手臂也会疼痛生疼的,那种疼会持续一个春天,直到7月份开学后,还会缓上一个月。

出门的时候,一个塑料桶里四壁萧条,等到收杆的时候,水桶里就满满当当了,然而钓龙虾也是要看运气的,有的人钓得多,有的人钓得少,大家多少个小伙伴当年都是望着老版得《三国演义》长大的,尤其仗义。因为有一年春天,桃园里的桃花盛开,大家偷来祖父的米酒,一人割破手指滴上几滴血,大喊一句“不是同年同月生,但愿同年同月死。”然后端起掺血的酒,轮流着一人喝一口。其实自己也没喝,因为滴血的时候,我骨子里不晓得怎么像电视一样的人咬破手指,正好手指上长的麻风病在流血,就挤了几滴出来。麻疹在我们本乡叫作老鼠外祖母,据说是被老鼠在手上撒了尿长出来的一种乳状疙瘩。滴了那种血的酒喝了,那不是满嘴的酒渣鼻啊,不过自己装作喝了一口,他们倒是全喝了,也没见嘴上长阴囊阴囊湿疹,可知是耳食之言,不过那件事倒是被我背着了十多年,现在估计,如同良心上还有些不安,还好他们看不到。

既然都是拜把子的小兄弟,一条内裤大家一块穿,一起钓的龙虾肯定要大家一起分,我们把每个人桶里的龙虾全归置在一个桶里,让数学好的人超越生,那时候也不会除法,就一人一只地分,分完截止,多出来的那四只自然是归我了,因为我在里头是分外,老大带着大家打天下,肯定有些功劳,那就多给两只,我当了这么长年累月不胜,那种便宜没有少捞。《三国演义》里的至极是刘备,他是个白脸,可是大家一伙人里,钓龙虾钓上一个夏季后,大约全成了关公和张益德。整个童年下来,那就是彻底镀色了,所以自己后来以后再也并未白过,但是女对象白就好了,这叫黑白配。

骨子里,钓龙虾依旧一个很艰难的差事,小孩子才玩,大人要捕虾都间接去下地笼了,那是一种渔具,在江南水乡很盛行,大致家家户户都有,三五米长,用青色的尼龙绳一根根地编织起来,一截截的,可以减弱,就像龙脊一样,每一截上都开了一个狭口洞,从外到内渐缩,里面放些诱饵,那样龙虾进去之后就出不来了。下地笼一般都是晌午趁着天黑下,也就是抛洒在水里,很长很长一条,把系口的躯体绑在岸上的水草上,等到天明了,去收地笼,可谓是大丰收,里头什么事物都有,除了龙虾外,还有小鱼,螃蟹,黄鳝,甚至还有蚂蝗和蛇,所以清理地笼的时候要小心点。

子女们把龙虾提在桶里带回家了,之后的事情就不归大家管了,操持厨房是姨妈娘子干的事体,就是中年妇女的情致,不过本人就欣赏在一侧望着友好的劳动成果变成餐桌上的充裕美食,所以从小到大也被人喊了这几个外号,挺冤枉的。在江南的小村,一到冬天,你就会意识家家户户门口都会放一只青色的塑料盆,盆里爬着大小不等的龙虾,它们从那头爬到这头,好不不难爬到盆檐处,又会滑落下来,弄不佳还有同伙把它们给夹下来,所以我平昔以为这种威风凛凛的虾将军很喜欢窝里斗,不团结,活该被人吃,不过它们其实是太好吃了,令人欲罢不可能。

姑姑娘子们端一张竹椅坐在红盆边,北方人欣赏坐马扎,江南人欣赏坐竹椅,因为江南的紫竹相比多,江南人手巧可以把竹子编成各个零件,不仅椅子是竹椅编的,就连放拾掇好的龙虾也是竹篮。妇女们谙习地操起黑铁剪刀,剪刀上还有一行刻字,那时候张小泉很盛名。她们避开虾螯,拿起龙虾,先把虾头得须和两侧的壳给剪了,因为那边是龙虾的鳃,用来过滤脏东西自然藏污纳垢,鳃壳一剪,暴露藏紫色的软液体物质就是虾黄了,跟蟹黄类似。剪完鳃壳,把龙虾倒过来,拗住龙虾的尾巴,抽出一根很长很长的沙线,紫色的,那根东西又叫作屎肠,顾名思义,就不要求自己过多言说了,毕竟我们还要吃龙虾呢。剪鳃拔线后的龙虾全体放进了竹篮,那就已经办好了装有的预备干活,清洗龙虾应该在剪龙虾以前,不然虾黄会被水给冲掉,很损鲜味,讲究的每户会用一把竹刷来刷虾腹和虾脚,龙虾被洗刷得个个龙行虎步,举着大耳曲剧嗷嗷叫,万万没有想到帮它们洗完澡就会扒它们的皮。

红烧龙虾那门手艺,但凡是江南乡村的巾帼肯定都要领悟的,就像他们都会织地笼一样。我此人从小到大,好吃懒做,吃必然会吃的,而且嘴很挑,能披露几分酸甜苦辣来,可是做的话,也会,不过是瞧着人家做,自然也了解外人是咋办的,即便本人自己不会做。咱们处于苏皖分界,是广东的最北边,所以所受淮扬菜的震慑很小,而偏向于徽菜。西湖流域的人爱吃糖食,尤其是苏锡常,这几乎是无糖不欢啊。“京口瓜洲一水间,钟山只隔数重山。”等到渡过了瓜洲,口味就不相同了,人们开头吃辣,大家就属于这一代吃辣的,故而吃龙虾的话,都是麻辣小龙虾,食材遍地都是,烹调起来也简单上手。

自己姑姑做麻辣小龙虾就很在行,淘箕里备好了拾掇好的龙虾,抽出案板,用菜刀把小葱切根,生姜切块,大蒜切丁,干花椒和花椒放在调碗里备用。油热后,把配料全然放进锅里,这么些手续叫作炒香,待炒到空气里都弥漫出香味,就足以将淘箕里的龙虾放入锅中,武火干煎,大炒特炒,那就须求考验妇女们的腕力了。参加清水而不至于淹没龙虾,大火烧开,既而转文火慢炖,半钟功夫,适才炒香就全盘渗入龙虾了,此间还有参预茴香,大料和各个辣酱,入味入辣,芳香四溢。末了是用大火收汁,把汤汁熬到适合分量,让香料全部渗入食材,而且有留些许汤汁。出锅,盛放进白瓷盆里,把剩余的汤汁往龙虾上一浇,放上一根小葱,一道色香气俱全的辣味小龙虾就完事了。

江南的小村做的依然相比较传统的,在淮扬菜系里面,他们不爱吃辣椒,可是偏偏爱吃小龙虾,便烹调出一款十三香龙虾,无非是参预十两种香料,就是十二种中草药碾磨成粉,传统而言有紫蔻、砂仁、肉蔻、铁观音、丁香、花椒、大料、小茴香、木香、白芷、三奈、良姜、干姜等,各有各的妙处,茴香气味浓烈,白芷去膻气,铁观音可使肉香浓郁而不腻,陈皮和木香又可以汆汤。十三香也有诸多配料,不单单一种,一般还有草果、良姜、山奈、白芷、小茴香、丁香、香叶、八角、砂仁、排香、桂皮、孜然、白蔻等。十三香是福建人发明的,十三香龙虾却是盱眙的,那些地名很有声望,但凡说起小龙虾,肯定要讲盱眙龙虾,那如同说起螃蟹,肯定要讲阳澄湖河蟹和固城湖河蟹一样。

在自身现在待的维尔纽斯城,一到冬天,全城满带尽是小龙虾,马那瓜有一句很出名的口头语,你去吃混沌,摊子老总先是句话肯定是,“啊要辣油啊。”可知阿塞拜疆巴库人是珍视吃辣的,然则口味也挺广的,卖的最火的当属十三香龙虾,麻辣龙虾和蒜泥龙虾。街头的龙虾店也多要加盱眙八个字,貌似离了盱眙就不是龙虾了,一个个都说自己是最正宗的盱眙龙虾,然后一开口又是了不起的马斯喀特腔调,甚至是川音,反正天底下的酒馆就属川菜馆最多。小龙虾和洋酒是卢布尔雅那冬季的最爱,因为小龙虾吃起来没数,随便吃,不像螃蟹一样,那么贵一只,都舍不得吃。吃小龙虾的时候,大家都一贯下毛手,也不带手套,直接开剥,先把尾巴给吃了,然后深吸一口头里的虾黄,很两人只吃虾尾巴而把头给拧了投掷,说是里面脏,怪可惜的,我倒是觉得那里是最鲜的。

自家只吃辛辣小龙虾,那是苏皖交接地区的江南气味,小龙虾鲜辣得令人忍不住吸吮手指头,有些人居然吃得过度投入,把手指也给咬掉了。不一会,桌上就堆积得像座小山包,又辣又爽,叫人欲罢无法。辣了咋办,当然是喝干红了,常州市场的白酒自然是冰雪最多,尽管自己嫌它味淡,可是冰镇朗姆酒一灌,立马能把口腹里那一点辣味全然浇灭,舌蕾清爽,马上满血复活,“总主任,再来五斤麻辣小龙虾,多放辣。”你看吗,那就是青岛的冬天,一个全被龙虾和利口酒占领的都会季节,波尔图人全体在葡萄酒池子里游泳抓龙虾。

作为一个饕客,天黄海北的虾子吃得实际够多了,到了海边要吃澳龙,两斤一个,也从未多少肉,吃得不舒服,对虾也是公里的,水煮清蒸,不过那玩意雌雄同体。相相比英里的虾,我倒是青眼于湖鲜,江南的湖水池塘里推出青虾,双螯细长,从齐白石的画里爬了出去,我姑姑一贯做给我吃,只需水煮方几块姜,蘸醋,我一顿能吃一斤,然后身上过敏,手脚奇痒。平日的小虾,湖边可以抓到,拿东西都用来做了豆瓣酱,江南的住家,家家户户都会调制鲜虾酱,尤其方便下饭,近几年的金菜地牌鲜虾酱就很适合本人口味,不过自己依然喜欢我姑姑做的,那种味道永远最为纯粹。

本条,春日,自然仍然要吃小龙虾的,我有一个同室,一贯喊我出去吃小龙虾喝利口酒,每便给自身打电话,“哥,前些天夜间于台搞起呀。”那种笑话真的很常见,因为我们那里的人,读字爱读半边,盱眙就成了于台,你看多接地气。到了小食堂,大叫一声,“老董,来十斤正宗于台小龙虾。”

2015.7.10于帕罗奥图秣陵

�������8�����

1、Redis基础及安装

Redis是一个开源的选用ANSI
C语言编写、支持网络、可按照内存亦可持久化的日志型、Key-Value数据库,和Memcached类似,它辅助存储的value类型相对越多,包蕴string(字符串)、list(链表)、set(集合)、zset(sorted
set
–有序集合)和hash(哈希类型)。在此基础上,redis协理各样差别方式的排序。与memcached一样,为了确保效能,数据都是缓存在内存中。区其余是redis会周期性的把革新的多少写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上落成了master-slave(主从)同步。

Redis的代码听从ANSI-C编写,可以在颇具POSIX系统(如Linux, *BSD, Mac OS
X,
Solaris等)上安装运行。而且Redis并不借助于任何非标准库,也远非编译参数必需添加。

1)Redis协助二种持久化情势:

 
 (1):snapshotting(快照)也是默许格局.(把数据做一个备份,将数据存储到文件)

   (2)Append-only file(缩写aof)的方式 

 
 快照是默许的持久化方式,那种措施是将内存中数据以快照的措施写到二进制文件中,默许的文件名称为dump.rdb.可以透过配备安装自动做快照持久化的不二法门。大家得以计划redis在n秒内倘若跨越m个key键修改就自动做快照.

 
 aof方式:由于快照格局是在自然间隔时间做一回的,所以假若Redis意外down掉的话,就会丢掉最终三遍快照后的有着修改。aof比快照方式有更好的持久化性,是由于在利用aof时,redis会将每一个接受的写命令都通过write函数追加到文件中,当redis重启时会通过重复履行文书中保留的写命令来在内存中重建总体数据库的始末。 

2)Redis数据结构

Redis 的撰稿人antirez曾称其为一个数据结构服务器(data structures
server
),那是一个非常准确的表明,Redis的拥有机能就是将数据以其固有的两种结构保留,并提须要用户操作那两种结构的接口。大家得以想象大家在各样语言中的这些固有数据类型及其操作。

Redis近期提供四种数据类型:string,list,setzset(sorted
set)和Hash

  • string是最简便易行的序列,你可以了解成与Memcached一模一个的品类,一个key对应一个value,其上帮忙的操作与Memcached的操作看似。但它的意义更增加。
  • list是一个链表结构,主要功能是push、pop、获取一个限制的所有值等等。操作中key掌握为链表的名字。
  • set是汇聚,和大家数学中的集合概念一般,对聚集的操作有添加删除元素,有对七个集合求交并差等操作。操作中key明白为会聚的名字。
  • zset是set的一个擢升版本,他在set的基本功上平添了一个挨家挨户属性,这一特性在累加修改元素的时候可以指定,每一趟指定后,zset会自行重新按新的值调整顺序。能够知道了有两列的mysql表,一列存value,一列存顺序。操作中key驾驭为zset的名字。
  • Hash数据类型允许用户用Redis存储对象类型,Hash数据类型的一个生死攸关亮点是,当您存储的数额对象唯有很少多少个key值时,数据存储的内存消耗会很小.越来越多关于Hash数据类型的求证请见: http://code.google.com/p/redis/wiki/Hashes

3)Redis数据存储

Redis的囤积分为内存存储、磁盘存储和log文件三有的,配置文件中有八个参数对其进展布署。

save seconds
updates
save配置,提议在多久内,有微微次立异操作,就将数据同步到数据文件。那个可以多少个尺码格外,比如默许配置文件中的设置,就安装了七个标准化。

appendonly
yes
/no appendonly布置,提出是否在历次换代操作后举办日志记录,假若不打开,可能会在断电时造成一段时间内的多寡丢失。因为redis本身同步数据文件是按下面的save条件来一块的,所以部分数据会在一段时间内只设有于内存中。

appendfsync
no
/always/everysec appendfsync配置,no表示等操作系统举行数量缓存同步到磁盘,always意味着每一回换代操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。

 

4)Redis的安装

Redis可以在分化的平台运行,不过我重点根据Windows举行付出工作,所以上边紧若是基于Windows平台进行介绍。

Redis可以设置以DOS窗口启动的,也可以设置为Windows服务的,一般为了有利于,我们更愿意把它安装为Windows服务,那样可以比较方便管理。下载地址:https://github.com/MSOpenTech/redis/releases下载,安装为Windows服务即可。

现阶段得以下载到最新的Windows安装版本为3.0,安装后当做Windows服务运作,安装后方可在系统的劳务中间来看Redis的劳动在运转了,如下图所示。

图片 1

安装好Redis后,还有一个Redis伴侣Redis Desktop
Manager必要设置,那样可以实时查看Redis缓存里面有如何数据,具体地址如下:http://redisdesktop.com/download

下载属于自己平台的版本即可

图片 2

下载安装后,打开运行界面,即使我们往里面添加键值的数据,那么可以见见里面的数量了。

图片 3

 

2、Redis的C#使用

Redis近日提供四种数据类型:string,list,setzset(sorted
set)和Hash。因而它在C#个中也有照应的包装处理,而且有诸几个人对他展开了打包,提供了诸多的响应开发包,具体能够访问http://redis.io/clients#c
举行摸底。一般提出用瑟维斯(Service)Stack.Redis的包装驱动相比较好,具体的接纳可以参见https://github.com/ServiceStack/ServiceStack.Redis

大家开发C#代码的时候,可以在NuGet程序包下边举行添加对应的ServiceStack.Redis引用,如下所示。

图片 4

 

在弹出的NuGet程序包里面,输入瑟维斯(Service)(Service)Stack.Redis举办搜寻,并丰富上边的驱动引用即可。

图片 5

那样会在项目引用里面添加了几个照应的程序集,如下所示。

图片 6

在C#里头使用Redis,首先需求实例化一个Redis的客户端类,如下所示。

        //创建一个Redis的客户端类
        RedisClient client = new RedisClient("127.0.0.1", 6379);

在使用前,我们必要清空所有的键值存储,使用FushAll方法即可,如下所示

            //Redis FlushAll 命令用于清空整个 Redis 服务器的数据(删除所有数据库的所有 key )。 
            client.FlushAll();

依照地方的驱动,能够为差异档次的拍卖编写一些演示代码,下边代码是摘录网上的案例举行介绍。

            #region string类型的测试代码

            client.Add<string>("StringValueTime", "带有有效期的字符串", DateTime.Now.AddMilliseconds(10000));

            while (true)
            {
                if (client.ContainsKey("StringValueTime"))
                {
                    Console.WriteLine("String.键:StringValue, 值:{0} {1}", client.Get<string>("StringValueTime"), DateTime.Now);
                    Thread.Sleep(10000);
                }
                else
                {
                    Console.WriteLine("键:StringValue, 值:已过期 {0}", DateTime.Now);
                    break;
                }
            }

            client.Add<string>("StringValue", " String和Memcached操作方法差不多");
            Console.WriteLine("数据类型为:String.键:StringValue, 值:{0}", client.Get<string>("StringValue"));

            Student stud = new Student() { id = "1001", name = "李四" };
            client.Add<Student>("StringEntity", stud);
            Student Get_stud = client.Get<Student>("StringEntity");
            Console.WriteLine("数据类型为:String.键:StringEntity, 值:{0} {1}", Get_stud.id, Get_stud.name);
            #endregion

            #region Hash类型的测试代码

            client.SetEntryInHash("HashID", "Name", "张三");
            client.SetEntryInHash("HashID", "Age", "24");
            client.SetEntryInHash("HashID", "Sex", "男");
            client.SetEntryInHash("HashID", "Address", "上海市XX号XX室");

            List<string> HaskKey = client.GetHashKeys("HashID");
            foreach (string key in HaskKey)
            {
                Console.WriteLine("HashID--Key:{0}", key);
            }

            List<string> HaskValue = client.GetHashValues("HashID");
            foreach (string value in HaskValue)
            {
                Console.WriteLine("HashID--Value:{0}", value);
            }

            List<string> AllKey = client.GetAllKeys(); //获取所有的key。
            foreach (string Key in AllKey)
            {
                Console.WriteLine("AllKey--Key:{0}", Key);
            }
            #endregion

            #region List类型的测试代码
            /*
             * list是一个链表结构,主要功能是push,pop,获取一个范围的所有的值等,操作中key理解为链表名字。 
             * Redis的list类型其实就是一个每个子元素都是string类型的双向链表。我们可以通过push,pop操作从链表的头部或者尾部添加删除元素,
             * 这样list既可以作为栈,又可以作为队列。Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,
             * Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构 
             */
            client.EnqueueItemOnList("QueueListId", "1.张三");  //入队
            client.EnqueueItemOnList("QueueListId", "2.张四");
            client.EnqueueItemOnList("QueueListId", "3.王五");
            client.EnqueueItemOnList("QueueListId", "4.王麻子");
            long q = client.GetListCount("QueueListId");

            Console.WriteLine(client.GetItemFromList("QueueListId", 0));
            for (int i = 0; i < q; i++)
            {
                Console.WriteLine("QueueListId出队值:{0}", client.DequeueItemFromList("QueueListId"));   //出队(队列先进先出)
            }

            q = client.GetListCount("QueueListId");
            Console.WriteLine(q);

            client.PushItemToList("StackListId", "1.张三");  //入栈
            client.PushItemToList("StackListId", "2.张四");
            client.PushItemToList("StackListId", "3.王五");
            client.PushItemToList("StackListId", "4.王麻子");
            long p = client.GetListCount("StackListId");
            for (int i = 0; i < p; i++)
            {
                Console.WriteLine("StackListId出栈值:{0}", client.PopItemFromList("StackListId"));   //出栈(栈先进后出)
            }
            q = client.GetListCount("StackListId");
            Console.WriteLine(q);

            #endregion

            #region Set无序集合的测试代码
            /*
             它是string类型的无序集合。set是通过hash table实现的,添加,删除和查找,对集合我们可以取并集,交集,差集
             */
            client.AddItemToSet("Set1001", "小A");
            client.AddItemToSet("Set1001", "小B");
            client.AddItemToSet("Set1001", "小C");
            client.AddItemToSet("Set1001", "小D");
            HashSet<string> hastsetA = client.GetAllItemsFromSet("Set1001");
            foreach (string item in hastsetA)
            {
                Console.WriteLine("Set无序集合ValueA:{0}", item); //出来的结果是无须的
            }

            client.AddItemToSet("Set1002", "小K");
            client.AddItemToSet("Set1002", "小C");
            client.AddItemToSet("Set1002", "小A");
            client.AddItemToSet("Set1002", "小J");
            HashSet<string> hastsetB = client.GetAllItemsFromSet("Set1002");
            foreach (string item in hastsetB)
            {
                Console.WriteLine("Set无序集合ValueB:{0}", item); //出来的结果是无须的
            }

            HashSet<string> hashUnion = client.GetUnionFromSets(new string[] { "Set1001", "Set1002" });
            foreach (string item in hashUnion)
            {
                Console.WriteLine("求Set1001和Set1002的并集:{0}", item); //并集
            }

            HashSet<string> hashG = client.GetIntersectFromSets(new string[] { "Set1001", "Set1002" });
            foreach (string item in hashG)
            {
                Console.WriteLine("求Set1001和Set1002的交集:{0}", item);  //交集
            }

            HashSet<string> hashD = client.GetDifferencesFromSet("Set1001", new string[] { "Set1002" });  //[返回存在于第一个集合,但是不存在于其他集合的数据。差集]
            foreach (string item in hashD)
            {
                Console.WriteLine("求Set1001和Set1002的差集:{0}", item);  //差集
            }

            #endregion

            #region  SetSorted 有序集合的测试代码
            /*
             sorted set 是set的一个升级版本,它在set的基础上增加了一个顺序的属性,这一属性在添加修改.元素的时候可以指定,
             * 每次指定后,zset(表示有序集合)会自动重新按新的值调整顺序。可以理解为有列的表,一列存 value,一列存顺序。操作中key理解为zset的名字.
             */
            client.AddItemToSortedSet("SetSorted1001", "1.刘仔");
            client.AddItemToSortedSet("SetSorted1001", "2.星仔");
            client.AddItemToSortedSet("SetSorted1001", "3.猪仔");
            List<string> listSetSorted = client.GetAllItemsFromSortedSet("SetSorted1001");
            foreach (string item in listSetSorted)
            {
                Console.WriteLine("SetSorted有序集合{0}", item);
            }
            #endregion

对此具体品种的类对象,也足以运用As方法举行转移为对应的处理目的开展处理,如下所示

IRedisTypedClient<Phone> phones = client.As<Phone>();

实际的测试代码如下所示。

        /// <summary>
        /// Redis对对象类的处理例子
        /// </summary>
        private void btnTypeValue_Click(object sender, EventArgs e)
        {
            IRedisTypedClient<Phone> phones = client.As<Phone>();
            Phone phoneFive = phones.GetValue("5");
            if (phoneFive == null)
            {
                Thread.Sleep(50);
                phoneFive = new Phone
                {
                    Id = 5,
                    Manufacturer = "Apple",
                    Model = "xxxxx",
                    Owner = new Person
                    {
                        Id = 1,
                        Age = 100,
                        Name = "伍华聪",
                        Profession = "计算机",
                        Surname = "wuhuacong"
                    }
                };

                phones.SetEntry(phoneFive.Id.ToString(), phoneFive);
            }

            client.Store<Phone>(
                new Phone
                {
                    Id = 2,
                    Manufacturer = "LG",
                    Model = "test-xxx",
                    Owner = new Person
                    {
                        Id = 2,
                        Age = 40,
                        Name = "test",
                        Profession = "teacher",
                        Surname = "wuhuacong"
                    }
                });

            var message = "Phone model is " + phoneFive.Manufacturer + ",";
            message += "Phone Owner Name is: " + phoneFive.Owner.Name;
            Console.WriteLine(message);
        }

上述就是关于Redis的安装以及简单的事例使用表明,在现实中,大家得以使用Redis的高性能特点,来构建大家的缓存数据,并且可以应用Redis和MongoDB数据库的无微不至衔接,可以结合一起做的更好,为有关的后台提供更迅捷的数据处理操作,毕竟在互联网的大环境下,性能是格外紧要的。

 

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图