基本命令
| 命令 | 用法 | 作用 | |
|---|---|---|---|
| SELECT | |||
| KEYS | |||
| EXISTS | |||
| FLUSHALL | |||
| FLUSHDB | |||
TYPE
用法:TYPE key
作用:返回 key 所存储的 value 的数据结构类型,它可以返回string、list、set、zset、hash等不同的类型。
返回:返回当前 key 的数据类型,如果 key 不存在时返回 none
举例:
| 1 | redis> SET key1 "value" | 
五种基本数据类型
| 数据类型 | 存储的值 | 读写能力 | 
|---|---|---|
| String | 可以使用字符串、整数或浮点数,统称为元素 | 对字符串操作,对整数类型加减 | 
| List | 一个序列集合且每个节点都包好了一个元素 | 序列两端推入、或弹出元素,修剪、查找或移除元素 | 
| Set | 各不相同的元素 | 从集合中插入或者删除元素 | 
| Hash | 有Key-value的散列祖,其中key是字符串,value是元素 | 按照key进行增加删除 | 
| Sort Set | 带分数的score-value有序集合,其中score为浮点,value为元素 | 集合插入,按照分数范围查找 | 
String类型
value可以是字符串、数字(当做字符串处理的)、对象(:的用法)
相关命令:http://redis.cn/commands.html#string
SET
用法:SET key value [EX PX NX XX ]
- EX:设置键key的过期时间,单位是秒
- PX:设置键key的过期时间,单位是毫秒
- NX:只有键key不存在的时候才会设置key的值
- XX:只有键key存在的时候才会设置key的值
作用:将键key设定为指定的 value,如果key已经存在则会被覆盖为新的value
返回:如果SET命令正常执行那么回返回OK,否则如果加了NX 或者 XX选项,但是没有设置条件。那么会返回nil
注意: 由于SET命令加上选项已经可以完全取代SETNX, SETEX, PSETEX的功能,所以在将来的版本中,redis可能会不推荐使用并且最终抛弃这几个命令。
举例:
| 1 | 设置key1的值为value1 | 
GET
用法:GET key
作用:返回 key 的 value。如果key不存在,返回特殊值 nil 。如果key的 value 不是string,就返回错误,因为 GET 只处理string类型的 values
返回:key对应的value,key不存在时返回nil
举例:
| 1 | 获取key1的值 | 
EXPIRE
用法:EXPIRE key seconds
作用:设置key的过期时间为seconds秒
返回:设置成功返回1,设置失败(key不存在等原因)返回0
注意:
举例:
| 1 | 设置key1 20秒后失效 | 
TTL
用法:TTL key
作用:查看key的过期时间
返回:返回key的过期时间,永久有效则返回-1
举例:
| 1 | 首先设置一个key并设置过期时间 | 
SETEX
用法:SETEX key seconds value
作用:
- 设置key对应字符串value,并且设置key在给定的seconds时间之后超时过期
- 这个命令等效于 SET和EXPIRE的事务执行
- SETEX是原子的,也可以通过把上面两个命令放到 MULTI/EXEC 块中执行的方式重现。相比连续执行上面两个命令,它更快,因为当Redis当做缓存使用时,这个操作更加常用
注意: ==由于SET命令加上选项已经可以完全取代SETNX, SETEX, PSETEX的功能,所以在将来的版本中,redis可能会不推荐使用并且最终抛弃这几个命令。==
返回:成功返回ok
举例:
| 1 | 127.0.0.1:6379> SETEX key1 20 value1 | 
PSETEX
和 SETEX 完全一样,唯一的区别是到期时间以毫秒为单位,而不是秒
SETNX
用法:SETNX key value
作用:SET if Not exists,将key设置值为value,如果key不存在,这种情况下等同SET命令。 当key存在时,什么也不做。
返回: 1 如果key被设置了,0如果key没有被设置
举例:
| 1 | 127.0.0.1:6379> SET key1 value | 
MSET
用法:MSET key value [key value …]
作用:
- 对应给定的keys到他们相应的values上。MSET会用新的value替换已经存在的value,就像普通的SET命令一样
- MSET是原子的,所以所有给定的keys是一次性set的。客户端不可能看到这种一部分keys被更新而另外的没有改变的情况
返回:总是OK,因为MSET不会失败
举例:
| 1 | 127.0.0.1:6379> MSET key1 value1 key2 value2 key3 value3 | 
MGET
用法:MGET key [key …]
作用:返回所有指定的key的value。对于每个不对应string或者不存在的key,都返回特殊值nil。正因为此,这个操作从来不会失败
返回:指定的key对应的values的list
举例:
| 1 | 127.0.0.1:6379> MSET key1 value1 key2 value2 key3 value3 | 
MSETEX
==弃用==
用法:
作用:
返回:
举例:
MSETNX
用法:MSETNX key value [key value …]
作用:
- 对应给定的keys到他们相应的values上。==只要有一个key已经存在,MSETNX一个操作都不会执行。 由于这种特性,MSETNX可以实现要么所有的操作都成功,要么一个都不执行,这样可以用来设置不同的key,来表示一个唯一的对象的不同字段。==
- MSETNX是原子的,所以所有给定的keys是一次性set的。客户端不可能看到这种一部分keys被更新而另外的没有改变的情况。
返回:
- 1 如果所有的key被set
- 0 如果没有key被set(至少其中有一个key是存在的)
举例:
| 1 | 127.0.0.1:6379> MSETNX key1 value1 key2 value2 key3 value3 | 
GETSET
用法:
作用:
返回:
举例:
MOVE
用法:MOVE key db
作用:将当前数据库的 key 移动到给定的数据库 db 当中
返回:移动成功返回1,移动失败返回0
注意:如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。因此,也可以利用这一特性,将 MOVE 当作锁(locking)原语(primitive)
举例:
| 1 | 选择0号库 | 
APPEND
用法:APPEND key value
作用:如果 key 已经存在,并且值为字符串,那么这个命令会把 value 追加到原来值(value)的结尾。 如果 key 不存在,那么它将首先创建一个空字符串的 key ,再执行追加操作,这种情况 APPEND 将类似于 SET 操作
返回:返回append后字符串(value)的长度
举例:
| 1 | 设置key1值为value1 | 
STRLEN
用法:STRLEN key
作用:查看key值的长度
返回:返回int key值的长度
举例:
| 1 | 127.0.0.1:6379> SET key1 value1 | 
INCR
用法:INCR key
作用:对存储在指定key的数值执行原子的加1操作。
- 如果指定的key不存在,那么在执行incr操作之前,会先将它的值设定为 - 0。
- 如果指定的key中存储的值不是字符串类型(fix:)或者存储的字符串类型不能表示为一个整数,那么执行这个命令时服务器会返回一个错误(eq:(error) ERR value is not an integer or out of range) 
- 这个操作仅限于64位的有符号整型数据 
注意:
- 由于redis并没有一个明确的类型来表示整型数据,所以这个操作是一个字符串操作。 
- 执行这个操作的时候,key对应存储的字符串被解析为10进制的64位有符号整型数据。 
- 事实上,Redis 内部采用整数形式(Integer representation)来存储对应的整数值,所以对该类字符串值实际上是用整数保存,也就不存在存储整数的字符串表示(String representation)所带来的额外消耗 
返回:执行递增操作后key对应的值
举例:
| 1 | 127.0.0.1:6379> SET key1 5 | 
DECR
用法:DECR key
作用:对key对应的数字做减1操作。如果key不存在,那么在操作之前,这个key对应的值会被置为0。如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。这个操作最大支持在64位有符号的整型数字。
返回:减小之后的value
举例:
| 1 | 127.0.0.1:6379> SET key1 5 | 
INCRBY
用法:INCRBY key increment
作用:将key对应的数字加decrement。如果key不存在,操作之前,key就会被置为0。如果key的value类型错误或者是个不能表示成数字的字符串,就返回错误。这个操作最多支持64位有符号的正型数字
返回:增加之后的value值
举例:
| 1 | 127.0.0.1:6379> SET key1 1 | 
DECRBY
用法:DECRBY key increment
作用:将key对应的数字减decrement。如果key不存在,操作之前,key就会被置为0。如果key的value类型错误或者是个不能表示成数字的字符串,就返回错误。这个操作最多支持64位有符号的正型数字
返回:减少之后的value值
举例:
| 1 | 127.0.0.1:6379> SET key1 10 | 
GETRANGE
用法:GETRANGE key start end
作用:返回key对应的字符串value的子串
- 这个子串是由start和end位移决定的(两者都在string内)。 
- 可以用负的位移来表示从string尾部开始数的下标。所以-1就是最后一个字符,-2就是倒数第二个,以此类推。 
- 这个函数处理超出范围的请求时,都把结果限制在string内 
注意:这个命令是被改成GETRANGE的,在小于2.0的Redis版本中叫SUBSTR。start end都是闭区间,即返回的子串包含start和end位置的字符
返回:返回符合指定位置的子字符串
举例:
| 1 | 127.0.0.1:6379> SET key1 'This is a dog' | 
SETRANGE
用法:SETRANGE key offset value
作用:覆盖key对应的string的一部分,从指定的offset处开始,覆盖value的长度
- 如果offset比当前key对应string还要长,那这个string后面就补0以达到offset。
- 不存在的keys被认为是空字符串,所以这个命令可以确保key有一个足够大的字符串,能在offset处设置value
返回:该命令修改后的字符串长度
注意:
- offset最大可以是229-1(536870911),因为redis字符串限制在512M大小。如果你需要超过这个大小,你可以用多个keys。 
- ==当set最后一个字节并且key还没有一个字符串value或者其value是个比较小的字符串时,Redis需要立即分配所有内存,这有可能会导致服务阻塞一会。在一台2010 MacBook Pro上,set 536870911字节(分配512MB)需要~300ms,set134217728字节(分配128MB)需要~80ms,set 33554432比特位(分配32MB)需要~30ms,set 8388608比特(分配8MB)需要8ms。注意,一旦第一次内存分配完,后面对同一个key调用SETRANGE就不会预先得到内存分配== 
举例:
| 1 | 127.0.0.1:6379> SET key1 value1234567890 | 
List类型
List类型是有序的列表,允许重复,List不要求里面的元素是唯一的
说明:可以结合栈和队列的含义理解,
- 设置和取值的时候同一方向是栈(后进先出),lpush lpop结合、rpush rpop结合。
- 设置和取值的时候方向相反就是队列(先进先出),lpush rpop结合、rpush lpop结合
==list头部在左,尾部在右==
相关命令:http://redis.cn/commands.html#list
LPUSH
用法:LPUSH key value [value …]
作用:将所有指定的值插入到列表key的头部。
- 如果 key 不存在,那么在进行 push 操作前会创建一个空列表。 
- 如果 key 对应的值不是一个 list 的话,那么会返回一个错误。 
- 可以使用一个命令把多个元素 push 进列表,只需在命令末尾加上多个指定的参数。 
- 元素是从最左端的到最右端的、一个接一个被插入到 list 的头部。 所以对于这个命令例子 - LPUSH mylist a b c,返回的列表是 c 为第一个元素, b 为第二个元素, a 为第三个元素。
返回:push 操作后的 list 长度
注意: 2.4版本可以接受多个 value 参数。2.4版本之前的 Redis 只能每条命令 push 一个值
举例:
| 1 | 127.0.0.1:6379> LPUSH key_list value1 | 
RPUSH
用法:RPUSH key value [value …]
作用:向列表 key 的尾部插入所有指定的值。
- 如果 key 不存在,那么会创建一个空的列表然后再进行 push 操作。 
- 当 key 保存的不是一个列表,那么会返回一个错误。 
- 可以使用一个命令把多个元素打入队列,只需要在命令后面指定多个参数。 
- 元素是从左到右一个接一个从列表尾部插入。 比如命令 RPUSH mylist a b c 会返回一个列表,其第一个元素是 a ,第二个元素是 b ,第三个元素是 c。 
返回:push 操作后的列表长度
注意: 2.4版本可以接受多个 value 参数。2.4版本之前的 Redis 只能每条命令 push 一个值
举例:
| 1 | 127.0.0.1:6379> RPUSH key_list value1 | 
LPUSHX
用法:LPUSHX key value [value …]
作用:只有当 key 已经存在并且为 list 的时候,就在这个 key 下面的 list 的头部插入 value。 当 key 不存在的时候不会进行任何操作
返回:push 操作后的 list 长度
举例:
| 1 | 当key1不存在时直接用LPUSHX 不行 返回0则说明没有push成功 | 
RPUSHX
操作同RPUSHX
LPOP
用法:LPOP key [count]
作用:移除并且返回 key 对应的 list 的前count个元素,count默认为1
返回:返回元素值,或者当 key 不存在时返回 nil
举例:
| 1 | key1 依次头部追加onew two three三个元素 | 
RPOP
用法:RPOP key [count]
作用:移除并且返回 key 对应的 list 的最后count个元素,count默认为1
返回:返回元素值,或者当 key 不存在时返回 nil
举例:
| 1 | key1 依次头部追加onew two three三个元素 | 
BLPOP
官方文档:http://redis.cn/commands/blpop.html
用法:BLPOP key [key …] timeout
作用:命令 LPOP 的阻塞版本,这是因为当给定列表内没有任何元素可供弹出的时候, 连接将被 BLPOP 命令阻塞。 当给定多个 key 参数时,按参数 key 的先后顺序依次检查各个列表,弹出第一个非空列表的头元素
- 主要是当队列内没有元素时则阻塞队列,如果阻塞多个队列的话则依次从左到右检查,直到有一个队列弹出元素
- 与lpop的区别是 当队列中没有数据时lpop会返回nil,而blpop则阻塞队列
返回:
注意:
举例:
BRPOP
官方文档:http://redis.cn/commands/brpop.html
用法:RPOP命令的阻塞版本,作用用法等于BLPOP和LPOP的关系一样
作用:
返回:
注意:
举例:
LLEN
用法:LLEN key
作用:
- 返回存储在 key 里的list的长度。
- 如果 key 不存在,那么就被看作是空list,并且返回长度为 0。
- 当存储在 key 里的值不是一个list的话,会返回error
返回:key对应的list的长度
举例:
| 1 | 127.0.0.1:6379> LPUSH key1 value1 value2 value3 | 
LINDEX
用法:LINDEX key index
作用:
- 返回列表里索引为 index 的元素。
- 下标是从0开始索引的,所以 0 是表示第一个元素, 1 表示第二个元素,并以此类推。
- 负数索引用于指定从列表尾部开始索引的元素。在这种方法下,-1 表示最后一个元素,-2 表示倒数第二个元素,并以此往前推
- 当 key 位置的值不是一个列表的时候,会返回一个error
返回:请求的对应元素,或者当 index 超过范围的时候返回 nil
注意:==是返回,元素并不会从列表中移除==
举例:
| 1 | push一个列表 | 
LSET
用法:LSET key index value
作用:
- 设置 index 位置的list元素的值为 value
- 当index超出范围时会返回一个error
返回:成功时返回OK
举例:
| 1 | 127.0.0.1:6379> LPUSH key1 value1 value2 value3 | 
LINSERT
用法:LINSERT key BEFORE|AFTER pivot value
作用:
- 在元素 pivot 的前面或后面插入value到列表 key 中 
- 当 key 不存在时,这个list会被看作是空list,任何操作都不会发生。 
- 当 key 存在,但保存的不是一个list的时候,会返回error 
返回:经过插入操作后的list长度,或者当 pivot 值找不到的时候返回 -1
举例:
LREM
用法:
作用:
返回:
注意:
举例:
LRANGE
用法:
作用:
返回:
注意:
举例:
LTRIM
用法:
作用:
返回:
注意:
举例:
RPOPLPUSH
用法:
作用:
返回:
注意:
举例:
BRPOPLPUSH
用法:
作用:
返回:
注意:
举例:
Set类型
Set类型是无序的列表且不允许重复
- 添加一个值, - sadd key value- ==set1为key 12为value== - 1 - > sadd set1 12 
- 获取set长度, - scard key- 1 - > scard set1 
- 查看set里面是否存在某个value, - sismember key value- ==set1为key,13为value== - 1 - > sismember set1 13 
- 删除一个值 - srem key value- 1 - > srem set1 13 
Hash类型(又称:散列)
Hash只要求键不一样,就是不同的条数
数据结构图:
        key->key1  ->   value(string/int/float)     
              key2  ->  value(string/int/float)     
              key3  ->  value(string/int/float)     
              key4  ->   value(string/int/float)- 插入 - hset key key value- ==如果键重复,值会被覆盖== - 1 - > hset hash1 key1 12 
- 获取 - hget key key- 1 - > hget hash1 key1 
- 查看长度 - hlen key- 1 - > hlen key 
- 一次性获取多个值 - hmget key key1 key2- 1 - > hmget hash1 key1 key2 
Zset 类型(Sort set又称:有序分数集)
==存储和hash一样,都是一个映射。存储的是分数与元素的映射。可以看出是排行榜。value必须是全局唯一==
数据结构:score 是浮点型
    key->score(10.1)   value(string/int/float)  rank:1     
         score(9.1)    value(string/int/float)  rank:0    
         score(11.2)   value(string/int/float)  rank:2==如果两个元素的score一样,按照字节顺序排列先后==
- 增加 - zadd key score value- 1 - > zadd zset1 10.1 val1 
- 查看个数 - zcard key- 1 - > zcard zset1 
- 查看排名 - zrange key sort widthscores- 1 
 2- # 表示按照从o到2查看zset包括scores值 
 > zrange zset1 0 2 widthscores
- 查看某个value排名 - zrand key value- 1 - > zrank zset1 val2 



