NOSQL数据库redis快速入门

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

NOSQL:是说一大类新出现的数据库,它的特点:1、不支持SQL语法2、存储结构跟传统关系型数据库中的那种关系表完全不同,nosql中存储的数据都是KV形式3、NOSQL的世界中没有一种通用的语言,每种nosql数据库都有自己的api和语法,以及擅长的业务场景4、NOSQL中的产品种类相当多:a)Mongodb文档型nosql数据库,擅长做CMS系统(内容管理系统)b)Redis数据结构服务器,像一把瑞士军刀,只要你有足够的想象力,它可以发挥你想象到的作用c)Hbasehadoop生态系统中原生的一种nosql数据库,重量级的分布式nosql数据库,用于海量数据的场景d)Cassandrahadoop生态系统中原生的一种分布式nosql数据库,后起之秀。。。。。。NOSQL和SQL数据库的比较:1、适用场景不同:sql数据库适合用于关系特别复杂的数据查询场景,nosql反之2、事务特性的支持:sql对事务的支持非常完善,而nosql基本不支持事务3、两者在不断地取长补短,呈现融合趋势Redis1/什么是redisRedis是一个高性能的kv缓存和数据库Redis的存储结构就是kv,形式如下:注:redis中的value内部可以支持各种数据结构类型,比如可以存入一个普通的string,还可以存list,set,hashmap,sortedSet(有序的set)2、redis应用场景A、用来做缓存(ehcache/memcached)——redis的所有数据是放在内存中的(内存数据库)B、可以在某些特定应用场景下替代传统数据库C、在一些大型系统中,巧妙地实现一些特定的功能:session共享、购物车只要你有丰富的想象力,redis可以用在各种官网说明上没有提到的场景。。。。。3、redis的特性A、redis数据访问速度快(数据在内存中)B、redis的数据有持久化(持久化机制有两种:1、定期将内存数据dump到磁盘;2、aof持久化机制——用记日志的方式记录每一条数据更新操作,一旦出现灾难事件,可以通过日志重放来恢复整个数据库)C、redis还支持集群模式(容量可以线性扩展)D、redis相比其他缓存工具(ehcach/memcached),有一个鲜明的优势:支持丰富的数据结构安装redis1、先去官网()下载一个源码工程(redis官网版本只支持linux/微软开源事业部维护了一个windows版本)2、把安装包上传到服务器,解压缩3、切换到解压出来的源码工程目录中cdredis-2.6.164、用make命令来对redis的c语言源码工程进行编译5、编译完成之后,用makeinstall命令进行安装[root@notrue-centosredis-2.6.16]#makePREFIX=/usr/local/redisinstall安装成功的显示:进入redis的bin目录:Redis服务在启动的时候可以指定配置文件,那,我们可以从redis的源码目录中拷贝一份配置文件模板到redis的安装目录,修改后使用[root@notrue-centosredis-2.6.16]#cp/root/redis-2.6.16/redis.conf/usr/local/redis/然后再指定配置文件,启动redis服务:启动成功的显示:上述启动方法,会让redis服务进程运行在console前台,最好应该放到后台运行,可将启动命令改为如下方式:方式一[root@notrue-centosredis]#nohupbin/redis-server./redis.conf1/dev/null2&1&Nohup:控制台关闭或闲置超时,也不退出1/dev/null:把程序的“1”——标准输出,重定向到文件/dev/null2&1:把程序的“2”——错误输出,重定向到“1”所去的文件&:把程序放到后台运行方式二修改配置文件,viredis.conf修改其中一个配置保存文件后再用普通命令启动,也可以启动为后台模式[root@notrue-centosredis]#bin/redis-server./redis.conf客户端连接1、用redis自带的命令行客户端[root@notrue-centosredis]#bin/redis-cli-hnotrue-centos-p6379redisnotrue-centos:6379pingPONGredisnotrue-centos:63792、或者用redis的api客户端连接新建一个maven工程,导入jedis的maven依赖坐标dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion2.7.2/versiontypejar/typescopecompile/scope/dependency然后写一个类用来测试服务器跟客户端的连通性:publicclassRedisClientConnectionTest{publicstaticvoidmain(String[]args){//构造一个redis的客户端对象Jedisjedis=newJedis(pinshutang.zicp.net,6379);Stringping=jedis.ping();System.out.println(ping);}}Redis的数据功能——第一种:String类型的数据1/插入和读取一条string类型的数据redisnotrue-centos:6379setsessionid-0001zhangsanOKredisnotrue-centos:6379getsessionid-0001zhangsan2/对string类型数据进行增减(前提是这条数据的value可以看成数字)DECRkeyINCRkeyDECRBYkeydecrementINCRBYkeyincrement3/一次性插入或者获取多条数据MGETkey1key2MSETkey1value1key2value2…..List数据结构从头部插入数据LPUSHkeyvalue1value2value3从尾部插入数据RPUSHkeyvalue1value2value3读取list中的valuesLRANGEkeystartendredislrangetask-queue0-1读取整个list从头部弹出一个元素LPOPkey从尾部弹出一个元素RPOPkey从一个list的尾部弹出一个元素插入到另一个listRPOPLPUSHkey1key2List的应用案例demo任务调度系统:生产者不断产生任务,放入task-queue排队消费者不断拿出任务来处理,同时放入一个tmp-queue暂存,如果任务处理成功,则清除tmp-queue,否则,将任务弹回task-queue上述机制是一个简化版,真实版的任务调度系统会更加复杂,如下所示:(增加了一个专门用来管理暂存队列的角色,以便就算消费者程序失败退出,那些处理失败的任务依然可以被弹回task-queue)Hash数据结构Redis中的Hashes类型可以看成具有StringKey和StringValue的map容器1、往redis库中插入一条hash类型的数据redisHSETkeyfieldvalue举例:redis127.0.0.1:6379hsetuser001:zhangsaniphone6(integer)1redis127.0.0.1:6379hsetuser001:zhangsanxiaomi7(integer)1redis127.0.0.1:6379hsetuser001:zhangsanmeizu8(integer)1在redis库中就形成了这样一条数据:2、从redis库中获取一条hash类型数据的value取出一条hash类型数据中所有field-value对redis127.0.0.1:6379hgetalluser001:zhangsan1)iphone2)63)xiaomi4)75)meizu6)8取出hash数据中所有fieldsredis127.0.0.1:6379HKEYSuser001:zhangsan1)iphone2)xiaomi3)meizu取出hash数据中所有的valueredis127.0.0.1:6379hvalsuser001:zhangsan1)62)73)8取出hash数据中一个指定field的值redis127.0.0.1:6379hgetuser001:zhangsanxiaomi8为hash数据中指定的一个field的值进行增减redis127.0.0.1:6379HINCRBYuser001:zhangsanxiaomi1(integer)8从hash数据中删除一个字段field及其值redis127.0.0.1:6379hgetalluser001:zhangsan1)iphone2)63)xiaomi4)75)meizu6)8redis127.0.0.1:6379HDELuser001:zhangsaniphone(integer)1redis127.0.0.1:6379hgetalluser001:zhangsan1)xiaomi2)73)meizu4)8Redis的Set数据结构功能1、插入一条set数据redis127.0.0.1:6379saddfrieds:zhangsanbingbingbabyfengjiefurongruhuafeifei(integer)6redis127.0.0.1:6379scardfrieds:zhangsan(integer)6redis127.0.0.1:63792、获取一条set数据的所有membersredis127.0.0.1:6379smembersfrieds:zhangsan1)fengjie2)baby3)furong4)bingbing5)feifei6)ruhua3、判断一个成员是否属于某条指定的set数据redis127.0.0.1:6379sismemberfrieds:zhangsanliuyifei#如果不是,则返回0(integer)0redis127.0.0.1:6379sismemberfrieds:zhangsanbaby#如果是,则返回1(integer)13、求两个set数据的差集#求差集redis127.0.0.1:6379sdifffrieds:zhangsanfriends:xiaotao1)furong2)fengjie3)ruhua4)feifei#求差集,并将结果存入到另一个setredis127.0.0.1:6379sdiffstorezhangsan-xiaotaofrieds:zhangsanfriends:xiaotao(integer)4#查看差集结果redis127.0.0.1:6379smemberszhangsan-xiaotao1)furong2)fengjie3)ruhua4)feifei4、求交集,求并集#求交集redis127.0.0.1:6379sinterstorezhangsan^xiaotaofrieds:zhangsanfriends:xiaotao(integer)2redis127.0.0.1:6379smemberszhangsan^xiaotao1)bingbing2)baby#求并集redis127.0.0.1:6379smemberszhangsan^xiaotao1)bingbing2)babyredis127.0.0.1:6379sunionfrieds:zhangsanfriends:xiaotao1)fengjie2)tan

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功