Redis基本命令
1、Redis数据类型
Redis有string(字符串)、hash(哈希)、list(列表)、set(集合)和zset(有序集合)五种数据类型
1.1、String(字符串)
string类型是Redis的最基本的数据类型,string类型的值最大能存储512MB。
可以存储任何数据,结构是一个key对应一个value。
1.1.1、基本语法
COMMAND key_name
1.1.2、基本命令
-
SET key value
设置指定key的值。
服务器:0>set abc 123 "OK"
-
GET key
获取指定key的值。服务器:0>get abc "123"
-
GETSET key value
修改指定key的值为新值,并返回这个key的旧值。服务器:0>getset abc 234 "123" 服务器:0>get abc "234"
-
GETRANGE key start end
返回指定key的值从start到end的子字符串
服务器:0>getrange abc 0 1 "23"
-
GETBIT key offset
对于指定的key的字符串,获取指定偏移量上的位。
通俗意思就是将key对应的字符串转换为二进制0和1,从左往右数,offset为几,就是当前偏移量上的位值,要么0,要么1。
服务器:0>getbit abc 1 "0"
参考链接:
-
SETBIT key offset value
修改指定key对应字符串指定的位的值,只能修改为0或1,否则报错。详解见上条命令GETBIT
服务器:0>setbit abc 1 1 "0" 服务器:0>get abc "r34"
-
MGET key1 [key2…]
获取一个或多个key的值。服务器:0>mget abc def 1) "r34" 2) "567"
-
SETEX key seconds value
设置或覆盖key的值为value,并设置有效期seconds,秒为单位。
服务器:0>setex abc 10 789 "OK" 服务器:0>get abc "789"
十秒后
服务器:0>get abc null
-
SETNX key value
只有在key不存在的时候设置key的值,意思就是不能覆盖写入!服务器:0>set abc 123 "OK" 服务器:0>setnx abc 456 "0" 服务器:0>get abc "123" 服务器:0>get xyz null 服务器:0>setnx xyz 987 "1" 服务器:0>get xyz "987"
-
SETRANGE key offset value
用value覆盖写入key对应的字符串,从偏移量offset开始。服务器:0>get abc "123" 服务器:0>setrange abc 1 098 "4" 服务器:0>get abc "1098"
-
STRLEN key
返回key对应字符串的长度服务器:0>get abc "1098" 服务器:0>strlen abc "4" 服务器:0>strlen def "3"
-
MSET key value [key value…]
同时设置多个key-value对。
服务器:0>mset abc 123 def 234 "OK" 服务器:0>mget abc def 1) "123" 2) "234"
-
MSETNX key value [key value…]
同时设置多个key-value对,当且仅当所有的key都不存在。
服务器:0>mget abc def 1) "123" 2) "234" 服务器:0>msetnx abc 567 def 890 "0" 服务器:0>mget abc def 1) "123" 2) "234" 服务器:0>del xyz "1" 服务器:0>msetnx abc 567 def 890 xyz 009 "0" 服务器:0>mget abc def xyz 1) "123" 2) "234" 3) null 服务器:0>del abc def xyz opt "4" 服务器:0>mget abc def xyz opt 1) null 2) null 3) null 4) null 服务器:0>msetnx abc 123 def 456 xyz 789 "1" 服务器:0>mget abc def xyz opt 1) "123" 2) "456" 3) "789" 4) null
-
PSETEX key milliseconds value
和SETEX命令相似,SETEX是以秒为单位设置key的过期时间,PSETEX是以毫秒为单位设置key的过期时间,这里就不举例了。 -
INCR key
将key对应的数字值加1,必须为数字,不然报错。
服务器:0>get abc "123" 服务器:0>incr abc "124" 服务器:0>get abc "124" 服务器:0>set abc qqq "OK" 服务器:0>get abc "qqq" 服务器:0>incr abc "ERR value is not an integer or out of range"
-
INCRBY key increment
将key对应的数字值加上指定的增量(increment),和INCR类似。
服务器:0>set abc 123 "OK" 服务器:0>get abc "123" 服务器:0>incrby abc 10 "133" 服务器:0>get abc "133"
-
INCRBYFLOAT key increment
将key对应的数字值加上指定的浮点增量(increment),和INCR类似。
服务器:0>get abc "133" 服务器:0>incrbyfloat abc 1.1 "134.10000000000000001" 服务器:0>get abc "134.10000000000000001"
至于为什么是000000001,设计就是这样,可以自行百度0.0。
建议减少使用此方法!!!会出现精度问题!!!尽量使用INCR。 -
DECR key
将key对应的数字值减1,必须为数字,不然报错。
服务器:0>set abc 123 "OK" 服务器:0>decr abc "122" 服务器:0>get abc "122"
-
DECRBY key increment
将key对应的数字值减去指定的减量(increment),和DECR类似。
服务器:0>get abc "122" 服务器:0>decrby abc 10 "112" 服务器:0>get abc "112"
-
APPEND key value
如果key对应的字符串存在,则在当前字符串末尾追加指定的value字符串;如果key对应的字符串不存在,则直接给设置当前key的值为value。
服务器:0>del abc "1" 服务器:0>get abc null 服务器:0>append abc 123 "3" 服务器:0>get abc "123" 服务器:0>append abc 456 "6" 服务器:0>get abc "123456"
1.2、Hash(哈希)
Redis hash是一个string类型的field(字段)和value(值)的映射表,适用于存储对象。
Redis每个hash可以存储232-1键值对(40多亿)
1.2.1、基本命令
-
HSET key field value
将哈希表key中的字段filed的值设置为value。
服务器:0>hset test name jly "1" 服务器:0>hset test age 20 "1" 服务器:0>hset test addr "河南" "1" 服务器:0>hgetall test 1) "name" 2) "jly" 3) "age" 4) "20" 5) "addr" 6) "河南"
-
HMSET key field1 value1 [field2 value2…]
同时将多个field-value对设置到哈希表hkey中服务器:0>hmset test1 name zs age 21 addr 河北 "OK" 服务器:0>hgetall test1 1) "name" 2) "zs" 3) "age" 4) "21" 5) "addr" 6) "河北"
-
HDEL key field1 [field2…]
删除一个或多个哈希表字段。
服务器:0>hgetall test1 1) "name" 2) "zs" 3) "age" 4) "21" 5) "addr" 6) "河北" 服务器:0>hdel test1 addr age "2" 服务器:0>hgetall test1 1) "name" 2) "zs"
-
HEXISTS key field
查看哈希表key内field字段是否存在,存在输出1,不存在输出0。
服务器:0>hgetall test1 1) "name" 2) "zs" 服务器:0>hexists test1 name "1" 服务器:0>hexists test1 age "0"
-
HGET key field
获取哈希表key内指定字段field的值。
服务器:0>hgetall test1 1) "name" 2) "zs" 服务器:0>hget test1 name "zs" 服务器:0>hget test1 age null
-
HGETALL key
获取哈希表key内所有的字段和值。服务器:0>hgetall test1 1) "name" 2) "zs"
-
HINCRBY key field increment
为哈希表key内整数值字段field加上增量increment,字段的值必须是整数值!服务器:0>hset test1 age 22 "1" 服务器:0>hgetall test1 1) "name" 2) "zs" 3) "age" 4) "22" 服务器:0>hincrby test1 age 2 "24" 服务器:0>hget test1 age "24"
-
HKEYS key
获取哈希表key内所有字段。服务器:0>hgetall test1 1) "name" 2) "zs" 3) "age" 4) "22" 服务器:0>hkeys test1 1) "name" 2) "age"
-
HLEN key
获取哈希表key内字段的数量。服务器:0>hgetall test1 1) "name" 2) "zs" 3) "age" 4) "22" 服务器:0>hlen test1 "2"
-
HMGET key field1 [field2…]
获取指定哈希表key内的一个或多个字段的值。服务器:0>hgetall test1 1) "name" 2) "zs" 3) "age" 4) "24" 服务器:0>hmget test1 age name 1) "24" 2) "zs"
-
HSETNX key field value
只有在field字段不存在时,设置哈希表字段field的值。服务器:0>hgetall test1 1) "name" 2) "zs" 3) "age" 4) "24" 服务器:0>hsetnx age 20 "ERR wrong number of arguments for 'hsetnx' command" 服务器:0>hsetnx test1 addr 北京 "1" 服务器:0>hgetall test1 1) "name" 2) "zs" 3) "age" 4) "24" 5) "addr" 6) "北京"
-
HVALS key
获取哈希表key内所有字段的值。服务器:0>hgetall test1 1) "name" 2) "zs" 3) "age" 4) "24" 5) "addr" 6) "北京" 服务器:0>hvals test1 1) "zs" 2) "24" 3) "北京"
-
HSCAN key cursor [MATCH pattern] [COUNT count]
迭代哈希表中的键值对;cursor为游标,pattern为匹配模式,count为返回元素,默认为10.服务器:0>hmset test1 name lisi age 20 addr 河南 "OK" 服务器:0>hgetall test1 1) "name" 2) "lisi" 3) "age" 4) "20" 5) "addr" 6) "河南" 服务器:0>hscan test1 0 match "na*" 1) "0" 2) 1) "name" 2) "lisi"
1.3、List(列表)
Redis列表是简单的字符串列表,你可以添加一个元素在列表的头部(左面)或者尾部(右面)。
一个列表可以存储232-1个元素。
1.3.1、基本命令
-
LPUSH key value1 [value2…]
将一个或者多个值插入到列表头部。服务器:0>lpush list1 zhangsan "1" 服务器:0>lrange list1 0 10 1) "zhangsan" 服务器:0>lpush list1 lisi wangwu "3" 服务器:0>lrange list1 0 10 1) "wangwu" 2) "lisi" 3) "zhangsan"
-
BLPOP key1 [key2…] timeout
弹出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。服务器:0>lrange list1 0 10 1) "wangwu" 2) "lisi" 3) "zhangsan" 服务器:0>blpop list1 10 1) "list1" 2) "wangwu"
-
BRPOP key1 [key2…] timeout
弹出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。服务器:0>brpop list1 10 1) "list1" 2) "zhangsan"
-
BRPOPLPUSH source_key destination_key timeout
弹出列表source_key的最后一个元素,并插入到列表destination_key中,并返回它;如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。服务器:0>lpush list1 zhangsan lisi wangwu "3" 服务器:0>lrange list1 0 10 1) "wangwu" 2) "lisi" 3) "zhangsan" 服务器:0>brpoplpush list1 list2 10 "zhangsan" 服务器:0>lrange list1 0 10 1) "wangwu" 2) "lisi" 服务器:0>lrange list2 0 10 1) "zhangsan"
-
LINDEX key index
通过索引获取列表内的元素,并非弹出;索引从0开始。服务器:0>lrange list1 0 10 1) "wangwu" 2) "lisi" 服务器:0>lindex list1 0 "wangwu" 服务器:0>lrange list1 0 10 1) "wangwu" 2) "lisi"
-
LINSERT key BEFORE | AFTER pivot value
在列表元素pivot的前面或后面插入元素value。服务器:0>lrange list1 0 10 1) "wangwu" 2) "lisi" 服务器:0>linsert list1 before wangwu zhangsan "3" 服务器:0>lrange list1 0 10 1) "zhangsan" 2) "wangwu" 3) "lisi"
-
LLEN key
获取列表长度。服务器:0>lrange list1 0 10 1) "zhangsan" 2) "wangwu" 3) "lisi" 服务器:0>llen list1 "3"
-
LPOP key
弹出并获取列表的第一个元素。服务器:0>lrange list1 0 10 1) "zhangsan" 2) "wangwu" 3) "lisi" 服务器:0>lpop list1 "zhangsan" 服务器:0>lrange list1 0 10 1) "wangwu" 2) "lisi"
-
LPUSHX key value
将值插入到已经存在的列表的头部;不存在的不进行操作。服务器:0>lrange list1 0 10 1) "wangwu" 2) "lisi" 服务器:0>lpushx list1 zhangsan "3" 服务器:0>lrange list1 0 10 1) "zhangsan" 2) "wangwu" 3) "lisi" 服务器:0>lrange list3 0 10 服务器:0>lpushx list3 zhaoliu "0" 服务器:0>lrange list3 0 10
-
LRANGE key start stop
获取列表指定范围内的元素,全部是闭区间。服务器:0>lrange list1 0 10 1) "zhangsan" 2) "wangwu" 3) "lisi" 服务器:0>lrange list1 0 1 1) "zhangsan" 2) "wangwu"
-
LREM key count value
根据count的值移除列表中与value相同的元素。COUNT 的值可以是以下几种:
-
count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
-
count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
-
count = 0 : 移除表中所有与 VALUE 相等的值。
服务器:0>lrange list1 0 10 1) "zhangsan" 2) "jim" 3) "jim" 4) "lisi" 5) "zhangsan" 6) "wangwu" 7) "lisi" 服务器:0>lrem list1 1 jim "1" 服务器:0>lrange list1 0 10 1) "zhangsan" 2) "jim" 3) "lisi" 4) "zhangsan" 5) "wangwu" 6) "lisi" 服务器:0>lrem list1 -1 zhangsan "1" 服务器:0>lrange list1 0 10 1) "zhangsan" 2) "jim" 3) "lisi" 4) "wangwu" 5) "lisi" 服务器:0>lrem list1 0 lisi "2" 服务器:0>lrange list1 0 10 1) "zhangsan" 2) "jim" 3) "wangwu"
-
-
LSET key index value
通过索引设置列表元素的值。服务器:0>lindex list1 1 "jim" 服务器:0>lset list1 1 jim2 "OK" 服务器:0>lindex list1 1 "jim2"
-
LTRIM key start stop
对列表元素进行切片操作,只保留start到stop内的元素,闭区间。服务器:0>lrange list1 0 10 1) "zhangsan" 2) "jim2" 3) "wangwu" 服务器:0>ltrim list1 0 1 "OK" 服务器:0>lrange list1 0 10 1) "zhangsan" 2) "jim2"
-
RPOP key
弹出并获取列表的最后一个元素。服务器:0>lrange list1 0 10 1) "zhangsan" 2) "jim2" 服务器:0>rpop list1 "jim2" 服务器:0>lrange list1 0 10 1) "zhangsan"
-
RPOPLPUSH source destination
从source列表内弹出最后一个元素,并插入到destination列表内。服务器:0>lrange list1 0 10 1) "zhangsan" 服务器:0>lrange list2 0 10 1) "zhangsan" 服务器:0>rpoplpush list1 list2 "zhangsan" 服务器:0>lrange list1 0 10 服务器:0>lrange list2 0 10 1) "zhangsan" 2) "zhangsan"
-
RPUSH key value1 [value2…]
在列表最后插入一个或多个数据。服务器:0>lrange list1 0 10 服务器:0>rpush list1 zhangsan lisi wangwu "3" 服务器:0>lrange list1 0 10 1) "zhangsan" 2) "lisi" 3) "wangwu"
-
RPUSHX key value [value…]
在已存在的列表最后插入一个或多个数据。
服务器:0>lrange list1 0 10 1) "zhangsan" 2) "lisi" 3) "wangwu" 服务器:0>lrange list3 0 10 服务器:0>rpushx list3 zhaoliu liqi "0" 服务器:0>lrange list3 0 10 服务器:0>rpushx list1 zhaoliu liqi "5" 服务器:0>lrange list1 0 10 1) "zhangsan" 2) "lisi" 3) "wangwu" 4) "zhaoliu" 5) "liqi"
1.4、Set(集合)
Redis的Set是String类型的无序集合,集合内的元素是唯一的,不会出现重复的元素。
Redis内的集合是通过哈希表实现的,所以复杂度都是O(1)。
集合中最大的成员是为232-1。
1.4.1、基本命令
-
SADD key member1 [member2…]
向集合内添加一个或多个成员。服务器:0>sadd set1 abc def abc "2" 服务器:0>sadd set1 xyz def "1" 服务器:0>smembers set1 1) "xyz" 2) "def" 3) "abc"
-
SCARD key
获取集合的成员数。服务器:0>smembers set1 1) "xyz" 2) "def" 3) "abc" 服务器:0>scard set1 "3"
-
SDIFF key1 [key2…]
返回第一个集合与其他集合的差异。服务器:0>smembers set1 1) "xyz" 2) "def" 3) "abc" 服务器:0>smembers set2 1) "abc" 服务器:0>smembers set3 1) "def" 服务器:0>sdiff set1 set2 set3 1) "xyz"
-
SDIFFSTORE destination key1 [key2…]
将key1与其他集合的差异存到destination内。服务器:0>smembers set1 1) "xyz" 2) "def" 3) "abc" 服务器:0>smembers set2 1) "abc" 服务器:0>smembers set3 1) "def" 服务器:0>sdiffstore set4 set1 set2 set3 "1" 服务器:0>smembers set4 1) "xyz"
-
SINTER key1 [key2…]
返回给定所有集合的交集。服务器:0>smembers set1 1) "xyz" 2) "def" 3) "abc" 服务器:0>smembers set2 1) "abc" 服务器:0>smembers set3 1) "pot" 2) "abc" 3) "def" 服务器:0>sinter set1 set2 set3 1) "abc"
-
SINTERSTORE destination key1 [key2…]
将所有集合的交集存入destination内。服务器:0>sinter set1 set2 set3 1) "abc" 服务器:0>sinterstore set6 set1 set2 set3 "1" 服务器:0>smembers set6 1) "abc"
-
SISMEMBER key member
判断member元素是否在集合key的成员。服务器:0>smembers set1 1) "xyz" 2) "def" 3) "abc" 服务器:0>sismember set1 pot "0" 服务器:0>sismember set1 abc "1"
-
SMEMBER key
返回集合中所有的元素。服务器:0>smembers set1 1) "xyz" 2) "def" 3) "abc"
-
SMOVE source destination member
将source内的member元素移动到destina集合内。服务器:0>smembers set1 1) "xyz" 2) "def" 3) "abc" 服务器:0>smembers set2 1) "abc" 服务器:0>smove set1 set2 xyz "1" 服务器:0>smembers set2 1) "xyz" 2) "abc"
-
SPOP key
弹出集合内的一个随机元素。服务器:0>smembers set2 1) "xyz" 2) "abc" 服务器:0>spop set2 "abc" 服务器:0>smembers set2 1) "xyz"
-
SRANDMEMBER key [count]
随机返回集合key内的count个元素。服务器:0>smembers set1 1) "def" 2) "abc" 服务器:0>srandmember set1 1 1) "def" 服务器:0>srandmember set1 2 1) "abc" 2) "def"
-
SREM key member1 [member2…]
移除集合中一个或多个成员。服务器:0>smembers set1 1) "def" 2) "abc" 服务器:0>srem set1 abc "1" 服务器:0>smembers set1 1) "def"
-
SUNION key1 [key2…]
返回多个集合内的并集。服务器:0>smembers set1 1) "def" 服务器:0>smembers set2 1) "xyz" 服务器:0>smembers set3 1) "pot" 2) "abc" 3) "def" 服务器:0>sunion set1 set2 set3 1) "pot" 2) "abc" 3) "xyz" 4) "def"
-
SUNIONSTORE destination key1 [key2…]
将多个集合的并集添加到destination集合内。服务器:0>smembers set1 1) "def" 服务器:0>smembers set2 1) "xyz" 服务器:0>smembers set3 1) "pot" 2) "abc" 3) "def" 服务器:0>sunionstore set7 set1 set2 set3 "4" 服务器:0>smembers set7 1) "pot" 2) "abc" 3) "xyz" 4) "def"
-
SSCAN key cursor [MATCH pattern] [COUNT count]
迭代集合元素。
cursor:游标。
pattern:匹配模式。
count:指定从数据集里返回的元素,默认10.服务器:0>smembers set7 1) "pot" 2) "abc" 3) "xyz" 4) "def" 服务器:0>sscan set7 0 1) "0" 2) 1) "pot" 2) "abc" 3) "xyz" 4) "def" 服务器:0>sscan set7 0 match a* count 2 1) "1" 2) 1) "abc"
1.5、Sorted Set(有序集合)
Redis有序集合和集合一样也是string类型元素的集合,且不允许元素重复。
不同的是每个元素都会关联一个double类型的分数,Redis就是利用分数对集合内的元素进行从小到大的排序。
有序集合的成员是唯一的,分数不是唯一的。
集合是通过哈希表实现的,复杂度都是O(1),集合中最大的成员数是232-1。
1.5.1、基本命令
-
ZADD key score1 member1 [score2 member2…]
向集合内添加一个或多个成员,或者更新已存在成员。服务器:0>zadd zset 0 abc 1 def 2 xyz 3 pot 4 pot 5 jkl 6 lmn "6" 服务器:0>zrange zset 0 10 withscores 1) "abc" 2) "0" 3) "def" 4) "1" 5) "xyz" 6) "2" 7) "pot" 8) "4" 9) "jkl" 10) "5" 11) "lmn" 12) "6"
-
ZCARD key
获取有序集合的成员数。服务器:0>zcard zset "6"
-
ZCOUNT key min max
获取有序集合在指定区间内的成员数。服务器:0>zcount zset 0 2 "3"
-
ZINCRBY key increment member
对有序集合中指定成员的分数加上增量increment。服务器:0>zrange zset 0 10 withscores 1) "abc" 2) "0" 3) "def" 4) "1" 5) "xyz" 6) "2" 7) "pot" 8) "4" 9) "jkl" 10) "5" 11) "lmn" 12) "6" 服务器:0>zincrby zset 2 abc "2" 服务器:0>zrange zset 0 10 withscores 1) "def" 2) "1" 3) "abc" 4) "2" 5) "xyz" 6) "2" 7) "pot" 8) "4" 9) "jkl" 10) "5" 11) "lmn" 12) "6"
-
ZINTERSTORE destination numkeys key1 [key2…]
指定个数的有序集合的交集添加到destination有序集合内。默认情况下为分数相加。
服务器:0>zadd zset1 1 zhangsan 2 lisi "2" 服务器:0>zadd zset2 3 zhangsan 4 lisi "2" 服务器:0>zinterstore zset3 2 zset1 zset2 "2" 服务器:0>zrange zset3 0 10 withscores 1) "zhangsan" 2) "4" 3) "lisi" 4) "6"
-
ZLEXCOUNT key min max
获取所有分数全部相同的有序集合指定字典区间内的成员数量。服务器:0>zadd zset4 0 zhangsan 0 lisi 0 wangwu 0 zhaoliu "4" 服务器:0>zrange zset4 0 10 1) "lisi" 2) "wangwu" 3) "zhangsan" 4) "zhaoliu" 服务器:0>zlexcount zset4 [lisi [zhangsan "3"
-
ZRANGE key start stop [WITHSCORES]
通过索引区间返回有序集合指定区间内的成员。服务器:0>zrange zset4 0 10 1) "lisi" 2) "wangwu" 3) "zhangsan" 4) "zhaoliu"
-
ZRANGEBYSCORE key start stop [WITHSCORES] [LIMIT]
通过指定分数区间返回有序集合的成员。服务器:0>zrange zset 0 10 withscores 1) "def" 2) "1" 3) "abc" 4) "2" 5) "xyz" 6) "2" 7) "pot" 8) "4" 9) "jkl" 10) "5" 11) "lmn" 12) "6" 服务器:0>zrangebyscore zset 0 3 withscores 1) "def" 2) "1" 3) "abc" 4) "2" 5) "xyz" 6) "2"
-
ZREM key member1 [member2…]
移除一个或多个有序集合的成员。服务器:0>zrange zset 0 10 withscores 1) "def" 2) "1" 3) "abc" 4) "2" 5) "xyz" 6) "2" 7) "pot" 8) "4" 9) "jkl" 10) "5" 11) "lmn" 12) "6" 服务器:0>zrem zset abc def "2" 服务器:0>zrange zset 0 10 withscores 1) "xyz" 2) "2" 3) "pot" 4) "4" 5) "jkl" 6) "5" 7) "lmn" 8) "6"
-
ZREVRANGE key start stop [WITHSCORES]
返回指定区间内的有序集合成员,分数从高到低。服务器:0>zrevrange zset 0 10 withscores 1) "lmn" 2) "6" 3) "jkl" 4) "5" 5) "pot" 6) "4" 7) "xyz" 8) "2"
-
ZSCORE key member
返回有序集合成员的分数。服务器:0>zscore zset xyz "2"
上面就是Redis数据类型里面的基础常用函数,欢迎评论!