Redis简介
redis是一个速度非常快的非关系型数据库(non-relational database),它可以存储键与5种不同类型的值之间映射,可以储存子内存的数据持久化到硬盘,可以使用复制特性扩展读能力,使用分片来扩展写能力。
结构类型 |
结构存储值 |
结构的读写能力 |
---|---|---|
STRING |
可以使字符串,整数或者是浮点数 |
可以对整个字符串或者字符串的一部分执行操作;对整数和浮点数执行自增或者自减操作 |
LIST |
一个链表,链表上的每个节点都包含了一个字符串 |
从链表的两端推入或者弹出元素;根据便宜量对链表进行修剪;读取单个或者多个元素;根据值查找或者移除 |
SET |
包含字符串的无序收集器,并且被包含的每个字符串都是独一无二,各不相同 |
添加、获取、移除单个元素;检查一个元素是否存在于集合中;计算交集、并集、差集;从集合里面随机获取元素 |
HASH |
包含键值对的无序散列表 |
添加、获取、移除单个键值对;获取所有键值对 |
ZSET |
字符串成员与浮点数分值之间的有序映射,元素的排列顺序有分值大小决定 |
添加、获取、删除单个元素;根据分值范围货这成员来获取元素 |
字符串命令
命令 |
行为 |
GET |
GET key-name——获取存储在给定建中的值 |
SET |
SET key-name value——设置存储在给定键中的值 |
DEL |
DEL key-name——删除存储在给定键中的值 |
INCR |
INCR key-name——将键存储的值加1 |
DECR |
DECR key-name——将键存储的值减1 |
INCRBY |
INCRBY key-name amount——将键存储的值加上整数amount |
DECRBY |
DECRBY key-name amount——将键存储的值减去整数amount |
INCRBYFLOAT |
INCRBYFLOAT key-name amount——将键存储的值加上浮点数amount |
APPEND | APPEND key-name value——将value追加到给定键key-name当前值的末尾 |
GETRANGE |
GETRANGE key-name start end——获取有偏移量start至end的所有字符串组成的子串包括start和end在内(end超出字符串结尾部分视为空串) |
SETRANGE |
SETRANGE key-name offset value——将从start偏移量开始的自传设置为给定值(如果偏移量超过了字符串长度,字符串将自动使用空字节来扩展至所需长度) |
GETBIT |
GETBIT key-name offset——将字符串看做是二进制位串,并返回位串中偏移量位offset的二进制的值 |
SETBIT |
SETBIT key-name offset value——将字符串看做二进制串,并将位串中偏移量位offset的二进制位的值设为value |
BITCOUNT |
BITCOUNT key-name [start end]——统计二进制位串中值位1的二进制位数量,如果给定start,end则统计偏移量范围内的二进制位 |
BITOP |
BITOP operation dest-key key-name [key-name...]——对一个或多个二进制位串执行包括并(AND),或OR,异或XOR、非NOT在内的任意一种按位运算操作,并将结果保存在dest-key键里 |
示例
127.0.0.1:6379> get mykey
(nil)
127.0.0.1:6379> set mykey 1
OK
127.0.0.1:6379> get mykey
"1"
127.0.0.1:6379> append mykey 2
(integer) 2
127.0.0.1:6379> get mykey
"12"
127.0.0.1:6379> getrange mykey 1 5
"2"
127.0.0.1:6379> setrange mykey 1 3
(integer) 2
127.0.0.1:6379> get mykey
"13"
127.0.0.1:6379> incr mykey
(integer) 14
127.0.0.1:6379> get mykey
"14"
127.0.0.1:6379> decr mykey
(integer) 13
127.0.0.1:6379> incrby mykey 7
(integer) 20
127.0.0.1:6379> decrby mykey 10
(integer) 10
127.0.0.1:6379> incrbyfloat mykey 1.1
"11.1"
127.0.0.1:6379> get mykey
"11.1"
127.0.0.1:6379>
127.0.0.1:6379> get mykey
"11.1"
127.0.0.1:6379> del mykey
(integer) 1
127.0.0.1:6379> get mykey
(nil)
127.0.0.1:6379> setbit mykey 1 1
(integer) 0
127.0.0.1:6379> setbit mykey 7 1 # 二进制键值是01000001
(integer) 0
127.0.0.1:6379> get mykey
"A"
127.0.0.1:6379> getbit mykey 0
(integer) 0
127.0.0.1:6379> bitcount mykey
(integer) 2
127.0.0.1:6379> bitop not new_mykey mykey # 做非计算
(integer) 1
127.0.0.1:6379> get new_mykey #16进制对应10进制是190,二进制是10111110
"\xbe"
127.0.0.1:6379> bitcount new_mykey #统计二进制位1的个数,共6个
(integer) 6
127.0.0.1:6379> getbit new_mykey 0
(integer) 1
列表
RPUSH |
RPUSH key-name value [value ...]——将一个或者多个值推入列表的右端 |
LPUSH |
LPUSH key-name value [value ...]——将一个或者多个值推入列表的左端 |
RPOP |
RPOP key-name——移除并返回列表最右端元素 |
LPOP |
LPOP key-name——移除并返回列表最左端元素 |
LINDEX |
LINDEX key-name offset——返回列表中偏移量为offset的元素 |
LRANGE |
LRANGE key-name start end——返回列表从start偏移量到end偏移量范围内的所有元素,包括start和end的元素 |
LTRIM |
LTRIM key-name start end——对列表进行裁剪,指保留从start偏移量到end范围内的元素,包括start和end的元素 |
BLPOP |
BLPOP key-name [key-name ...] timeout——从第一个非空中弹出最左的元素或者在timeout秒内阻塞并等待可弹出的元素出现 |
BRPOP |
BRPOP key-name [key-name ...] timeout——从第一个非空中弹出最右的元素或者在timeout秒内阻塞并等待可弹出的元素出现 |
RPOPLPUSH |
RPOPLPUSH source-key dest-key——从source-key列表中弹出位于最右端的元素,然后将这个元素推入dest-key列表最左端,并返回这个元素 |
BRPOPLPUSH |
BRPOPLPUSH source-key dest-key——从source-key列表中弹出位于最右端的元素,然后将这个元素推入dest-key列表最左端,并返回这个元素,如果source-key为空,那么在timeout秒内阻塞并等待可弹出的元素 |
示例
127.0.0.1:6379> rpush mylist 1 2 3 #设置列表["1","2","3"]
(integer) 3
127.0.0.1:6379> lpush mylist 0 #左侧加入0 ["0","1","2","3"]
(integer) 4
127.0.0.1:6379> lrange mylist 0 4 #查看列表
1) "0"
2) "1"
3) "2"
4) "3"
127.0.0.1:6379> rpop mylist #右端移除一个元素
"3"
127.0.0.1:6379> ltrim mylist 0 1 #列表修剪保留【0,1】范围内元素
OK
127.0.0.1:6379> lrange mylist 0 4
1) "0"
2) "1"
127.0.0.1:6379> blpop mylist 5 #阻塞的从列表左端弹出一个元素
1) "mylist"
2) "0"
127.0.0.1:6379> lrange mylist 0 5
1) "1"
127.0.0.1:6379> brpoplpush mylist newlist 4 #阻塞的从mylist右端弹出一个元素并推入newlist列表的左端
"1"
127.0.0.1:6379> lrange newlist 0 4
1) "1"
127.0.0.1:6379> lrange mylist 0 4
(empty list or set)
集合
SADD |
SADD key-name item [item ...]——将一个或是多个元素添加到集合里,并返回被添加元素当中原本并不存在于集合里的元素数量 |
SREM |
SREM key-name item [item ...]——从集合里移除一个或者多个元素,并返回被移除的元素数量 |
SISMEMBER |
SISMEMBER key-name item——检查元素item是否存在于集合key-name里 |
SCARD |
SCARD key-name——返回集合包含的元素数量 |
SMEMBERS |
SMEMBERS key-name——返回集合包含的所有元素 |
SRANDMEMBER |
SRANDMEMBER key-name [count]——从集合里随机返回一个或者多个元素,当count是正整数时,返回元素不会重复;当count是负数时,命令返回元素可能会重复 |
SPOP |
SPOP key-name——随机的移除集合里一个元素,并返回这个元素 |
SMOVE |
SMOVE source-key dest-key item——如果集合source-key包含元素item,那么从集合source-key里移除元素item,并将元素tiem添加到集合dest-key中;如果item移除成功返回1,否则返回0 |
SDIFF |
SDIFF key-name [key-name ...]——返回哪些存在于第一个集合、但不存在与其他集合中的元素。即:差集运算 |
SDIFFSTORE |
SDIFFSTORE dest-key key-name [key-name ...]——将哪些存在于第一个集合但不存在与其他集合中的元素存放在dest-key键里面。即:将差集存放在新键里 |
SINTER |
SINTER key-name [key-name ...]——返回那些同时存在于所有集合中的元素 即:交集 |
SINTERSTORE |
SINTERSTORE dest-key key-name [key-name ...]——将那些同时存在于所有集合的元素存储到dest-key键里 即:将交集存放在新键里 |
SUNION |
SUNION key-name [key-name ...]——返回那些至少存在于一个集合中的元素 即并集 |
SUNIONSTORE |
SUNIONSTORE dest-key key-name [key-name ...]——将那些至少存在于一个集合中的元素存储到dest-key键里 即:并集存到新键里 |
示例
127.0.0.1:6379> sadd myset 1 2 3 3 #设置一个集合元素包含1,2,3
(integer) 3
127.0.0.1:6379> srem myset 1 #删除元素1
(integer) 1
127.0.0.1:6379> sismember myset 2 #检查元素2是否在集合里
(integer) 1
127.0.0.1:6379> scard myset #集合中元素数量
(integer) 2
127.0.0.1:6379> smembers myset #查看所有元素
1) "2"
2) "3"
127.0.0.1:6379> srandmember myset 3 #从集合里随机不重复获取3元素,但集合元素不足3个时
1) "2"
2) "3"
127.0.0.1:6379> srandmember myset -3 #从集合里随机重复获取3个元素
1) "3"
2) "3"
3) "3"
127.0.0.1:6379> spop myset #随机移除一个元素,移除的是2
"2"
127.0.0.1:6379> sadd myset 4 5 6 #往集合里添加4,5,6
(integer) 3
127.0.0.1:6379> smove myset newset 3 #将3从集合里移出到newset里
(integer) 1
127.0.0.1:6379> smembers myset
1) "4"
2) "5"
3) "6"
127.0.0.1:6379> smembers newset
1) "3"
127.0.0.1:6379> sadd newset 4
(integer) 1
127.0.0.1:6379> sdiff myset newset # 求集合差集
1) "5"
2) "6"
127.0.0.1:6379> sinter myset newset # 求集合交集
1) "4"
127.0.0.1:6379> sunion myset newset #求集合并集
1) "3"
2) "4"
3) "5"
4) "6"
127.0.0.1:6379> sunionstore unionset myset newset # 将并集存到新集合unionset中
(integer) 4
127.0.0.1:6379> smembers unionset
1) "3"
2) "4"
3) "5"
4) "6"
散列
HMGET |
HMGET key-name key [key ...]——从散列里获取一个或者多个键的值 |
HMSET | HMSET key-name key value [key value...]——为散列里一个或者多个键设置值 |
HDEL |
HDEL key-name key [key ...]——删除散列里的一个或者多个键值对,返回成功找到并删除的键值对数量 |
HLEN |
HLEN key-name——返回散列包含的键值对数量 |
HEXISTS |
HEXISTS key-name key——检查给定键里是否存在于散列中 |
HKEYS |
HKEYS key-name——获取散列包含的所有键 |
HVALS |
HVALS key-name——获取散列包含的所有值 |
HGETALL |
HGETALL key-name——获取散列包含的所有键值对 |
HINCRBY |
HINCRBY key-name key increment——将key存储的值加上整数increment |
HINCRBYFLOAT |
HINCRBYFLOAT key-name key increment——将key存储的值加上浮点数increment |
示例
127.0.0.1:6379> hmget myhash a # 获取不存在hash
1) (nil)
127.0.0.1:6379> hmset myhash a 1 b 2 #设置一个hash
OK
127.0.0.1:6379> hmget myhash a
1) "1"
127.0.0.1:6379> hlen myhash # hash包含的键值对
(integer) 2
127.0.0.1:6379> hexists myhash a
(integer) 1
127.0.0.1:6379> hkeys myhash
1) "a"
2) "b"
127.0.0.1:6379> hvals myhash
1) "1"
2) "2"
127.0.0.1:6379> hgetall myhash
1) "a"
2) "1"
3) "b"
4) "2"
127.0.0.1:6379> hincrby myhash b 4 # 对myhash中 b键的值加4
(integer) 6
127.0.0.1:6379> hgetall myhash
1) "a"
2) "1"
3) "b"
4) "6"
127.0.0.1:6379> hincrbyfloat myhash a 2.2
"3.2"
127.0.0.1:6379> hgetall myhash
1) "a"
2) "3.2"
3) "b"
4) "6"
127.0.0.1:6379> hdel myhash a
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "b"
2) "6"
有序集合
ZADD |
ZADD key-name score member [score member ...]——将带有给定分值的成员添加到有序集合里 |
ZREM |
ZREM key-name member [member ...]——从有序集合里移除给定的成员,并返回被移除成员的数量 |
ZCARD |
ZCARD key-name——返回有序集合包含的成员数量 |
ZINCRBY |
ZINCRBY key-name increment member——将member成员的分值加上increment |
ZCOUNT |
ZCOUNT key-name min max——返回分值介于min和max之间的成员数量 |
ZRANK |
ZRANK key-name member——返回成员member在有序集合中的排名 |
ZSCORE |
ZSCORE key-name member——返回成员member的分值 |
ZRANGE |
ZRANGE key-name start stop [WITHSCORES]——返回有序集合排名介于start和stop之间的成员,若给定WINTHSCORES选项,则分值一并返回 |
ZREVRANK |
ZREVRANK key-name member——返回有序集合里的成员member的排序,成员按照分值从小到达排序 |
ZREVRANGE |
ZREVRANGE key-name start stop [WITHSCORES]——返回有序集合给定排名范围内的成员,成员按分值大小排列 |
ZRANGEBYSCORE |
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]——返回有序集合中分值结余min和max之间的所有成员 |
ZREVRANGEBYSCORE |
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]——获取有序集合中分值介于min和max之间的所有成员,并按照分值从大到小的顺序来返回它们 |
ZREMRANGEBYRANK |
ZREMRANGEBYRANK key-name start stop——移除有序集合中排名介于start和stop之间的所有成员 |
ZREMRANGEBYSCORE |
ZREMRANGEBYSCORE key-name min max——移除有序集合中分值介于min和max之间的所有成员 |
ZINTERSTORE |
ZINTERSTORE dest-key key-count key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]——对给定的有序集合执行类似于集合的交集运算 |
ZUNIONSTORE |
ZUNIONSTORE dest-key key-count key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]——对给定的有序集合执行类似于集合的并运算 |
示例
127.0.0.1:6379> zadd myzset 1 a 2 b 3 c # 设置一个zset有序集合a:1,b:2,c:3
(integer) 3
127.0.0.1:6379> zcard myzset
(integer) 3
127.0.0.1:6379> zincrby myzset 1 c #将c+1 之后c:4
"4"
127.0.0.1:6379> zcount myzset 1 3
(integer) 2
127.0.0.1:6379> zrange myzset 0 3
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> zrange myzset 0 3 withscores
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "4"
127.0.0.1:6379> zadd myzset1 3 c 4 d #新键另一个zset,c:3,d:4
(integer) 2
127.0.0.1:6379> zunionstore newzset 2 myzset myzset1 weights 1 1 aggregate sum #将两个集合按照并集 权重是1,相同键进行相加合并
(integer) 4
127.0.0.1:6379> zrange newzset 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"
5) "d"
6) "4"
7) "c"
8) "7"
发布与订阅
SUBSCRIBE |
SUBSCRIBE channel [channel ...]——订阅戈丁的一个或多个频道 |
UNSUBSCRIBE |
UNSUBSCRIBE [channel [channel ....]] ——退订给定的一个或多个频道,如果没有给定频道,则退订所有频道 |
PUBLISH |
PUBLISH channel message——向给定频道发消息 |
PSUBSCRIBE |
PSUBSCRIBE pattern [pattern ...]——订阅与给定模式相匹配的所有频道 |
PUNSUBSCRIBE |
PUNSUBSCRIBE [pattern [pattern ...]]——对顶戈丁的模式频道,若没有给定模式,则退订所有频道 |
排序
SORT |
SORT source-key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE dest-key]——根据给定的选项,对输入列表、集合或者有序集合进行排序 |