41javaee第一期-12课redis知识点讲义it教程_第1页
41javaee第一期-12课redis知识点讲义it教程_第2页
41javaee第一期-12课redis知识点讲义it教程_第3页
41javaee第一期-12课redis知识点讲义it教程_第4页
41javaee第一期-12课redis知识点讲义it教程_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Redis介NoSQLNot-OnlySQL,泛指非关系型的数据库。它是为了解决高并发、高可用、高可NoSql典型应用:内容缓存,主要用于处理大量数据的高访问负载。数据模型:一系列键值对相关产品:CassandraHBase典型应用:Web应用(与Key-Value类似,Value是结构化的)数据模型:一系列键值对RedisRedisC语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:Redis2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统LLOOGGSalvatoreSanfilippoMySQL的性能感到失RedisSalvatoreSanfilippoRedisLLOOGG这一款产品,而SalvatoreSanfilippoRedis开源发布,并开始和RedisPieterNoordhuisRedis的开发,直到今天。SalvatoreSanfilippo自己也没有想到,短短的几年时间,Redis就拥有了庞大的用户群体。HackerNews201212%的公司在使Redis的用户。VMware2010RedisSalvatoreSanfilippoPieterNoordhuis也35VMwareRedis。RedisRedis单机版安装配RedisRedisClinuxCentos6.4Redis第一步:在VMwareCentOS(Linux教程中的安装虚拟机[root@linux02redis-3.0.0]#yuminstallgcc-[root@linux02redis-3.0.0]#yuminstallgcc-[root@linux02~]#tar-zxf[root@linux02~]#tar-zxfredis-[root@linux02redis-3.0.0]#Redis[root@linux02redis-3.0.0]#[root@linux02redis-3.0.0]#makeinstall[root@linux02redis-3.0.0]#makeinstallRedis前端启动[root@linux02bin]#./redis-[root@linux02bin]#./redis-启动缺点:客户端窗口关闭则redis-server程序结束,不推荐使用此方法后端启动[root@linux02redis-3.0.0]#cpredis.conf[root@linux02redis-3.0.0]#cpredis.conf[root@redis01bin2]#vimredis.confdaemonize[root@redis01bin2]#vim[root@linux02[root@linux02bin]#./redis-server[root@localhost-0723bin]#[root@localhost-0723bin]#kill[root@localhost-0723[root@localhost-0723bin]#./redis-cliRedis集群版安装配redis-cluster架构细节客户端与redis节点直连,proxy层.客户端不需要连接集群所有节点,连接集群redis-cluster把所有的物理节点映射到[0-16383]slot上,clusterRedisRedis集群中内置了16384个哈希槽,当需要在Redis集群中放置一个key-value时,rediskeycrc1616384求余数,这样每个key都会对应一个编号在0-16383之间的哈希槽,redis会根据节点数量大致均等的将哈(cluster-node-timeout),master节点挂掉.master挂掉,masterslavefail状态。也可以理解成集群的[0-16383]slot映射不完全时进入fail状态。Ruby[root@redis01bin]#yuminstall[root@redis01[root@redis01bin]#yuminstall[root@redis01bin]#yuminstallredis-3.0.0.gemLinuxrubyredis的接口程序redis-[root@linux02[root@linux02local]#geminstallredis-[root@redis01src]#cpredis-trib.rb/usr/local/redis0707/-[root@redis01src]#cpredis-trib.rb/usr/local/redis0707/-集群的搭建过程Redis集群最少需要三台主服务器,三台从服务器。7001redis.confport7001注意:创建实例,即拷贝单机版安装时,生成的bin700170017002~7006实例,注意端口修改。 -- 29:700229:700329:7004>>>CreatingConnectingtonode29:7001:OKConnectingtonode29:7002:OKConnectingtonode29:7003:OKConnectingtonode29:7004:OKConnectingtonode29:7005:OKConnectingtonode29:7006:>>>Performinghashslotsallocationon6nodes...Using3masters:Addingreplica29:7004toAddingreplica29:7005toAddingreplica29:7006toslots:0-5460(5461slots)slots:5461-10922(5462slots)M:93f73d2424a796657948c660928b71edd3db881fslots:10923-16383(5461slots)S:f79802d3da6b58ef6f9f30c903db7b2f79664e61replicatesS:0bc78702413eb88eb6d7982833a6e040c6af05bereplicatesS:4170a68ba6b7757e914056e2857bb84c5e10950ereplicates93f73d2424a796657948c660928b71edd3db881fCanIsettheaboveconfiguration?(type'yes'toaccept):yes>>>Nodesconfiguration>>>Assignadifferentconfigepochtoeach>>>SendingCLUSTERMEETmessagestojointheclusterWaitingfortheclustertojoin....>>>PerformingClusterCheck(usingnodeslots:0-5460(5461slots)slots:5461-10922(5462slots)M:93f73d2424a796657948c660928b71edd3db881fslots:10923-16383(5461slots)slots:(0slots)replicatesM:0bc78702413eb88eb6d7982833a6e040c6af05beslots:slots:(0slots)replicatesslots:(0slots)replicates93f73d2424a796657948c660928b71edd3db881f[OK]Allnodesagreeaboutslotsconfiguration.>>>Checkforopen>>>Checkslotscoverage...[OK]All16384slotscovered.[root@localhost-0723连接集群命令:./redis-cli–h–p7001[root@localhost-0723redis]#./redis-cli-p[root@localhost-0723redis]#./redis-cli-p7006-c:7006>setkey1123->Redirectedtoslot[9189]locatedat:7002查看集群的命令:7003>clusterinfo:7003>clusterinfo:7003>:7003>cluster7a12bc730ddc939c84a156f276c446c28acf798c:7002master-01443601739754connectedconnected5461-10923-d8f6a0e3192c905f0aad411946f3ef9305350420:7001master-01443601741267connected0- 93f73d2424a796657948c660928b71edd3db881f014436017392506 d8f6a0e3192c905f0aad411946f3ef9305350420014436017422774 7a12bc730ddc939c84a156f276c446c28acf798c014436017402595维护节点(自学)添加主节点7007执行命令:./redis-trib.rbadd-node:7007hashredis16384个槽,集群中的每个结点分配自已槽,通过查看集群结点可以看到槽占7007[root@redis01redis0707]#[root@redis01redis0707]#./redis-trib.rbreshardPS7007分配槽,通过clusternodes7007id添加从节点700870087007命令:./redis-trib.rbadd-node--slave--master-ididipip和./redis-trib.rb./redis-trib.rbadd-node--slave--master-id:7008 id[ERR]NodeXXXXXXisnotempty.Eitherthenode[ERR]NodeXXXXXXisnotempty.Eitherthenodealreadyknowsothernodes(checkCLUSTERNODES)orcontainssomekeyindatabase70087007删除结点命令:./redis-trib.rbdel-node:7005[ERR]Node:7005isnotempty!Resharddataawayandtry需要将该结点占用的hash槽分配出去(参考hash槽重新分配章节Jedis[root@localhost-0723[root@localhost-0723bin]#serviceiptables-AINPUT-picmp-j-AINPUT-ilo-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport22-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport8080-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport6379-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport6380-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport7001-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport7002-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport7003-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport7004-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport7005-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport7006-j-AINPUT-jREJECT--reject-withicmp-host--AFORWARD-jREJECT--reject-withicmp-host-prohibited~"/etc/sysconfig/iptables22L,1079C[root@localhost-0723bin]#serviceiptables[root@localhost-0723代码实现JedisClusterredispublicvoidtestJedisCluster()throwsException//创建一连接,JedisCluster对象,在系统中是单例存在Set<HostAndPort>nodes=newHashSet<>();nodes.add(newHostAndPort("29",7006));JedisClustercluster=newJedisCluster(nodes);//JedisCluster对象中的方法,方法和rediscluster.set("cluster-test","myjedisclustertest");Stringresult=cluster.get("cluster-test");}<!--<!--<beanid="jedisPoolConfig"<!--<propertyname="maxTotal"value="30"<!--<propertyname="maxIdle"value="10"<!--<!--释放连接的扫描间隔(毫秒)<!--<!--连接空闲多久后释放,当空闲时间>><!--获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1<!--在获取连接的时候检查有效性,默认false<propertyname="testOnBorrow"value="true"<!--在空闲时检查有效性,默认false<propertyname="testWhileIdle"value="true"<!--连接耗尽时是否阻塞false报异常,ture阻塞直到超时,默认true<propertyname="blockWhenExhausted"value="false"redis<beanid="jedisCluster"<constructor-arg<bean<bean<bean<bean<bean<beanprivateprivateApplicationContextapplicationContext;publicvoidinit()applicationContext=newClassPathXmlApplicationContext(}redis集群publicvoidtestJedisCluster()JedisClusterjedisCluster=(JedisCluster)jedisCluster.set("name","zhangsan");Stringvalue=jedisCluster.get("name");}Redis客户Redis[root@localhost-0723[root@localhost-0723bin]#./redis-cli-h-p-h:redisip-p:redis[root@localhost-0723[root@localhost-0723bin]#./redis-图形界面客户端(了解)连接超时解决远程连接redis服务,需要关闭或者修改防火墙配置。[root@redis01bin]#[root@redis01bin]#vimyyp[root@localhost-0723[root@localhost-0723redis-3.0.0serviceiptablesrestartiptablesACCEPT:filter[确定切换数据库使用命令:select数据库编号例如:select1JavaJedisRedis不仅使用命令来操作,而且可以使用程序客户端操作。现在基本上主流的语言都有客java、C、C#、C++、php、Node.js、Go等。推荐使用Jedis和Redisson。在企业中用的最多的就是Jedis,下面我们就重点学习下Jedis。Jedis同样也是托管在github上,地址: jar单实例连接publicvoidtestJedis()//JedisJedisjedis=newJedis("",//redisjedis.set("mytest","helloworld,thisisjedis//redisStringresult=}连接池连接publicvoidtestJedisPool()JedisPooljedisPool=newJedisPool("",Jedisjedis=jedisPool.getResource();Stringresult=jedis.get("mytest");}springjarspring配置文件<beansxmlns="http:///schema/beans"/schema/tx/spring-tx-3.2.xsd"><!--<beanid="jedisPoolConfig"<!--<propertyname="maxTotal"value="30"<!--<propertyname="maxIdle"value="10"<!--<!--释放连接的扫描间隔(毫秒)<!--<!--<!--连接空闲多久后释放,当空闲时间>该值且空闲连接>最大空闲连接数时直接释放--><!--获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1<propertyname="maxWaitMillis"value="1500"<!--在获取连接的时候检查有效性,默认false<propertyname="testOnBorrow"value="false"<!--在空闲时检查有效性,默认false<propertyname="testWhileIdle"value="true"<!--连接耗尽时是否阻塞false报异常,ture阻塞直到超时,默认true<propertyname="blockWhenExhausted"value="false"redis<beanid="jedisPool"class="redis.clients.jedis.JedisPool"<constructor-argname="port"value="6379"publicpublicvoidtestJedisPool()JedisPoolpool=(JedisPool)applicationContext.getBean("jedisPool");Jedisjedis=null;tryjedis=jedis.set("name",Stringname=jedis.get("name");}catch(Exceptionex){}finallyif(jedis!=null)//}}}Redis数据类Rediskey-value格式存储的,对于valueHash注意:在redis中的命令语句中,命令是忽略大小写的,而key是不忽略大小写的 String命令赋:6379>settest:6379>settest取:6379>get:6379>get:6379>getsets2:6379>getsets2:6379>get删:6379>del:6379>del(integer)数值增:6379>incr(integer):6379>incr(integer):6379>incr(integer):6379>incr(integer):6379>incrbynum:6379>incrbynum(integer):6379>incrbynum(integer):6379>incrbynum(integer):6379>decr(integer):6379>decr(integer):6379>decr(integer):6379>decr(integer):6379>decr(integer):6379>decr(integer):6379>decrbynum(integer)(integer):6379>decrbynum(integer)-其它命令(自学向尾部追加于SETkeyvalue。返回值是追加后字符串的总长度。:6379>setstrhello:6379>setstrhello:6379>appendstr"world!"(integer)12:6379>get"hello:6379>strlen(integer):6379>strlen(integer):6379>setstrhello:6379>strlen(integer)同时设置/MSETkeyvalue[keyvalue…]MGETkey[key…]:6379>:6379>msetk1v1k2v2k3v3:6379>getk1:6379>mgetk1应用场景之自增主键key:items:id:7003>INCRitems:id(integer):7003>INCR(integer)Hashstringagehash命令赋HSETHSET1,当执行更新0。:6379>hset:6379>hsetuserusername(integer):6379>hmsetuserage20username:6379>hmsetuserage20username:6379>hsetnxuserage30 userage:6379>hsetnxuserage30 userageage30,否则(integer)取语法:HGETkeyfield:6379>:6379>hgetuser:6379>hmgetuserage1)2):6379>hmgetuserage1)2):6379>hgetall:6379>hgetall删除字:6379>hdel:6379>hdeluserage(integer)1:6379>hdeluseragename(integer)0:6379>hdeluserage(integer)增加数:6379>hincrbyuserage:6379>hincrbyuserage(integer):6379>hgetuserage其它命令(自学判断字段是否存:6379>hexistsuser:6379>hexistsuser(integer)userage:6379hexistsusernameusername(integer):6379>hmsetuser:6379>hmsetuserage20namelisi:6379>hkeys:6379>hvals1)2)获取字段数:6379>hlen:6379>hlen(integer)应用之存储商品信息ID1001Rediskey:7003>:7003>HMSETitems:1001id3nameappleprice:7003>:7003>HGETitems:1001idListArrayListLinkedListArrayListLinkedList使用双向链表方式存储数据,每个元素都记录前后元素的指针,所以插入、list10条记录也是极快的。命令:6379>lpushlist:112:6379>lpushlist:112(integer):6379>rpushlist:145:6379>rpushlist:145(integer)查看列:6379>lrangelist:10:6379>lrangelist:101)2)3)LPOP命令从列表左边弹出一个元素,会分两步完成::6379>lpop:6379>lpop:6379>rpop:6379>llen:6379>llen(integer)其它命令(自学LREMcountvaluecount>0LREMcount<0LREMcount=0LREM删除所有值为value的元素。语法:LREMkeycountvalue获得/:6379>lindex:6379>lindexl:list:6379>lsetl:list22:6379>lsetl:list22:6379>lrangel:list0-1)2)3)4):6379>lrangel:list0-1):6379>lrangel:list0-1)2)3)4):6379>ltriml:list02:6379>lrangel:list0-1)2)3)向列表中插入元pivotBEFORE还AFTERvalue插入到该元素的前面还是后面。:6379>lrangelist0-1):6379>lrangelist0-1)2)3):6379>linsertlistafter3(integer):6379>lrangelist0-1)2)3)4)将元素从一个列表转移到另一个列表语法:RPOPLPUSHsource:6379>:6379>rpoplpushlistnewlist:6379>lrangenewlist0-1):6379>lrangelist0-1)2)3)应用之商品评论列表:7001>ment:1001'{"id":1,"name商品不错,很好!!list存储商品评论信息,KEYID,VALUE:7001>ment:1001'{"id":1,"name商品不错,很好!!SetsetRedis0(1)。命令增加/:6379>saddsetab:6379>saddsetabc(integer)3:6379>saddset(integer):6379>sremsetc(integer):6379>sremsetc(integer):6379>smembers:6379>smembers:6379>sismemberseta(integer)1:6379>sismemberseta(integer)1:6379>sismemberset(integer)运算命令A-AB语法:SDIFFkeykey:6379>:6379>saddsetA12(integer):6379>saddsetB23(integer):6379>sdiffsetA1):6379>sdiffsetB1)集合的交集运算AAB:6379>sintersetA1):6379>sintersetA1)2)集合的并集运算AAB:6379>sunionsetA1):6379>sunionsetA1)2)3)4)其它命令(自学:6379>smembers:6379>smembers1)2)3):6379>scard(integer):6379>spopSPOP:6379>spopSortedSetsortedset命令增加元:6379>zaddscoreboard80zhangsan89lisi:6379>zaddscoreboard80zhangsan89lisi94(integer):6379>zaddscoreboard97(integer)startstop之间的所有元素(包含两端的元:6379>zrangescoreboard0:6379>zrangescoreboard0startstop之间的所有元素(包含两端的元:6379>zrevrangescoreboard0":6379>zrevrangescoreboard0"lisi"zhangsan:6379>zrangescoreboard:6379>zrangescoreboard01:6379>zscorescoreboard:6379>zscorescoreboard删除元key中的一个或多个成员,不存在的成员将被忽略。key存在但不是有序集类型时,返回一个错误。:6379>zremscoreboard(integer):6379>zremscoreboard(integer)其它命令(自学获得指定分数范围的元:6379>ZRANGEBYSCOREscoreboard9097:6379>:6379>ZRANGEBYSCOREscoreboard9097:6379>ZRANGEBYSCOREscoreboard70100limit1:6379>ZINCRBYscoreboard4:6379>ZINCRBYscoreboard4:6379>ZCARD:6379>ZCARD(integer):6379>ZCOUNTscoreboard80:6379>ZCOUNTscoreboard80(integer):6379>ZREMRANGEBYRANKscoreboard0:6379>ZREMRANGEBYRANKscoreboard0(integer):6379>ZRANGEscoreboard0-1):6379>zaddscoreboard84:6379>zaddscoreboard84(integer):6379>ZREMRANGEBYSCOREscoreboard80(integer):6379>ZRANKscoreboard:6379>ZRANKscoreboard(integer):6379>ZREVRANKscoreboard:6379>ZREVRANKscoreboard(integer)应用之商品销售排行榜,Key:7007>ZADDitems:sellsort9100110:7007>ZADDitems:sellso

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论