??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产精品无码久久久蜜芽,国产亚洲日韩一区二区三区,国产国拍精品亚洲AV片http://www.tkk7.com/lyjjq/category/52011.html我喜Ƣjava新东西zh-cnWed, 25 Jul 2012 22:45:04 GMTWed, 25 Jul 2012 22:45:04 GMT60Redis Windowshttp://www.tkk7.com/lyjjq/articles/382093.html强强强强Tue, 03 Jul 2012 07:18:00 GMThttp://www.tkk7.com/lyjjq/articles/382093.htmlhttp://www.tkk7.com/lyjjq/comments/382093.htmlhttp://www.tkk7.com/lyjjq/articles/382093.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/382093.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/382093.html介:(x)
Redis本质上是一个Key-Valuecd的内存数据库Q很像memcachedQ整个数据库l统加蝲在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上q行保存。因为是U内存操作,Redis的性能非常QRedis最大的力是支持保存List链表和Set集合的数据结构,而且q支持对Listq行各种操作Q例如从List两端push和pop数据Q取 List区间Q排序等{,对Set支持各种集合的ƈ集交集操作,此外单个value的最大限制是1GBQ不像memcached只能保存1MB的数据,Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表Q实C个轻量的高性能消息队列服务Q用他的Set可以做高性能的tagpȝ{等。另外Redis也可以对存入的Key-Value讄expire旉Q因此也可以被当作一个功能加强版的memcached来用?br />
Windows版的Redis可到此处下蝲Q非官方?br />http://code.google.com/p/servicestack/wiki/RedisWindowsDownload

Redis文gҎ(gu)以下几个文g
redis-server.exeQ服务程?br />指定redis的配|文Ӟ如没有指定,则用默认设|?br />D:\redis-2.0.0-rc2>redis-server.exe redis.conf

redis.conf配置选项如下
daemonize 是否以后台进E运行,默认为no
pidfile 如以后台q程q行Q则需指定一个pidQ默认ؓ(f)/var/run/redis.pid
bind l定LIPQ默认gؓ(f)127.0.0.1Q注释)
port 监听端口Q默认ؓ(f)6379
timeout 时旉Q默认ؓ(f)300Q秒Q?br />loglevel 日志记录{Q有4个可选|debugQverboseQ默认|QnoticeQwarning
logfile 日志记录方式Q默认gؓ(f)stdout
databases 可用数据库数Q默认gؓ(f)16Q默认数据库?
save <seconds> <changes> 指出在多长时间内Q有多少ơ更新操作,将数据同步到数据文件。这个可以多个条仉合,比如默认配置文g中的讄Q就讄了三个条件?br />save 900 1  900U(15分钟Q内臛_?个key被改?br />save 300 10  300U(5分钟Q内臛_?00个key被改?br />save 60 10000  60U内臛_?0000个key被改?br />rdbcompression 存储x地数据库时是否压~数据,默认为yes
dbfilename 本地数据库文件名Q默认gؓ(f)dump.rdb
dir 本地数据库存放\径,默认gؓ(f) ./
slaveof <masterip> <masterport> 当本Zؓ(f)从服务时Q设|主服务的IP?qing)端口(注释Q?br />masterauth <master-password> 当本Zؓ(f)从服务时Q设|主服务的连接密码(注释Q?br />requirepass q接密码Q注释)
maxclients 最大客L(fng)q接敎ͼ默认不限Ӟ注释Q?br />maxmemory <bytes> 讄最大内存,辑ֈ最大内存设|后QRedis?x)先试清除已到期或卛_到期的KeyQ当此方法处理后QQ到达最大内存设|,无法再q行写入操作。(注释Q?br />appendonly 是否在每ơ更新操作后q行日志记录Q如果不开启,可能?x)在断?sh)时导致一D|间内的数据丢失。因为redis本n同步数据文g是按上面save条g来同步的Q所以有的数据会(x)在一D|间内只存在于内存中。默认gؓ(f)no
appendfilename 更新日志文g名,默认gؓ(f)appendonly.aofQ注释)
appendfsync 更新日志条gQ共?个可选倹{no表示{操作系l进行数据缓存同步到盘Qalways表示每次更新操作后手动调用fsync()数据写到磁盘,everysec表示每秒同步一ơ(默认|?br />vm-enabled 是否使用虚拟内存Q默认gؓ(f)no
vm-swap-file 虚拟内存文g路径Q默认gؓ(f)/tmp/redis.swapQ不可多个Redis实例׃n
vm-max-memory 所有大于vm-max-memory的数据存入虚拟内?无论vm-max-memory讄多小,所有烦引数据都是内存存储的(Redis的烦引数据就是keys),也就是说,当vm-max-memory讄?的时?其实是所有value都存在于盘。默认gؓ(f)0?br />
Redis官方文对VM的用提Z一些徏?
当你的key很小而value很大?使用VM的效果会(x)比较?因ؓ(f)q样节约的内存比较大.
当你的key不小?可以考虑使用一些非常方法将很大的key变成很大的value,比如你可以考虑key,valuel合成一个新的value.
最好用linux ext3 {对E疏文件支持比较好的文件系l保存你的swap文g.
vm-max-threadsq个参数,可以讄讉Kswap文g的线E数,讄最好不要超q机器的核数.如果讄?,那么所有对swap文g的操作都是串行的.可能?x)造成比较长时间的延迟,但是Ҏ(gu)据完整性有很好的保?redis-cli.exeQ命令行客户端,试?br />D:\redis-2.0.0-rc2>redis-cli.exe -h 127.0.0.1 -p 6379

讄一个Keyq获取返回的?
$ ./redis-cli set mykey somevalue
OK
$ ./redis-cli get mykey
Somevalue

如何d值到l(f)ist:
$ ./redis-cli lpush mylist firstvalue
OK
$ ./redis-cli lpush mylist secondvalue
OK
$ ./redis-cli lpush mylist thirdvalue
OK
$ ./redis-cli lrange mylist 0 -1
1. thirdvalue
2. secondvalue
3. firstvalue
$ ./redis-cli rpop mylist
firstvalue
$ ./redis-cli lrange mylist 0 -1
1. thirdvalue
2. secondvalue

redis-check-dump.exeQ本地数据库(g)?br />
redis-check-aof.exeQ更新日志检?br />
redis-benchmark.exeQ性能试Q用以模拟同时由N个客L(fng)发送M?SETs/GETs 查询 (cM?Apache ?ab 工具).
./redis-benchmark -n 100000 –c 50
====== SET ======
100007 requests completed in 0.88 seconds Q译者注Q?00004 查询完成?1.14 U?Q?br />50 parallel clients Q译者注Q?0个ƈ发客L(fng)Q?br />3 bytes payload Q译者注Q?字节有效载荷)
keep alive: 1 Q译者注Q保?个连?
58.50% <= 0 millisecondsQ译者注Q毫U)
99.17% <= 1 milliseconds
99.58% <= 2 milliseconds
99.85% <= 3 milliseconds
99.90% <= 6 milliseconds
100.00% <= 9 milliseconds
114293.71 requests per secondQ译者注Q每U?114293.71 ơ查询)

Windows下测试ƈ发客L(fng)极限?0

相关文章
http://www.rediscn.com/index.html
http://code.google.com/p/redis/Q官|)
http://code.google.com/p/redis/wiki/CommandReference
文章来源Qhttp://www.madcn.net/?p=686

强强 2012-07-03 15:18 发表评论
]]>
Redis命o(h)——Sorted Set相关 http://www.tkk7.com/lyjjq/articles/381087.html强强强强Tue, 19 Jun 2012 04:48:00 GMThttp://www.tkk7.com/lyjjq/articles/381087.htmlhttp://www.tkk7.com/lyjjq/comments/381087.htmlhttp://www.tkk7.com/lyjjq/articles/381087.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/381087.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/381087.html

本文主要介绍Redis中与有序集合QSorted
SetQ相关的命o(h)Q内容主要来源于Redis的官方网站,如果需要请参考:(x)http://redis.io/commands#sorted_set?/p>


1.ZADD
语法QZADD key scroe
member
说明Q该操作的时间复杂度为O(log(N))Q此处N为有序集合中的元素个数。向key对应的有序集合中dh指定scroe的元素。如果元素在有序集合中已l存在,那么该元素具有的score会(x)被更斎ͼq且元素会(x)被重新插到正的位g便确保正的序。如果指定的key不存在,那么会(x)创徏一个具有memberq一唯一元素的一个新的有序集合。如果key存在Q但是其对应的g是有序集合,那么会(x)发生错误。命令中所指定的scroe值应该是能够转换为数字值的字符Ԍq且接受双精度Q点类型?br />q回|(x)如果元素被添加,q回gؓ(f)1Q如果元素已l是有序集合中的一员ƈ且scroe被更斎ͼ那么q回gؓ(f)0?br />该命令自1.1版本后可用?br />
2.ZCARD
语法QZCARD
key
说明Q该操作的时间复杂度为O(1)。返回存储在key对应的有序集合中的元素的个数?br />q回|(x)q回有序集合中元素的个数Q如果key不存在,那么q回gؓ(f)0?br />该命令自1.1版本后可用?br />
3.ZCOUNT
语法QZCOUNT
key min
max
说明Q该操作的时间复杂度为O(log(N)+M)Q此处N为元素的个数Q而M为min和max间的元素个数。返回key对应的有序集合中介于min和max间的元素的个数?br />q回|(x)q回指定scroe范围内的元素的个数?br />该命令自1.3.3版本后可用?br />
4.ZINCRBY
语法QZINCRBY
key increment
member
说明Q该操作的时间复杂度为O(long(N))Q此处N为有序集合中元素的个数。将key对应的有序集合中member元素的scroe加上increment。如果指定的member不存在,那么会(x)d该元素,q且其score的初始gؓ(f)increment。如果key不存在,那么会(x)创徏一个新的有序列表,其中包含memberq一唯一的元素。如果key对应的g是有序列表,那么会(x)发生错误。指定的score的值应该是能够转换为数字值的字符Ԍq且接收双精度QҎ(gu)。同Ӟ你也可用提供一个负|q样减score的倹{?br />q回|(x)q回member的新的score的|表示为字W串?br />该命令自1.1版本后可用?br />
5.ZINTERSTORE
语法QZINTERSTORE
destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE
SUM|MIN|MAX]
说明Q在最坏的情况下,该操作的旉复杂度ؓ(f)O(N*K)+O(M*log(M))Q此处N为最的有序集合QK为有序集合的个数Q而M为结果有序集合中元素的个数。计numkeys个由keys指定的有序集合的交集Qƈ且将l果存储在destination中。在该命令中Q在你传递输入keys之前Q必L供输入keys的个数和其它可选的参数?br />在默认情况下Q一个元素的l果score是具有该元素的所有有序集合的score的和。关于WEIGHTS和AGGREGATE选项Q可以参看ZUNIONSTORE命o(h)。如果目标已l存在,那么它将?x)被重写?br />q回|(x)q回destination有序集合中元素的个数?br />该命令自1.3.10版本后可用?br />
6.ZRANGE
语法QZRANGE
key start stop
[WITHSCORES]
说明Q该操作的时间复杂度为O(log(N)+M)Q此处N为有序集合中元素的个敎ͼ而M为将要返回的元素的个数。返回存储在key上的指定区域内的元素。元素将?x)按照从低到高的序q行排序。而对于具有相同score的元素,会(x)按照字典序q行排序?br />当你需要按照从高到低的序q行排序元素Ӟ请参考ZREVRANGE命o(h)。在命o(h)中,start和stop索引都是?开始的Q?表示W一个元素,1表示W二个元素,以此cL。它们同样可以是负|以便从有序集合的N指定偏移|此时Q?1表示有序集合中的最后一个元素,-2表示倒数W二个元素,以此cL。超界的索引值将?x)生错误。如果start出有序集合的最大的索引|或者start
>
endQ那么将?x)返回一个空集。如果stop出有序集合的最大烦引,那么?x)将其当作最后一个元素对待?br />同时Q可以向该命令传递WITHSCORES选项以便在返回元素时带上其scores信息。此时返回值列表将?x)是value1,
score1, ... , valueN, scoreNQ而非value1, ... ,
valueN?br />q回|(x)q回指定区域内的元素列表?br />该命令自1.1版本后可用?br />
7.ZRANGEBYSCORE
语法QZRANGEBYSCORE
key min max [WITHSCORES] [limit offset
count]
说明Q该操作的时间复杂度为O(log(N)+M)Q此处N为有序集合中元素的个敎ͼ而M为将要返回的元素的个数。如果M为常量,可以认ؓ(f)旉复杂度ؓ(f)O(log(N))。返回key对应的有序集合中score介于min和max之间的所有元素(包哈score{于min或者max的元素)。元素按照score从低到高的顺序排列。如果元素具有相同的scoreQ那么会(x)按照字典序排列?br />可选的选项LIMIT可以用来获取一定范围内的匹配元素。如果偏UdD大,有序集合需要在获得要q回的元素之前进行遍历,因此?x)增加O(N)的时间复杂度。可选的选项WITHSCORES可以使得在返回元素的同时q回元素的scoreQ该选项自从Redis
2.0版本后可用?br />排除区间端点和无I|(x)
min和max可以?inf?infQ因此你能够在不知道score的最大值或最值的情况下获取一定范围内的所有元素。在默认情况下,由min和max指定的区间是闭区间。同时可以通过在score的前面添?#8220;(”前缀来指定一个开区间Q不包括区间端点Q。例如:(x)
ZRANGEBYSCORE
zset (1 5
会(x)q回1 < score <=
5的所有元素?br />q回|(x)指定score区间内的所有元素列表?br />该命令自1.050版本后可用?br />
8.ZRANK
语法QZRANK
key
member
说明Q该操作的时间复杂度为O(log(N))。返回key对应的有序集合中member元素的烦引|元素按照score从低到高q行排列。rank|或indexQ是?开始的Q这意味着h最低score值的元素的rankgؓ(f)0。用ZREVRANK可以获得从高C排列的元素的rankQ或indexQ?br />q回|(x)如果有序集合中存在memberQ将?x)返回member的rank|如果member不存在,或者指定的key不存在,那么q回gؓ(f)nil?br />该命令自1.3.4版本后可用?br />
9.ZREM
语法QZREM
key
member
说明Q该操作的时间复杂度为O(log(N))Q此处N为有序集合中元素的个数。从key对应的有序集合中U除指定的元素。如果member不是有序集合中的元素Q那么将不执行Q何操作。如果key存在但是其对应的g是有序集合,那么会(x)发生错误?br />q回|(x)如果member被移除,那么q回gؓ(f)1Q如果member不是有序集合中的元素Q那么返回gؓ(f)0?br />该命令自1.1版本后可用?br />
10.ZREMRANGEBYRANK
语法QZREMRANGEBYRANK
key start
stop
说明Q该操作的时间复杂度为O(log(N)+M)Q此处N为有序集合中元素的个敎ͼ而M为将要移除的元素的个数。移除key对应的有序集合中rankg于start和stop之间的所有元素。start和stop均是?开始的Qƈ且两者均可以是负倹{当索引gؓ(f)负值时Q表明偏Udg有序集合中score值最高的元素开始。例如:(x)-1表示h最高score的元素,?2表示hơ高score的元素,以此cL?br />q回|(x)q回要U除的元素的个数?br />该命令自1.3.4版本后可用?/p>


11.ZREMRANGEBYSCORE
语法QZREMRANGEBYSCORE key min
max
说明Q该操作的时间复杂度为O(log(N)+M)Q此处N为有序集合中元素的个敎ͼ而M为将要移除的元素的个数。移除key对应的有序集合中scroe位于min和maxQ包含端点)之间的所哟元素。从2.1.6版本后开始,区间端点min和max可以被排除在外,q和ZRANGEBYSCORE的语法一栗?br />q回|(x)q回要U除的元素个数?br />该命令自1.1版本后可用?br />
12.ZREVRANGE
语法QZREVRANGE
key start stop
[WITHSCORES]
说明Q该操作的时间复杂度为O(log(N)+M)Q此处N为有序集合中元素的个敎ͼ而M为将要返回的元素的个数。返回key对应的有序集合中指定区间的所有元素。这些元素按照score从高C的顺序进行排列。对于具有相同的score的元素而言Q将?x)按照递减的字兔R序进行排列。该命o(h)与ZRANGEcMQ只是该命o(h)中元素的排列序与前者不同?br />q回|(x)指定区间内的元素的列表?br />该命令自1.1版本后可用?br />
13.ZREVRANGEBYSCROE
语法QZREVRANGEBYSCORE
key max min [WITHSCORES] [LIMIT offset
count]
说明Q该操作的时间复杂度为O(log(N)+M)Q此处N为有序集合中元素的个敎ͼM为将要返回的元素的个数。如果M是个帔RQ那么可以认为时间复杂度为O(log(N))?br />q回key对应的有序集合中score介于max和minQ包含score{于max或者min的元素)之间的所有元素。该命o(h)按照score从高C的顺序对元素q行排序。如果两个元素具有相同的scoreQ那么它们将?x)按照字兔R序进行排列。除L列顺序的不同QZREVRANGEBYSCORE命o(h)与ZRANGEBYSCORE命o(h)相同?br />q回|(x)指定score区间内的元素的列表?br />该命令自2.1.6版本后可用?br />
14.ZREVRANK
语法QZREVRANK
key
member
说明Q该操作的时间复杂度为O(log(N))。返回key对应的有序集合中member的烦引|元素按照从高C的顺序进行排列。rank|或称为烦引|是从0开始计数的Q因此具有最高score值的元素的rankgؓ(f)0。你可以使用ZRANK命o(h)来获取按照scroeg低到高顺序排列的元素的rank倹{?br />q回|(x)如果member在有序集合中存在Q那么返回gؓ(f)member的rank|如果member不存在或者key不存在,那么q回gؓ(f)nil?br />该命令自1.3.4版本后可用?br />
15.ZSCORE
语法QZSCORE
key
member
说明Q该命o(h)的时间复杂度为O(1)。返回key对应的有序集合中member的score倹{如果member在有序集合中不存在,那么会(x)q回nil?br />q回|(x)q回member的score|一个双_ֺ点数字Q,表示为字W串?br />该命令自1.1版本后可用?br />
16.ZUNIONSTORE
语法QZUNIONSTORE
destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE
SUM|MIN|MAX]
说明Q该操作的时间复杂度为O(N)+O(Mlog(M))Q此处N入有序集合的d,M为结果集合中元素的个数。对keys对应的numkeys个有序集合计合集,q将l果存储在destination中。在传递输入keys之前必须提供输入keys的个数和其它可选参数。在默认情况下,元素的结果score是包含该元素的所有有序集合中score的和。如果用WEIGHTS选项Q你可以Ҏ(gu)一个有序集合指定一个操作因子。这意味着每一个有序集合中的每个元素的score在传递给聚合函数之前均会(x)被乘以该因子。当WEIGHTS没有指定Ӟ操作因子默认??br />使用AGGREGATE选项Q你可以指定交集中的l果如何被聚合。该选项默认gؓ(f)SUMQ在q种情况下,一个元素的所有score值均?x)被相加。当选项被设|ؓ(f)MIN或MAXӞl果集合中将?x)包含一个元素的最大或者最的score倹{如果destination已经存在Q那么它?yu)?x)被重写?br />q回|(x)目标有序集合中的元素的个数?br />该命令自1.3.10版本后可用?/p>

强强 2012-06-19 12:48 发表评论
]]>
Redis命o(h)——Sets相关 http://www.tkk7.com/lyjjq/articles/381086.html强强强强Tue, 19 Jun 2012 04:46:00 GMThttp://www.tkk7.com/lyjjq/articles/381086.htmlhttp://www.tkk7.com/lyjjq/comments/381086.htmlhttp://www.tkk7.com/lyjjq/articles/381086.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/381086.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/381086.html

本文介绍Redis中与集合相关的命令,内容主要来源于Redis的官方网站,如有需要请参看Q?a >http://redis.io/commands#set?/p>

1.SADD
语法QSADD key
member
说明Q该操作的时间复杂度为O(1)。向存储在key上的集合中添加元素。如果该元素已经存在Q那么将不会(x)执行M操作。如果指定的key不存在,那么会(x)创徏一个新的集合,q且该集合中包含新添加的唯一一个元素。如果key对应的g是setcdQ那么将?x)发生错误?br />q回|(x)如果向集合中d了元素,那么q回gؓ(f)1Q如果member已经是该集合中的元素Q那么返回gؓ(f)0?br />该命令自0.07版本后可用?br />
2.SCARD
语法QSCARD
key
说明Q该操作的时间复杂度为O(1)。返回key对应的集合中所存储的元素个数?br />q回|(x)q回集合中的元素个数Q如果key不存在,那么q回gؓ(f)0?br />该命令自0.07版本后可用?br />
3.SDIFF
语法QSDIFF
key [key
...]
说明Q该操作的时间复杂度为O(N)Q此处N为包含在所有指定集合中元素个数。返回第一个集合与后箋所有集合中的元素的差集?br />q回|(x)l果集合的元素列表?br />该命令自0.100版本后可用?br />
4.SDIFFSTORE
语法QSDIFFSTORE
destination key [key
...]
说明Q该操作的时间复杂度为O(N)Q此处N为包含在所有指定集合中元素个数。该命o(h){同于SDIFFQ但是该命o(h)?x)将l果存储在destination中。如果目标已l存在,它将?x)被重写?br />q回|(x)l果集合中的元素个数?br />该命令自0.100版本后可用?br />
5.SINTER
语法QSINTER
key [key
...]
说明Q在最坏的情况下,该操作的旉复杂度ؓ(f)O(N*M)Q此处N为最的集合的元素个敎ͼ而M为所l集合的个数。返回所有指定集合的交集。如果keys不存在,那么它将被认为是I集合。如果指定的keys中有一个是I集合,那么l果集合也将为空集合?br />q回|(x)l果集合中的元素列表?br />该命令自0.07版本后可用?br />
6.SINTERSTORE
语法QSINTERSTORE
destination key [key
...]
说明Q该操作的时间复杂度为O(N*M)Q此处N为最的集合的元素个敎ͼ而M为所l集合的个数。该命o(h){同于SINTERQ但是该命o(h)q不直接q回l果集合Q而是其存储在destination中?br />如果目标集合已经存在Q那么它?yu)被重写?br />q回|(x)l果集合中的元素个数?br />该命令自0.07版本后可用?br />
7.SISMEMBER
语法QSISMEMBER
key
memeber
说明Q该操作的时间复杂度为O(1)。查看指定的member是否是key对应的集合中的元素?br />q回|(x)如果指定的member是集合中的元素,那么q回gؓ(f)1Q如果指定的元素不是集合中的元素Q或者key不存在,那么q回gؓ(f)0?br />该命令自0.07版本后可用?br />
8.SMEMBERS
语法QSMEMBERS
key
说明Q该操作的时间复杂度为O(N)Q此处N为集合的元素个数。返回存储在key上的集合中所有元素的个数。该命o(h)与具有一个参数的SINTER命o(h)效果相同?br />q回|(x)q回集合中的所有元素?br />该命令自0.07版本后可用?br />
9.SMOVE
语法QSMOVE
source destination
member
说明Q该操作的时间复杂度为O(1)。将元素member从集合source中移至destination中。该操作是原子性的。对别的客户端而言Q在每一个给定的时刻Q元素会(x)使source或者destination中的一员。如果source集合不存在或者没有包含指定的元素Q将不会(x)执行M操作Qƈ且返回gؓ(f)0。不然的话,元素会(x)从source中移除,q且d到destination中。当指定的元素已l在destination集合中存在时Q该元素仅仅?x)从source集合中移除。如果source或者destination对应的g是集合类型,那么会(x)发生错误?br />q回|(x)如果元素被移除,那么会(x)q回1Q如果指定的元素不是source中的一员ƈ且没有执行Q何操作,那么q回gؓ(f)0?br />该命令自0.091版本后可用?br />
10.SPOP
语法QSPOP
key
说明Q该操作的时间复杂度为O(1)。从key对应的集合中U除q返回一个随机的元素。该操作与SRANDMEMBERcMQ但是SRANDMEMBER?x)从集合中返回一个随机元素但是ƈ不移除它?br />q回|(x)q回被移除的元素Q如果key不存在,那么q回gؓ(f)nil?br />该命令自0.101版本后可用?br />
11.SRANDMEMBER
语法QSRANDMEMBER
key
说明Q该操作的时间复杂度为O(1)。返回key对应的集合中的一个随机元素。该操作与SPOPcMQ但是SPOP命o(h)?x)移除随机选择的元素,SRANDMEMBER仅仅是在不改变原有集合的基础上返回该随机元素?br />q回|(x)q回随机选取的元素,如果指定的key不存在,那么q回gؓ(f)nil?br />该命令自1.001版本后可用?br />
12.SREM
语法QSREM
key
member
说明Q从key对应的集合中U除指定的元素member。如果member不是集合中的一个元素,那么不执行M操作?br />如果key对应的值ƈ不是集合cdQ那么将?x)发生错误?br />q回|(x)如果元素被移除,那么q回gؓ(f)1Q如果member不是集合中的元素Q那么返回gؓ(f)0?br />该命令自0.07版本后可用?br />
13.SUNION
语法QSUNION
key [key
...]
说明Q该操作的时间复杂度为O(N)Q此处N为所有给定的集合中元素的L。返回所有给定集合元素的合集。如果指定的key不存在,那么会(x)被看作空集对待?br />q回|(x)l果集合中的元素列表?br />该命令自0.091版本后可用?br />
14.SUNINOSTORE
语法QSUNINOSTORE
destination key [key
...]
说明Q该操作的时间复杂度为O(N)Q此处N为给定集合中所有元素的L。该命o(h){同于SUNIONQ但是该操作q不q回l果集合Q而是结果存储在destination中。如果destination已经存在Q那么它?yu)?x)被重写?br />q回|(x)q回l果集合中元素的个数?/p>

强强 2012-06-19 12:46 发表评论
]]>
Redis命o(h)——Lists相关 http://www.tkk7.com/lyjjq/articles/381085.html强强强强Tue, 19 Jun 2012 04:45:00 GMThttp://www.tkk7.com/lyjjq/articles/381085.htmlhttp://www.tkk7.com/lyjjq/comments/381085.htmlhttp://www.tkk7.com/lyjjq/articles/381085.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/381085.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/381085.html本文介绍Redis中与Lists相关的命令,内容主要来源于Redis的官方网站,如有需要请查看Q?a >http://redis.io/commands#list?/h3>


1.BLPOP
语法QBLPOP key [key ...]
timeout
说明Q该操作的时间复杂度为O(1)。BLPOP是一个阻塞Ş式的列表POP操作原语。它是LPOP命o(h)的阻塞版本,因ؓ(f)在指定的列表中如果没有元素来弹出Q该命o(h)会(x)dq接。当存储在key上的列表非空ӞPOP操作会(x)从列表的首部弹出一个元素?br />非阻塞行为:(x)
当调用BLPOPӞ如果在指定的keys中至有一个存储有非空的列表,那么会(x)从该列表的首部弹Z个元素,q且q回l用戯key和相应的倹{在执行操作时将?x)按照给定的序(g)查指定的keys。假如存在三个keysQ分别ؓ(f)list1、list2和list3Qlist1相应的列表实际上q不存在Q而list2和list3上存储有非空的列表。如以下命o(h)Q?br />BLPOP
list1 list2
list3
BLPOP会(x)保从list2的首部返回一个元素?br />d行ؓ(f)Q?br />如果在指定的keys中没有一个包含非I的列表Q那么BLPOP会(x)dq接Q直到另外一个客L(fng)对其中的一个列表执行了一个LPUSH或者RPUSH操作?br />一旦新的数据出现在列表中,客户端将?x)返回接触阻塞的key的名U和弹出的倹{当BLPOP命o(h)引v一个客L(fng)dq且用户指定了非零的期旉Ӟ客户端在过期旉后将?x)解除阻塞ƈ且返回一个nil倹{timeout参数被解析ؓ(f)一个整型倹{一个ؓ(f)0的超期时间用于表C无限期d?br />多个客户端阻塞在相同的keys?br />多个客户端能够阻塞在相同的key上。它们将?x)被攑օ一个队列,q且?x)按照先来先服务的原则来执行操作?br />位于MULTI/EXEC事务中的BLPOP命o(h)
BLPOP可以与管道线QpipeliningQ结合用,但是却不适应应用在MULTI/EXEC块中使用BLPOP命o(h)。这会(x)d整个服务器以便能够原子性地执行该块Q在q种情况下另外的客户端无法执行push操作。位于MULTI/EXEC块中的BLPOP的行为是q回一个nil响应。就像超时时间的情况一栗?br />q回|(x)如果没有元素可以弹出q且出时旉Q那么返回gؓ(f)nilQ在正常情况下将?x)返回由两个元素l成的块Q其中第一个元素ؓ(f)指定的keyQ第二个元素为弹出的倹{?br />该命令自1.3.1版本后可用?br />
2.BRPOP
语法QBRPOP
key [key ...]
timeout
说明Q该操作的时间复杂度为O(1)。BRPOP是一个阻塞Ş式的列表弹出原语。它是RPOP命o(h)的阻塞版本,因ؓ(f)在指定的列表中如果没有元素存在,那么它将?x)阻塞连接。操作将?x)按照指定的序(g)查列表,q从W一个非I列表的N弹出一个元素。BRPOP操作大致与BLPOP元素相同Q但是BRPOP命o(h)从列表的N弹出元素?br />q回|(x)如果没有元素弹出q且时Q那么返回gؓ(f)nilQ在正常情况下将?x)返回由两个元素l成的块Q其中第一个元素ؓ(f)指定的keyQ而第二个元素为弹出的倹{?br />该命令自1.3.1版本后可用?/p>


3.BRPOPLPUSH
语法QBRPOPLPUSH source destination
timeout
说明Q该操作的时间复杂度为O(1)。BRPOPLPUSH命o(h)式RPOPLPUSH操作的阻塞版本。当source包含元素Ӟ命o(h)的行为同RPOPLPUSH命o(h)一致。当source为空ӞRedis会(x)dq接Q直到另外一个客L(fng)对source执行了一个push操作或者超时时间。一个ؓ(f)零的时旉会(x)无限期阻塞?br />q回|(x)在正常情况下?x)返回从source弹出q且压入destination中的元素。如果超期时_(d)会(x)q回一个null响应?br />该命令自2.1.7版本后可用?br />
4.LINDEX
语法QLINDEX
key
index
说明Q该操作的时间复杂度为O(N)Q此处N是ؓ(f)得到位于index处得元素要遍历的元素的个数。如果是得到列表中第一个或者最后一个元素,那么旉复杂度ؓ(f)O(1)?br />该操作将?x)返回存储在key上的列表中位于index处得元素。index的g0开始,因此0意味着首元素,1表示列表中的W二个元素。如果indexgؓ(f)负,那么会(x)从列表的Nq行遍历。此处,-1代表最后一个元素,-2代表倒数W二个元素,以此cL。当存储在key上的g是列表时Q将?x)返回错误?br />q回|(x)q回h的元素,如果index出范围Q那么返回值将为nil?br />该命令自0.07版本后可用?br />
5.LINSERT
语法QLINSERT
key BEFORE|AFTER pivot
value
说明Q该操作的时间复杂度为O(N)Q此处N为在扑ֈ枢upivot前需要遍历的元素个数。这意味着元素插入到列表左端的时间复杂度可以认ؓ(f)为O(1)Q而插入右端的旉复杂度ؓ(f)O(N)。插入存储在key上的列表的值可以位于pivot的左侧或者右侧。如果指定的key不存在时Q那么它?yu)?x)被认作一个空列表Qƈ不执行Q何操作。如果指定的key存在Q但是所持有的g是列表时Q将?x)返回一个错误?br />q回|(x)该操作将?x)返回插入操作完成后的列表的长度Q如果枢轴没有找刎ͼ那么会(x)q回-1?br />该命令自2.1.1版本后可用?br />
6.LLEN
语法QLLEN
key
说明Q该操作的时间复杂度为O(1)。返回存储在key上的列表的长度。如果key不存在,那么会(x)被认作一个空列表Qƈ且返回者ؓ(f)0。如果存储在key上的g是列表,那么会(x)q回一个错误?br />q回|(x)存储在key上的列表的长度?br />该命令自0.07版本后可用?br />
7.LPOP
语法QLPOP
key
说明Q该操作的时间复杂度为O(1)。移除ƈq回存储在key上的列表的首元素?br />q回|(x)列表的首元素Q如果指定的key不存在,那么q回gؓ(f)nil?br />该命令自0.07版本后可用?br />
8.LPUSH
语法QLPUSH
key
value
说明Q该操作的时间复杂度为O(1)。在存储在key上的列表的首部插入一个元素。如果指定的key不存在,那么该命令在正式执行前将?x)创Z个空列表。如果key对应的g是列表类型,那么会(x)q回一个错误?br />q回|(x)q回插入操作完成后列表的长度?br />该命令自0.07版本后可用?br />
9.LPUSHX
语法QLPUSHX
key
value
说明Q该操作的时间复杂度为O(1)。如果指定的key存在Qƈ且对应的gؓ(f)列表cdӞ那么在该列表的首部插入一个元素。与LPUSH相反Q如果key不存在,那么不?x)进行Q何操作?br />q回|(x)操作执行完成后列表的长度?br />该命令自2.1.1版本后可用?br />
10.LRANGE
语法QLRANGE
key start
stop
说明Q该操作的时间复杂度为O(S+N)Q此处S为开始元素的偏移Q而N为指定区间的元素的个数。返回存储在key上的指定元素。开始元素的偏移值和stop的烦引值均是以0开始,q且0代表列表中的W一个元素,?代表W二个元素,以此cL?br />偏移值可以是负|表示从列表的N开始。例如,-1代表列表的最后一个元素,?2代表列表中的倒数W二个元素。需要注意的是:(x)如果有一个列表,元素~号Z0?00Q那么LRANGE
list 0
10会(x)q回11个元素,也就是说Q该操作?x)包含列表中最后端的元素?br />索引界Q越界烦引将不会(x)引发错误。如果开始D出列表的范围Q或者start的值大于end的|那么会(x)q回一个空列表。如果end出列表的范_(d)那么Redis会(x)其作ؓ(f)列表中的最后一个元素对待?br />q回|(x)q回指定区域中的元素的列表?br />该命令自0.07版本后可用?br />
11.LREM
语法QLREM
key count
value
说明Q该命o(h)的时间复杂度为O(N)Q此处N为列表的长度。在key对应的列表中删除前count个其gؓ(f)value的元素。count的g(x)按照如下方式来媄响操作:(x)
Q?Qcount
> 0Q从列表首部开始移除其gؓ(f)value的count个元?br />Q?Qcount <
0Q从列表N开始移除其gؓ(f)value的|count|个元?br />Q?Qcount =
0Q移除所有其gؓ(f)value的元?br />需要注意的是:(x)不存在的key?x)被当作I列表存在。因此,如果key不存在,那么该命令将?x)始l返??br />q回|(x)q回U除的元素的个数?br />该命令自0.07版本后可用?br />
12.LSET
语法QLSET
key index
value
说明Q时间复杂度为O(N)Q此处N为列表的长度。设|列表中W一个或者最后一个元素的旉复杂度ؓ(f)O(1)。将列表中index处的D|ؓ(f)value。如果index出列表的返回,那么发生错误?br />q回|(x)状态码?br />该命令自0.07版本后可用?br />
13.LTRIM
语法QLTRIM
key start
stop
说明Q该操作的时间复杂度为O(N)Q此处N为操作将要移除的元素的个数。对一个已l存在列表进行LTRIM操作会(x)使得列表仅仅包含指定区间中的元素。start和stop的烦引值均是以0开始的Q这?表示列表中的W一个元素,1表示W二个元素,以此cL。start和stop可以是负|q意味着从偏Ud是从列表的N开始,q里-1表示列表中的最后一个元素,?2表示倒数W二个元素,以此cL。超出界限的索引值ƈ不会(x)产生错误Q如果start的D出列表的范围Q或者start
>
endQ那么将?x)返回一个空列表。如果end出列表的界限,那么Redis会(x)其视作列表的最后一个元素?br />q回|(x)状态码?br />该命令自0.07版本后可用?br />
14.RPOP
语法QRPOP
key
说明Q该操作的时间复杂度为O(1)。移除ƈq回存储在key上的列表中的最后一个元素?br />q回|(x)最后一个元素的|如果key不存在,那么q回gؓ(f)nil?br />该命令自0.07版本后可用?br />
15.RPOPLPUSH
语法QRPOPLPUSH
source
destination
说明Q该操作的时间复杂度为O(1)。原子性地q回q移除存储在source列表中的最后一个元素,q将其压入由destination指定的列表中。如果source不存在,那么不?x)进行Q何操作,q且q回gؓ(f)nil。如果source和destination相同Q操作等同于列表的最后一个元素移臛_表的首部。因此,可以该命o(h)看作是列表的轮{操作?br />q回|(x)弹出/压入的元素?br />该命令自1.1版本后可用?br />
16.RPUSH
语法QRPUSH
key
value
说明Q该操作的时间复杂度为O(1)。将元素插入存储在key上的列表的尾部。如果key不存在,那么在执行操作之前会(x)创徏一个空列表。如果key对应的g是列表,那么会(x)发生错误?br />q回|(x)q回操作完成后列表的长度?br />该命令自0.07版本后可用?br />
17.RPUSHX
语法QRPUSHX
key
value
说明Q该操作的时间复杂度为O(1)。如果key存在q且其gؓ(f)列表Q那么将value插入该列表的N。如果key不存在,那么不q行M操作?br />q回|(x)q回操作完成后列表的长度?br />该命令自2.1.1版本后可用?/p>



强强 2012-06-19 12:45 发表评论
]]>
Redis命o(h)——哈希(HashesQ相?http://www.tkk7.com/lyjjq/articles/381084.html强强强强Tue, 19 Jun 2012 03:34:00 GMThttp://www.tkk7.com/lyjjq/articles/381084.htmlhttp://www.tkk7.com/lyjjq/comments/381084.htmlhttp://www.tkk7.com/lyjjq/articles/381084.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/381084.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/381084.html本文主要介绍Redis中有兛_希的操作命o(h)Q内容主要来源于Redis的官方网站。如有需要请参考Redis的官方网站:(x)http://redis.io/commands#hash?/span>

1.HDEL
语法QHDEL key
field
说明Q该操作的时间复杂度为O(1)。移除存储在key上的哈希中的指定域?br />q回|(x)如果在哈希中存在指定的域q且被移除,q回gؓ(f)1Q如果指定的域不存在或者key不存在,q回gؓ(f)0?br />该命令自1.3.10版本后可用?br />
2.HEXISTS
语法QHEXISTS
key
field
说明Q该操作的时间复杂度为O(1)。查看存储在key上的哈希中是否存在指定的域?br />q回|(x)如果哈希中包含指定的域,那么q回gؓ(f)1Q如果哈希中不包括指定的域或者key不存在,那么q回gؓ(f)0?br />该命令自1.3.10版本后可用?br />
3.HGET
语法QHGET
key
field
说明Q该操作的时间复杂度为O(1)。返回存储在key上的哈希中与field域关联的倹{?br />q回|(x)q回与field域关联的|如果在哈希中该域不存在或者key不存在,那么q回者ؓ(f)nil?br />该命令自1.3.10版本后可用?br />
4.HGETALL
语法QHGETALL
key
说明Q该操作的时间复杂度为O(N)Q此处N为hash的大。返回存储在key上的哈希中所有的域和相关联的倹{在q回gQ每一个域的名U后面会(x)跟着相关联的倹{因此,响应l果的长度是hash的大的两倍?br />该命令自1.3.10版本后可用?br />
5.HINCRBY
语法QHINCRBY
key field
increment
说明Q该操作的时间复杂度为O(1)。将存储在key上的哈希中field域相兌的值加上由increment指定的倹{如果key不存在,那么会(x)创徏该keyQƈ且其gؓ(f)hashcd。如果field域不存在或者具有一个不能表CZؓ(f)整型的字W串的|那么在执行该操作前会(x)该D|ؓ(f)0。HINCRBY支持的数据范围限定在64为有W号整数范围内?br />q回|(x)q回增量操作完成后field域所兌的倹{?br />该命令自1.3.10版本后可用?br />
6.HKEYS
语法QHKEYS
key
说明Q该操作的时间复杂度为O(N)Q此处N为hash的大。返回存储在key上的哈希中所有域的名U?br />该命令自1.3.10版本后可用?br />
7.HLEN
语法QHLEN
key
说明Q该操作的时间复杂度为O(1)。返回存储在key上的哈希中所包含的所有域的数目?br />q回|(x)q回hash中字D늚数目Q如果key不存在,那么q回gؓ(f)0?br />该命令自1.3.10版本后可用?br />
8.HMGET
语法QHMGET
key field [field
...]
说明Q该操作的时间复杂度为O(N)Q此处Nh的字D늚数目。返回存储在key上的哈希中各个指定域相关联的倹{对于在哈希中不存在的域Q返回gؓ(f)nil。因Z个不存在的key被当做是I哈希对待,对一个不存在的keyq行HMGET操作会(x)q回一个nil值的列表?br />q回|(x)与指定域相关联的值的列表Qƈ且按照它们被h的顺序给出?br />该命令自1.3.10版本后可用?br />
9.HMSET
语法QHMSET
key field value [field value
...]
说明Q该操作的时间复杂度为O(N)Q此处N为将要被讄其值的域的个数。设|存储在key上的哈希中指定域的倹{该命o(h)?x)复写哈希中已经存在的域。如果key不存在,那么会(x)创徏一个其gؓ(f)哈希cd的新key?br />q回|(x)q回状态码?br />该命令自1.3.8版本后可用?br />
10.HSET
语法QHSET
key field
value
说明Q该操作的时间复杂度为O(1)。设|存储在key上的哈希中指定域的倹{如果key不存在,那么会(x)创徏一个持有哈希值的新key。如果指定的域在哈希中已l存在,那么其值将?x)被重写?br />q回|(x)如果哈希中的域是一个新域ƈ且其D讄Q那么返回gؓ(f)1Q如果哈希中已经存在该域q且该域被更斎ͼ那么q回gؓ(f)0?br />该命令自1.3.10版本后可用?br />
11.HSETNX
语法QHSETNX
key field
value
说明Q该操作的时间复杂度为O(1)。在指定域不存在的情况下Q设|存储在key上的哈希中该域的倹{如果该key不存在,那么会(x)创徏一个持有哈希值的新key。如果指定的域已l存在,那么该操作不起作用?br />q回|(x)如果指定的域在哈希中是一个新域ƈ且其D讄Q那么返回gؓ(f)1Q如果哈希中该域已经存在Q那么该命o(h)不v作用?br />该命令自1.3.8版本后可用?br />
12.HVALS
语法QHVALS
key
说明Q该操作的时间复杂度为O(N)Q此处N为哈希的大小。返回存储在key上的哈希中存储的所有倹{?br />q回|(x)q回哈希中存储的值的列表Q如果该key不存在,那么会(x)q回一个空列表?br />该命令自1.3.10版本后可用?/span>



强强 2012-06-19 11:34 发表评论
]]>
Redis命o(h)——字W串相关 http://www.tkk7.com/lyjjq/articles/381083.html强强强强Tue, 19 Jun 2012 03:33:00 GMThttp://www.tkk7.com/lyjjq/articles/381083.htmlhttp://www.tkk7.com/lyjjq/comments/381083.htmlhttp://www.tkk7.com/lyjjq/articles/381083.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/381083.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/381083.html1.APPEND
语法QAPPEND key
value
说明Q该操作的时间复杂度为O(1)。在假定被附加的值很ƈ且已l存在的值可以是L大小的情况下Q^均下来该操作的时间复杂度为O(1)。因为Redis所使用的动态字W串库在每次重新分配I间时均?x)将可用I间加倍?br />该命令在key兌的值已l存在ƈ且是字符串类型的情况下,会(x)把指定的值附加到已有字符串的N。如果keyq不存在Q它?yu)?x)被创建ƈ且被讄为空丌Ӏ因此,APPEND命o(h)在这U情况下与SET命o(h)cM?br />q回|(x)q回命o(h)完成后字W串的长度?br />该命令自1.3.3版本后可用?br />
2.DECR
语法QDECR
key
说明Q该操作的时间复杂度为O(1)。该命o(h)存储在key上的数字值减1。如果该key不存在,在进行该操作前将?x)将其设|ؓ(f)O。如果与key相关联的值具有错误的数据cd或者包含一个不能{换ؓ(f)整数的字W串Ӟ该操作将?x)出现错误。该操作只针对于64位有W号整数。与之相对应的命令ؓ(f)INCR?br />q回|(x)q回?操作完成后的倹{?/span>

如果该key所包含的值的数据cd不符合要求,?x)返回如下错误信息?x)




该命令自0.0.7版本后可用?br />
3.DECRBY
语法QDECRBY key
decrement
说明Q该操作的时间复杂度为O(1)。将存储在key上的值减ȝdecrement指定的数。如果该key不存在,在进行操作前?x)将其设|ؓ(f)0。如果与key相关联的值具有错误的数据cd或者包含一个不能{换ؓ(f)整数的字W串Ӟ该操作将?x)出现错误。该操作只针对于64位有W号整数?br />q回|(x)q回减去指定值后的倹{?br />该命令自0.0.7版本后可用?br />
4.GET
语法QGET
key
说明Q该操作的时间复杂度为O(1)。获取存储在key上的倹{如果keyq不存在Q将?x)返回nil。如果存储在key上的值的数据cdqstringcdQ那么将?x)出现错误,因?f)GET仅仅处理stringcd的倹{?/span>


q回|(x)存储在key上的|如果该key不存在,那么q回gؓ(f)nil?/span>


如果该key上存储的值的数据cd不符合要求,那么?x)返回如下出错信息?x)




该命令自0.0.7版本后可用?br />
5.GETBIT
语法QGETBIT key
offset
说明Q该操作的时间复杂度为O(1)。返回存储在key上的字符串在offset偏移处的所h的位倹{?br />如果指定的偏UdDZ字符串的长度Q后l字W串被视作由0填充的一片连l空间。如果指定的key不存在,那么被视ؓ(f)一个空Ԍ在这U情况下Q偏UdM(x)出范围q且其值可以看作是?填充的一片连l空间?br />q回|(x)q回在offset偏移处的位倹{?/span>


该命令的典型输入如下所C:(x)




该命令自2.1.8版本后可用?br />



6.GETRANGE
语法QGETRANGE key start
end
说明Q时间复杂度为O(N)Q此处N为需要返回的字符串的长度。时间复杂度最l由q回的长度决定,因ؓ(f)从已l存在的字符串中创徏一个子串代价很低,可以认ؓ(f)对于较小的字W串而言旉复杂度ؓ(f)O(1)

。需要注意的是:(x)该命令被重新命名为GETRANGEQ在Redis
2.0版本之前Q该命o(h)被称作SUBSTR。该命o(h)q回存储在key上的字符串的特定子串Q子串的范围有start和end两个偏移值指定,q且均包含端炏V在该命令中可以指定负的偏移|此时偏移g字符串尾部开始计。因此,-1意味着最后一个字W,-2意味着倒数W二个字W?br />如果指定的偏UdDZ字符串固有的长度Q那么命令将?x)限定结果的范围为字W串的真实长度?br />q回|(x)q回取到的子丌Ӏ?br />该命令自1.3.4版本后可用?br />
7.GETSET
语法QGETSET
key
value
说明Q该操作的时间复杂度为O(1)。原子性地key上存储的D|ؓ(f)valueQƈ且返回原有的倹{如果key存在但是所存储的值ƈ不是字符串类型,那么会(x)q回错误?/span>


q回|(x)q回存储在key上的原有|如果该key不存在,那么q回gؓ(f)nil?/span>


该命令的典型输出如下所C:(x)




该命令自0.091版本后可用?br />
8.INCR
语法QINCR
key
说明Q该操作的时间复杂度为O(1)。将存储在key上的值加1。如果该key不存在,在进行操作前?x)将其设|ؓ(f)0。如果与key相关联的值具有错误的数据cd或者包含一个不能{换ؓ(f)整型的字W串Q那么将?x)返回一个错误。该操作只针对于64为有W号数。需要注意的是:(x)q是一个字W串操作Q因为Redis中ƈ没有一个专门的整型数据cd。存储在key上的字符串被解析Z个十q制?4位有W号整型以便执行该操作。Redis中对整数以他们的整型表C存储,因此对于实际上表CZ个整数的字符串|依然?x)按照整形数据进行存储?br />q回|(x)q回?操作完成后的倹{?br />该命令自0.07版本后可用?br />
9.INCRBY
语法QINCRBY
key
increment
说明Q该操作的时间复杂度为O(1)。对存储在key上的值加上increment指定的倹{如果该key不存在,在执行该操作之前?x)先其讄?Q然后再执行该操作。如果存储在该key上的值具有错误的数据cd或包含一个不能{换ؓ(f)整型的字W串|那么会(x)q回一个错误。该操作只针?4位有W号整数?br />q回|(x)q回操作完成后的倹{?br />该命令自0.07版本后可用?br />
10.MGET
语法QMGET
key [key
...]
说明Q该操作的时间复杂度为O(N)Q这里N表示要取回的key的个数。返回存储在指定keys上的倹{对于每一个其值的数据cd不是字符串类型或者不存在的keyQ返回值将?x)?f)nil。因此,执行该操作ƈ不会(x)出现p|的情c(din)?br />q回|(x)存储在指定keys上的值的列表?br />该命令自0.07版本后可用?br />
11.MSET
语法QMSET
key value [key value
...]
说明Q该操作的时间复杂对为O(N)Q此处N为将要设|其值的key的个数。对指定的keys讄相应的倹{与SET命o(h)一PMSET会(x)使用新值替代原有的|MSET操作是原子性的Q因此所有指定的keys会(x)在一ơ操作过E中讄完成?br />q回|(x)q回值Mؓ(f)OKQ因为MSET命o(h)不会(x)p|?br />该命令自1.001版本后可用?br />
12.MSETNX
语法QMSETNX
key value [key value
...]
说明Q该操作的时间复杂度为O(N)Q此处N为将要设|其值的keys的个数。将l定的keys讄为相应的倹{如果指定的keys中Q何一个已l存在,那么该操作将不会(x)被执行。因此,MSETNX可以用来对唯一的逻辑对象中的表示不同字段的keys讄其|以便能够保q些字段要么全部被成功设|要么均不会(x)被设|。MSETNX操作是原子性的Q因此所有的keys会(x)在一ơ操作过E中被设|?br />q回|(x)如果所有的keys的值均被设|,那么q回gؓ(f)1Q如果没有key被设|其|那么q回gؓ(f)0?br />该命令自1.001版本后可用?br />
13.SET
语法QSET
key
value
说明Q该操作的时间复杂度为O(1)。对指定key讄一个字W串倹{如果该key已经h|该值将?x)被重写而不它的数据类型?br />q回|(x)q回值LOKQ因为SET操作不会(x)p|?br />该命令自0.07版本后可用?br />
14.SETBIT
语法QSETBIT
key offset
value
说明Q该操作的时间复杂度为O(1)。设|或者清除存储在key上的字符串在指定偏移处的位倹{命令中的value可以指定?或?Q根据value的不同,位值可以被讄或者被清除。当该key不存在时Q将?x)创Z个新的字W串的倹{字W串的长度可以增长以便能够包含offset偏移处的倹{命令中的offset的值需要大于或者等?Q但是需要小?32。这?x)将位图QbitmapsQ的大小限定?12MB以内。当存储在该key上的字符串被扩展Ӟ增加的位会(x)被设|ؓ(f)0。需要注意的是,当设|最后一个可能的位(偏移值等?32-1Qƈ且存储在该key上的字符串Dq没包含字符串值或者包含长度较?yu)的字符串值时QRedis需要重新分配中间内存,q可能会(x)d服务器一D|间。一旦第一ơ分配空间分配完成后Q对相同keys后箋的SETBIT调用不再有I间分配的开销?br />q回|(x)q回在offset偏移处的原有的位倹{?br />该命令自2.1.8版本后可用?br />
15.SETEX
语法QSETEX
key seconds
value
说明Q该操作的时间复杂度为O(1)。设|key上存储的gؓ(f)valueQƈ且该key在给定的secondsU后时。该命o(h){同于如下的命o(h)Q?/span>


SET mykey value
EXPIRE mykey
seconds
SETEX操作是原子性的Qƈ且可以用位于MULTI/EXEC块中的上qC条命令来取代。该命o(h)提供了对指定操作序列的一U替代方式,因ؓ(f)q一操作在Redis用作~存时用非常普遍?br />q回|(x)q回Redis的状态码?br />该命令自1.3.10版本后可用?br />
16.SETNX
语法QSETNX
key
value
说明Q该命o(h)的时间复杂度为O(1)。如果指定的key不存在,那么其D|ؓ(f)一个字W串。在q种情况下,该命令等同于SET。当在key上已l存储有值时Q将不进行Q何操作。SETNX可以看作?#8220;SET
if Not
eXists”的羃写?br />q回|(x)如果该key的D讄Q返回gؓ(f)1Q如果该key没有被设|,那么q回gؓ(f)0?br />该命令自0.07版本后可用?br />
17.SETRANGE
语法QSETRANGE
key offset
value
说明Q该操作的时间复杂度为O(1)Q其中ƈ不包括拷贝新串的旉开销。通常情况下,字符串长度很,因此q_下来旉复杂度可以看作是O(1)。不然的话,旉复杂度ؓ(f)O(M)Q此处M的gؓ(f)指定的value的长度。存储在key上字W串被重写的部分从指定的offset位值开始,长度与value所h的长度相同。如果offset大于当前字符串的长度Q字W串会(x)使用0来补充以侉K应指定的offset。如果指定的key不存在,那么存储在其上的D认ؓ(f)是空Ԍ因此该命令将?x)确保该key?x)持有一个够大的字W串以便能够讄其在offset偏移处的倹{需要注意的是:(x)你可以设|的最大的偏移gؓ(f)229-1Q因为Redis字符串的大小被限定在512MB以内。如果你希望出该范_(d)你可以用多个keys?br />q回|(x)q回该命令完成后字符串的长度?br />该命令自2.1.8版本后可用?br />
18.STRLEN
语法QSTRLEN
key
说明Q该操作的时间复杂度为O(1)。返回存储在key上的字符串的长度。如果在该key上存储的g是字W串cdQ那么将q回一个错误?br />q回|(x)q回存储在key上的字符串的长度Q如果该key不存在,那么q回gؓ(f)0?br />该命令自2.1.2版本后可用?/span>



强强 2012-06-19 11:33 发表评论
]]>
Redis命o(h)——Keys相关 http://www.tkk7.com/lyjjq/articles/381082.html强强强强Tue, 19 Jun 2012 03:29:00 GMThttp://www.tkk7.com/lyjjq/articles/381082.htmlhttp://www.tkk7.com/lyjjq/comments/381082.htmlhttp://www.tkk7.com/lyjjq/articles/381082.html#Feedback0http://www.tkk7.com/lyjjq/comments/commentRss/381082.htmlhttp://www.tkk7.com/lyjjq/services/trackbacks/381082.html 

以下为Redis中有关Keys操作的一些命令,内容主要来源于Redis的官Ҏ(gu)。如有需要,请参阅Redis的官Ҏ(gu):(x)http://redis.io/commands#generic?/p>

 1.DEL
语法QDEL key [key
...]
说明Q移除指定的keysQ如果该key不存在则会(x)被忽略。该操作的时间复杂度为O(N)Q这里N为将要移除的keys的个数。当要U除的key对应除字W串cd外其它类型的值时Q对该keyq行操作的时间复杂度为O(M)QM为列表(listQ、集合(setQ、有序集合(sorted
setQ或者哈希(hashQ中所包含元素的个数。移除对应gؓ(f)字符串类型的单个key的时间复杂度为O(1)?br />q回|(x)要U除的keys的个数?br />该命令自0.07版本后可用?/p>

2.EXISTS
语法QEXISTS
key
说明Q判断指定的key是否存在。该操作的时间复杂度为O(1)?br />q回|(x)如果指定的key存在Q则q回gؓ(f)1Q否则返回gؓ(f)0?br />该命令自0.0.7版本后可用?/p>

3.EXPIRE
语法QEXPIRE
key
seconds
说明Q设|指定key的超时时_(d)时后该key会(x)被自动删除。该操作的时间复杂度为O(1)。在Redis中,如果一个key与某个超时时间相兌Q那么该key被UCؓ(f)是易qQvolatileQ。在2.1.3版本之前Q已l存在的时旉是不能被重写的。因此,如果一个key已经兌了某个过期时_(d)那么该命令将不会(x)起作用ƈ且返回gؓ(f)0。但是自2.1.3版本后,Redis允许更新一个key的超时时间。另外,你可以用PERSIST命o(h)来移除一个key相关联的时旉?br />q回|(x)如果成功讄了超时时_(d)那么q回gؓ(f)1Q如果该key不存在或者不能够讄时旉Q那么返回gؓ(f)0?/p>

 

该命令自0.0.9版本后可用?/p>

4.EXPIREAT
语法QEXPIREAT key
timestemp
说明Q该操作的时间复杂对为O(1)。该命o(h)与EXPIRE命o(h)有着相同的语义和效果Q二者唯一的差别是QEXPIREAT命o(h)中指定的q不是表CTTLQTime
To
LiveQ的U数Q而是一个确定的UNIX旉戻I卌1970q??日之后的U数Q?br />q回|(x)如果成功讄了超时时_(d)那么q回gؓ(f)1Q如果该key不存在或者不能够讄时旉Q那么返回gؓ(f)0?

 

 


该命令自1.1版本后可用?/p>

5.KEYS
语法QKEYS
pattern
说明Q返回与指定模式相匹配的所用的keys。该操作的时间复杂度为O(N)QN为数据库中所拥有的keys的个敎ͼq假设数据库中keys的名UCl定的匹配模式均h有限的长度。虽然该操作的时间复杂度为O(N)Q但是此处时间复杂度的常量系数相当低。需要注意的是:(x)在生产环境中使用该命令需要特别注意,该命令在对规模较大的数据库进行操作时可能?x)损x能。该命o(h)主要是设计用来进行调试和q行Ҏ(gu)的操作,例如更改keyspace的布局QlayoutQ等?

 

该命令所支持的匹配模式如下:(x)
Q?Q?Q用于匹配单个字W。例如,h?llo可以匚whello、hallo和hxllo{;
Q?Q?Q用于匹配零个或者多个字W。例如,h*llo可以匚whllo和heeeello{;
Q?Q[]Q可以用来指定模式的选择区间。例如h[ae]llo可以匚whello和halloQ但是不能匹配hillo?br />同时Q可以?#8220;/”W号来{义特D的字符

 

例如Q用如下命令可以查看数据库中的所有keysQkeys *


 


q回|(x)q回匚w指定模式的keys的列表?


该命令自0.0.7版本后可用?/p>

6.MOVE
语法QMOVE key
db
说明Q将指定的key从当前选择的数据库Q用SELECT命o(h)Q移动到目标数据库,该操作的旉复杂度ؓ(f)O(1)。当该key在目标数据库中已l存在或者它在源数据库中q不存在Ӟ该命令将不进行Q何操作。基于此可以该命o(h)用作一个锁定的原语操作Qlocking
primitiveQ?


q回|(x)如果该key被移至目标数据库Q那么返回gؓ(f)1Q如果该key未被UdQ那么返回gؓ(f)0?

 

该命令自0.0.7版本后可用?/p>

7.OBJECT
语法QOBJECT
subcommand [arguments [arguments
...]]
说明Q对于现阶段已经实现的子命o(h)而言Q时间复杂度均ؓ(f)O(1)。该命o(h)允许用户查看与keys相关联的Redis对象的内部信息。对于调试或者理解keys是否正在使用Ҏ(gu)~码的数据类型以便节省空_(d)该命令非常有用。在使用Redis作ؓ(f)~存Ӟ你的应用E序可能需要用OBJECT命o(h)q回的信息来实现应用层次的keyq{略Qeviction
policiesQ?br />该命令支持多U子命o(h)Q如下所C:(x)
Q?QOBJECT REFCOUNT
<key>Q返回对与指定key相关联的值的引用个数。该命o(h)对用戯行调试非常有帮助Q?br />Q?QOBJECT ENCODING
<key>Q返回用于存储与指定key相关联的值的内部表示cdQ?br />Q?QOBJECT IDLETIME
<key>Q返回与key相关联的D存储以来处于I闲状态(IDLEQ的U数Q未被read或write{操作所hQ。计时器的时间粒度ؓ(f)10U,该值在后箋版本中可能会(x)发生变化?br />对象可以使用如下不同的方式进行编码:(x)
Q?Qstring可以按照正常的字W串~码格式q行存储或者用intcdQ表C?4位有W号数区间中整数的字W串可以按照q种方式q行~码以便节省存储I间Q;
Q?Qlists可以被编码ؓ(f)ziplist或者linkedlist格式。对于规模较?yu)的链表而言Q可以用ziplist来表CZ便节省存储空_(d)
Q?Qsets可以被编码ؓ(f)intset或者hashtable格式。intset作ؓ(f)一U特别的~码方式可以用于仅有整数构成的规模较?yu)的集合中?br />Q?Qhashes可以被编码ؓ(f)zipmap或者hashtable。zipmap可以用于对规模较?yu)的hashesq行~码Q?br />Q?Qsorted
sets可以~码为ziplist或者skiplist。对于listcdQ规模较?yu)的有序集合Qsorted
setsQ可以用ziplistq行~码Q而skiplist可以用于对Q何大的有序集合q行~码?br />需要注意的是:(x)你一旦执行了一U得Redis无法保持能够节约存储I间的编码方式的操作后,所有特D编码的cd会(x)被自动{换ؓ(f)普通类型?br />q回|(x)对于不同的子命o(h)会(x)有不同的q回倹{?br />Q?Q对于refcount和idletime子命令,q回gؓ(f)整型QintegersQ?br />Q?Q对于encoding子命令将?x)返回一个块回复Qbulk
replyQ?br />Q?Q如果你要查看的object已经丢失Q那么将?x)返回一个null块?


可以通过如下实例q行试Qlpush mylist “hello world”

 

 


通过上述试可以了解刎ͼRedis
2.2.6版本中对对象处于IDLE状态的旉l计的时间粒度ؓ(f)10U?br />该命令自2.2.3版本后可用?/p>

8.PERSIST
语法QPERSIST
key
说明Q移除与key相关联的时旉。该操作的时间复杂度为O(1)?br />q回|(x)如果时旉被移除,那么q回者ؓ(f)1Q如果该key不存在或者没有与之相兌的超时时_(d)那么q回值将?.

 

该命令自2.1.2版本后可用?/p>

9.RANDOMKEY
语法QRANDOMKEY
说明Q从当前选择的数据库中返回一个随机的key。该操作的时间复杂度为O(1)?br />q回|(x)q回随机keyQ如果数据库为空Ӟ那么返回nil?

 

该命令的实例如下所C:(x)


 
该命令自0.0.7版本后可用?

 

10.RENAME
语法QRENAME key
newkey
说明Q将指定的key命名为newkey。该操作的时间复杂度为O(1)。当源和目标的名U相同或指定的key不存在时Q将?x)返回一个错误。如果newkey已经存在Ӟ它将?x)被重写?br />q回|(x)q回Redis定义的状态码?br />该命令自0.0.7版本后可用?/p>

11.RENAMENX
语法QRENAMENX
key
newkey
说明Q在newkey不存在的情况下将key命名为newkey。如果源和目标的名称相同或者指定的key不存在时q回一个错误。该操作的时间复杂度为O(1)?

 

q回|(x)如果key被命名ؓ(f)newkeyQ那么返回gؓ(f)1Q如果newkey已经存在Q那么返回gؓ(f)0?br />该命令自0.0.7版本后可用?/p>

12.SORT
语法QSORT
key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC]
[ALPHA] [STORE destination]
说明Q返回或按key存储包含在列表(listQ、集合(setQ或者有序集合(sorted
setQ中的元素。该操作的时间复杂度为O(N+M*log(M))Q此处N是将要排序的列表QlistQ或者集合(setQ中元素的个敎ͼ而M为将要返回的元素个数。在元素未被排序Ӟ复杂度在现阶D|O(N)。在下一个发行版本中Q其中的拯q一步骤会(x)被避免?br />在默认情况下Q排序是数字型的Qƈ且元素通过他们的D行比较,D解释为双_ֺ点数?br />假设mylist是一l数字的列表Q最单的SORT命o(h)形式如下所C:(x)
SORT
mylist


假设mylist中存储有1-10q些|使用该命令会(x)有如下的输出l果Q?

 

 

如果你希望用降序顺序来排列元素Q可以用DESC修饰W,如下所C:(x)
SORT mylist
DESC
当mylist中包含字W串q且你希望用字母顺序进行排列时Q可以用ALPHA修饰W,如下所C:(x)
SORT mylist
ALPHA


使用该命令后Q会(x)有以下输出结果:(x)

 


q回元素的个数可以通过LIMIT修饰W进行限制。用该修饰W时需要指定v始元素的偏移值和要q回的元素的L。如下所C:(x)
SORT mylist
LIMIT 0
5
通过外部keysq行排序
有时候你希望通过使用外部keys作ؓ(f)权Dƈ非比较列表(listQ、集合(setQ或者有序集合(sorted
setQ中的真实元素来q行排序。例如,假如
列表mylist中包含元???Q分别表C存储在object_1、object_2和object_3中对象的唯一ID。当q些对象h存储在weight_1、weight_2和weight_3中的相关联的权值时QSORT可以使用q些权值来排序mylist。如下所C:(x)
SORT
mylist BY
weight_*
BY选项选用了一个模式(本例中ؓ(f)weight_*Q来生成用来排序的keys。这些keys的名U可以通过取代模式中的“*”W号来加以生成,用于取代“*”W号的值是mylist列表中能够首ơ匹配模式中?#8220;*”W号的真实|在本例中??、和3Q?/p>

 

假设在mylist列表中存有???Qobject_1上存储有值o(j)bject_1Qobject_2上存储有值o(j)bject_2Qobject_3上存储有值o(j)bject_3Qweight_1上存储有?.87Qweight_2上存储有?Qweight_3上存储有?6.4。如下所C:(x)


 


使用SORT mylist BY weight_*可以得到如下输出Q?/p>

 

 

Q?Q蟩q排序元?br />可以lBY选项指定一个ƈ不存在的keyQ这会(x)使得SORT命o(h)跌排序操作。这是一U在不进行排序的情况下取得外部keys的有效方式。如下所C:(x)
SORT
mylist BY
nosort
Q?Q获取外部keys
在一些情况下Q获取真正的对象而非它们的ID更ؓ(f)有用Qobject_1、object_2和object_3Q。基于列表(listQ、集合(setQ或有序集合Qsorted
setQ中的元素获取外部keys可以通过使用如下命o(h)来完成:(x)
SORT mylist BY weight_* GET object_*

 

在用上q命令后Q可以得到如下输出:(x)

 


GET选项可以被多ơ用,从而对原有列表QlistQ、集合(setQ或有序集合Qsorted
setQ中的每个元素取得更多的keys。同P使用Ҏ(gu)的模?Q可以获取元素本w。如下所C:(x)
SORT mylist BY weight_* GET
object_* GET #


使用上述命o(h)后,可以得到如下输出Q?

 


Q?Q存储排序操作的l果
在默认情况下QSORT向客L(fng)q回排序后的元素。用STORE选项Q可以将l果存储在一个列表中Q用户可以同时指定与列表相关联的key。如下所C:(x)
SORT
mylist BY weight_* SRORE
resultkey
Q?Q在BY和GET选项中用hashes
你可以对hash字段使用BY和GET选项Q语法如下:(x)
SORT mylist
BY weight_*->fieldname GET
object_*->fieldname
字符?#8220;->”用来区分hash字段名称和key名称?br />q回|(x)排序元素的列表?br />该命令自0.0.7版本后可用?/p>

13.TTL
语法QTTL
key
说明Q如果指定的key有与之相兌的超时时_(d)那么会(x)q回该keyq能存活的时间。该操作的时间复杂度为O(1)。这一自省能力使得Redis客户端能够查看一个指定的keyq能够作为dataset的一部分存在多长旉?br />q回|(x)以秒为单位的TTLQTime
To LiveQ;如果指定的key不存在或者没有与之相兌的超时时_(d)那么便会(x)q回-1?br />该命令自0.1000版本后可用?/p>

14.
TYPE
语法Q?TYPE
key
说明Q返回存储在指定key上的值所h的数据类型的字符串描q。该操作的时间复杂度为O(1)。数据类型可以是Qstring、list、set、zset和hash?br />q回|(x)存储在key上的值的数据cdQ如果该key不存在,那么q回gؓ(f)none?br />该命令自0.0.7版本后可用?

 



强强 2012-06-19 11:29 发表评论
]]>
վ֩ģ壺 鶹һƷһAVһ| Ʒ޾Ʒۿ| þþƷ޸| ѲŴɫaƵ| ˾Ʒ| ѹۿ| Ů߿ѹۿ| ͹Ƶ| ޾Ʒ| һһëƬ| ޹Ʒ۲ӰԺþ| ɫ͵͵ۺAV| þþþ?V| Ļ뱬AV| av뾫Ʒվ| ĻۺϾþ| һëƬ߹| ۺϼɫһ| ĻþþƷVA| ޾ƷĻAƬ| AVպAVɫ| ϸëƬ| þþƷר| ѹۿþþƵ| 18վѹۿ| վѹۿ| һëƬڼ| ˾Ʒձר61 | һaȫƵ| H߹ۿ| ĻȫѰ| Ʒվ| AV߹ۿ| ؼëƬ߳˹ۿ| ޸߲| avר߲| Ӱ| ۺһ| ҵijdzӪѹۿ| ƷŮٸavѾþ| ѿƸվƵ|