高性能NoSQL数据库RedisMYSQL应用层读写优化表结构优化sql语句优化索引优化querycache优化存储引擎2.memcached1.mysqlMysqlmemcache读写读缓存失败应用层删除/更新好处:简单易用不用调整数据库相关架构坏处:应用层的代码量增加维护时的系统复杂度增加2.memcached1.mysql方式I作为cache工具Mysqlmemcached读写删除/更新/写读缓存失败应用层通过UDF调用memcachedAPI实现数据的写入,更新,删除2.memcached1.mysql方式II和mysql整合,作为一个整体对外提供服务2.memcached1.mysql基于libeventLRU算法保证了“热门数据”的缓存仅当无空间才会进行数据清除新浪开源:MemcachedDB=BerkeleyDB+Memcached(持久化)Redis分享大纲Redis是什么Redis的特性Redis的API及适用场景Redis的使用经验,运维参数Redis是什么sponsoredby:WhatisRedisis...an“advancedkey-valuestore”bySALVATORESANFILIPPO(@antirez)定义:高性能的key-value内存数据库官方性能测试:50个并发环境下SET:110000次/SGET:81000次/SRedis:快,非常快易部署多语言API支持数据类型:string、list、sets、SortedSet具有原子性操作pop/push持久化支持的master/slave复制支持虚拟内存Redisfeature:RedisvsMemcachedMemcached操作实例键(keys)值(values)page:index.htmlhtmlhead[...]user:101:sessionxDrSdEwd4dSlZkEkj+login_count“100001”user:100:last_login_time“102736485756”所有的操作都是基于字符串、或者是2进制的数据格式、操作起来大部分是GET、SET这2个命令操作,易于使用RedisvsMemcached和Memcached一样、使用简单、性能高效(1G1M)异步持久化存储支持多种数据类型;Strings(字符)、Lists(链表)、Sets(集合)、ZSets(有序集合)、Hashes(哈希)更多、更方便API接口管理数据;MorecommandsandMore….IsRedisRedisvsMemcachedRedis数据类型实例键(keys)值(values)page:index.htmlhtmlhead[...]users_logged_in_today{1,2,3,4,5}latest_post_ids[201,204,209,..]users_and_scoresjoe~1.3483bert~93.4fred~283.22chris~23774.17StringSetsListZSetsRedis的API及适用场景Strings字符./redis-cliSETmystring“helloworld”Cclientkeyvalue./redis-cliGETmystringhelloworldreturnGETSETMGETSETNXSETEXMSETMSETNXRedis的API及适用场景Strings字符INCRINCRBYDECRDECRBYAPPENDSUBSTRRedis的API及适用场景Expiration当把Redis当作缓存服务使用时,你可以设置数据的过期时间,不管是数据类型(string,list,zsets,sets,hash)是什么,此系列命令都有效EXPIREpaitoubing1234TTLpaitoubing==1234秒秒Redis的API及适用场景DeletingKeysDELpaitoubingEXISTSpaitoubing==0(false)Redis的API及适用场景ListsabcdefLPUSHRPUSHLPOPRPOPLPUSHpaitoubingaRedis的API及适用场景ListsabcdefLLEN==6xLREM1bLRANGE23LINDEX5Redis的API及适用场景队列服务QueuesabcdefRPUSHLPOPRPUSHpaitoubingabcRPUSHpaitoubingdefLPOPpaitoubing==“abc”LPOPpaitoubing==“def”LPOPpaitoubing==(nil)Redis的API及适用场景集合Setsuid:1:followersbrucetomzhangsanlisiwangermazixiaoyueyuefengjieuid:2:followersxiaoyueyuefengjieliyuchunfurongjiejieSREMuid:1:followerswangermazixSMOVEuid:1:followersuid:2:followerslisiSADDuid:2:followerstomRedis的API及适用场景集合Setsuid:1:followersbrucetomzhangsanlisiwangermazixiaoyueyuefengjieuid:2:followersxiaoyueyuefengjieliyuchunfurongjiejieSCARDuid:1:followers==7SISMEMBERuid:1:followersxinxin==0(meaningfalse)SRANDMEMBERuid:1:followers==“xiaoyueyue”SMEMBERSuid:2:followers==xiaoyueyuefengjieliyuchunfurongjiejieRedis的API及适用场景集合Sets(交集、并集、差集)uid:1:followersbrucetomzhangsanlisiwangermazixiaoyueyuefengjieuid:2:followersxiaoyueyuefengjieliyuchunfurongjiejiexiaoyueyuefengjieSINTERuid:1:followersuid:2:followers==xiaoyueyuefengjieSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTOREset:集合,对集合的操作有添加删除元素,有对多个集合求交并差等操作redisSADDnewseta(integer)1redisSADDnewsetb(integer)1redisSADDnewsetc(integer)1redisSADDmysetb(integer)1redisSINTERnewsetmyset#求交集1.bredisSUNIONnewsetmyset#求并集1.a2.b3.c“redisSMOVEnewsetmyseta(integer)1redisSCARDnewset(integer)2小红,,小刚小兰,,小铁小王小王SINTERAfollowersBfollowersRedis的API及适用场景集合Sets(交集、并集、差集)zset:他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序redisZADDdays1Mon(integer)0redisZADDdays3Wed(integer)1redisZADDdays2Tue(integer)1redisZRANGEdays0-11.Mon2.Tue3.WedRedis的API及适用场景集合zsetRedis的API及适用场景Hashes(哈希)产品:Product1created_at:1290149988product_id:1name:盛大点券available:100HSETproduct:1created_at1290149988HSETproduct:1name“盛大点券”HSETproduct:1available100HGETproduct:1name==盛大点券HLENproduct:1==3HKEYSproduct:1==created_at,name,availableHGETALLproduct:1==created_at=102374657name=盛大点券available=100HVALSHEXISTSHINCRBYHMGETHMSETRedis的API及适用场景RedisSocialNetwork(社会化网络)UGC好友:双向关系粉丝:单向关系textphotomore…..blog、Message、photo、Redis的API及适用场景新增用户usernameuseridINCRnext_user_idReturns[uid]SETuser:[uid]:name[username]SETusername:[username][id]Int整形变量值新增日记contentauthorINCRnext_post_idReturns[pid]SETpost:[pid]:content[content]SETpost:[pid]:author[uid]LPUSHuser:[uid]:posts[pid]LPUSHposts:global[pid]RedisSocialNetwork(社会化网络)UniqueIDsSORTZCARDMONITORSLAVEOFRENAMESELECTSAVESUBSCRIBEPUBLISHRedis的API及适用场景Enoughcommands!(版本更新快)#tarxzfredis-2.2.4.tar.gz#cdredis-2.2.4#make[Redis命令说明]redis-server:Redis服务器的daemon启动程序redis-cli:Redis命令行操作工具redis-benchmark:Redis性能测试工具1.安装#./src/redis-server/etc/redis.conf2.启动Daemonize:是否以后台daemon方式运行Maxmemory:分配多少内存Port:监听的端口号Loglevel:log信息级别databases:开启数据库的数量rdbcompression:是否使用压缩save**:保存快照的频率dir:数据快照的保存目录appendonly:是否开启appendonlylogappendfilename:指定更新日志文件名appendfsync:appendonlylog如何同步到磁盘vm-swap-file:tmp/redis.swap设置虚拟内存的交换文件路径Activerehashing:开启之后,redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3.配置redis.conf()4.数据类型string:一个key对应一个valueredisSETfoo1OKredisINCRfoo(integer)2redisINCRfoo(integer)3redisGETfoo3redisSETfooterryOKredisINCRfoo(error)ERRvalueredisEXPIREfoo10(integer)1redisTTLfoo10incr(key):名称为key的string增1操作decr(key):名称为key的string减1操作mget(key1,key2,…,):返回库中