您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > redis笔记--李捷老师
一.NoSQL介绍NoSQL(NotOnlySQL),意为反SQL运动,是一项合新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。它指的是非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准(insert,delete,select)、ACID属性(事务处理)、表结构等等,这类数据库主要有以下特点:非关系型的、分布式的、开源的、水平可扩展的。支持事务比较简单(不能满足现在的需求)二.NoSQL特点1.处理超大量的数据2.运行在便宜的PC服务器集群上3.击碎了性能瓶劲(性能高,无须优化)三.NoSQL适用场景1.对数据高并发读写(传统数据库上万次的写,硬盘I/O就会有问题)2.对海量数据的高效率存储和访问(fielfeed:一个月有2.5亿用户动态)3.对数据的高可扩展性和高可用性(nosql做分布式,很简单。没有固定的表结构,迭代开发时)四.Redis的介绍Redisisanopensource,advancedkey-valuestore.Itisoftenreferredtoasadatastructureserversincekeyscancontainstrings,hashes,lists,setsandsortedsets.Redis是一个开源的,先进的key-value存储。它通常被称为数据结构服务器,因为键可以包含字符串,哈希,链表,集合和有序集合。Redis是一个Key-Value存储系统。它支持存储的value类型很多,包括string(字符串)、list(链表)、set(集合)、zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集和并集及更丰富的操作,Redis支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中,它也可以(方式一)周期性的把更新的数据写入磁盘或者(方式二)把修改操作写入追加的记录文件(相当于log文件)。链表可以做成“栈”(先进后出)和“队列”(先进先出)Redis提供的API语言包括:C、C++、C#、Clojure、CommonLisp、Erlang、Haskell、Java、Javascript、Lua、Objective-C、Perl、PHP、Python、RubyScala、Go、Tcl。目前全球最大的Redis用户是新浪微博,在新浪有200多台物理机,400多个端口正在运行着Redis,有+4G的数据在Redis上来为微博用户提供服务。在新浪微博Redis的部署场景很多,大概分为如下的两种:a.应用程序直接访问Redis数据库b.应用程序直接访问Redis,只有当Redis访问失败时才访问MySQLRedis数据库提供多种灵活的数据结构和数据操作,为不同的数据提供不同的数据类型。五.Redis具体适用场合1.取最新N个数据的操作2.排行榜应用,取TOPN操作3.需要精确设定过期时间的应用4.计数器应用5.Uniq操作,获取某段时间所有数据排重值6.实时系统,反垃圾系统7.Pub/Sub构建实时消息系统8.构建队列系统9.缓存六.redis、mySql、mongoDB的比较七.Redis的安装与部署Redis的官方下载站是:步骤一:下载安装包wget步骤二:编译源程序Unix代码1.tarzxvfredis-2.4.17.tar.gz2.cdredis-2.4.173.make4.cdsrc&&makeinstall步骤三:移动文件,便于管理Unix代码1.mkdir-p/usr/local/redis/bin2.mkdir-p/usr/local/redis/etc3.mv/lamp/redis-2.4.17/redis.conf/usr/local/redis/etc4.cd/lamp/redis-2.4.17/src5.mvmkreleasehdr.shredis-benchmarkredis-check-aofredis-check-dumpredis-cliredis-server/usr/local/redis/bin步骤四:启动Redis服务Unix代码1./usr/local/redis/bin/redis-server2./usr/local/redis/etc/redis.confRedis服务端的默认连接端口是6379(mySql的端口号是:3306;mongoDB的端口号是:27017,28017)。默认情况下,Redis不是在后台运行的,我们需要把开启Redis的后台运行。Unix代码1.vi/usr/local/redis/redis.conf将daemonize的值改为yes。启动后看进程是否启动Unix代码1.ps-ef|grepredis看指定的端口号是否占用Unix代码1.netstat-tunpl|grep6379步骤五:客户端连接Unix代码1./usr/local/redis/bin/redis-cli步骤六:停止Redis实例我们可以使用Unix代码1./usr/local/redis/bin/redis-clishutdown也可以使用Unix代码1.pkillredis-server当然,也可以使用killall,kill-9。八.Redis的配置daemonize:如果需要在后台运行,把该项心为yespidfile:配置多个pid的地址,默认在/var/run/redis.pidbind:绑定ip,设置后只接受来自该ip的请求port:监听端口,默认为6379timeout:设置客户端连接时的超时时间,单位为秒loglevel:分为4级,debug、verbose、notice、warninglogfile:配置log文件地址databases:设置数据库的个数,默认使用的数据库为0save:设置redis进行数据库镜像的频率rdbcompression:在进行镜像备份时,是否进行压缩Dbfilename:镜像备份文件的文件名Dir:数据库镜像备份的文件放置路径Slaveof:设置数据库为其他数据库的从数据库Masterauth:主数据库连接需要的密码验证Requirepass:设置登录登录时需要使用的密码Maxclients:限制同时连接的客户数量Maxmemory:设置redis能够使用的最大内存Appendonly:开启appendonly模式Appendfsync:设置对appendonly.aof文件同步的频率vm-enabled:是否开启虚拟内存支持vm-swap-file:设置虚拟内存的交换文件路径vm-max-memory:设置redis使用的最大物理内存大小vm-page-size:设置虚拟内存的页大小vm-pages:设置交换文件的总的page数量vm-max-threads:设置VMIO同时使用的线程数量Glueoutputbuf:把小的输出缓存存放在一起hash-max-zipmap-entries:设置hash的临界值Activerehashing:重新hash一.Redis的数据类型1.String类型及操作String是最简单的类型,一个key对应一个value,string类型是二进制安全的。Redis的string可以包含任何数据,比如jpg图片或者序列化的对象。Set方法:设置key对应的值为string类型的value例如:我们添加一个name=lili的键值对Unix代码1.redis127.0.0.1:6379setnamelili2.OKSetnx:设置key对应的值为string类型的value,如果key已经存在,返回0,nx是notexist的意思。例如:我们添加一个name=lili_new的键值对。Unix代码1.redis127.0.0.1:6379getname2.lili3.redis127.0.0.1:6379setnxnamelili_new4.(integer)05.redis127.0.0.1:6379getname6.lili7.redis127.0.0.1:6379setnxage208.(integer)1Setex:设置key对应的值为string类型的value,并指定此键值对应的有效期。例如:我们添加一个haircolor=red的键值对,并指定有效期为10秒Unix代码1.redis127.0.0.1:6379setexhaircolor10red2.OK3.redis127.0.0.1:6379gethaircolor4.red5.redis127.0.0.1:6379gethaircolor6.(nil)nil:表示空Setrange:设置指定key的value值的子字符串例如:我们希望将lili的126邮箱替换为gmail邮箱Unix代码1.redis127.0.0.1:6379getname2.lili@126.com3.redis127.0.0.1:6379setrangename6gmail.com4.(integer)145.redis127.0.0.1:6379getname6.lili@gmail.com7.8.redis127.0.0.1:6379setemaillijie@lampbrother.net9.OK10.redis127.0.0.1:6379getemail11.lijie@lampbrother.net12.redis127.0.0.1:6379setrangeemail6-li-jie.me13.(integer)2114.redis127.0.0.1:6379getemail15.lijie@li-jie.meer.netmset:一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置。Unix代码1.redis127.0.0.1:6379msetkey1lijie1key2lijie22.OK3.redis127.0.0.1:6379getkey14.lijie15.redis127.0.0.1:6379getkey26.lijie2msetnx:一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置,但是不会覆盖已经存在的key。Unix代码1.redis127.0.0.1:6379msetnxkey3lijie3key2302.(integer)03.redis127.0.0.1:6379getkey34.(nil)5.redis127.0.0.1:6379msetnxkey3lijie3key4306.(integer)17.redis127.0.0.1:6379getkey38.lijie39.redis127.0.0.1:6379getkey410.30get:获取key对应的string值,如果key不存在返回nil。getset:设置key的值,并返回key的旧值。Unix代码1.redis127.0.0.1:6379getsetkey4402.303.redis127.0.0.1:6379getkey44.40getrange:获取key的value值的子字符串。Unix代码1.redis127.0.0.1:6379getemail2.lijie@li-jie.meer.net3.redis127.0.0.1:6379getra
本文标题:redis笔记--李捷老师
链接地址:https://www.777doc.com/doc-4854436 .html