string
哈希类型
列表类型
集合类型
有序集合类型
通用命令
批量删除key
string
是Redis最基本的类型,可以理解为memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或序列化的对象。
一个redis中字符串values最多可以是512M。建议控制在100K以内(考虑并发和网络流量)。可以存字符串,数字,位图,内部会自动转换。
使用场景:缓存;计数器;分布式锁
命令原型 | 时间复杂度 | 命令描述 | 返回值 |
APPEND | O(1) | 如果该Key已经存在,APPEND命令将参数Value的数据追加到已存在Value的末尾。如果该Key不存在,APPEND命令将会创建一个新的Key/Value。 | 追加后Value的长度。 |
DECR | O(1) | 将指定Key的Value原子性的递减1。如果该Key不存在,其初始值为0,在decr之后其值为-1。如果Value的值不能转换为整型值,如Hello,该操作将执行失败并返回相应的错误信息。注意:该操作的取值范围是64位有符号整型。 | 递减后的Value值。 |
INCR | O(1) | 将指定Key的Value原子性的递增1。如果该Key不存在,其初始值为0,在incr之后其值为1。如果Value的值不能转换为整型值,如Hello,该操作将执行失败 | 递增后的Value值。 |
并返回相应的错误信息。注意:该操作的取值范围是64位有符号整型。 | |||
DECRBY | O(1) | 将指定Key的Value原子性的减少decrement。如果该Key不存在,其初始值为0,在decrby之后其值为-decrement。如果Value的值不能转换为整型值, | 减少后的Value值。 |
如Hello,该操作将执行失败并返回相应的错误信息。注意:该操作的取值范围是64位有符号整型。 | |||
INCRBY | O(1) | 将指定Key的Value原子性的增加increment。如果该Key不存在,其初始值为0,在incrby之后其值为increment。如果Value的值不能转换为整型值,如Hello,该操作将执行失败并返回相应的错误信息。注意:该操作的取值范围是64位有符号整型。 | 增加后的Value值。 |
GET | O(1) | 获取指定Key的Value。如果与该Key关联的Value不是string类型,Redis将返回错误信息,因为GET命令只能用于获取string Value。 | 与该Key相关的Value,如果该Key不存在,返回nil。 |
SET | O(1) | 设定该Key持有指定的字符串Value,如果该Key已经存在,则覆盖其原有值。 | 总是返回"OK"。 |
GETSET | O(1) | 原子性的设置该Key为指定的Value,同时返回该Key的原有值。和GET命令一样,该命令也只能处理string Value,否则Redis将给出相关的错误信息。 | 返回该Key的原有值,如果该Key之前并不存在,则返回nil。 |
STRLEN | O(1) | 返回指定Key的字符值长度,如果Value不是string类型,Redis将执行失败并给出相关的错误信息。 | 返回指定Key的Value字符长度,如果该Key不存在,返回0。 |
SETEX | O(1) | 原子性完成两个操作,一是设置该Key的值为指定字符串,同时设置该Key在Redis服务器中的存活时间(秒数)。该命令主要应用于Redis被当做Cache服务器使用时。 | |
SETNX | O(1) | 如果指定的Key不存在,则设定该Key持有指定字符串Value,此时其效果等价于SET命令。相反,如果该Key已经存在,该命令将不做任何操作并返回。 | 1表示设置成功,否则0。 |
SETRANGE | O(1) | 替换指定Key的部分字符串值。从offset开始,替换的长度为该命令第三个参数value的字符串长度,其中如果offset的值大于该Key的原有值Value的字符串长度,Redis将会在Value的后面补齐(offset - strlen(value))数量的0x00,之后再追加新值。如果该键不存在,该命令会将其原值的长度假设为0,并在其后添补offset个0x00后再追加新值。鉴于字符串Value的最大长度为512M,因此offset的最大值为536870911。最后需要注意的是,如果该命令在执行时致使指定Key的原有值长度增加,这将会导致Redis重新分配足够的内存以容纳替换后的全部字符串,因此就会带来一定的性能折损。 | 修改后的字符串Value长度。 |
GETRANGE | O(1) | 如果截取的字符串长度很短,我们可以该命令的时间复杂度视为O(1),否则就是O(N),这里N表示截取的子字符串长度。该命令在截取子字符串时,将以闭区间的方式同时包含start(0表示第一个字符)和end所在的字符,如果end值超过Value的字符长度,该命令将只是截取从start开始之后所有的字符数据。 | 子字符串 |
SETBIT | O(1) | 设置在指定Offset上BIT的值,该值只能为1或0,在设定后该命令返回该Offset上原有的BIT值。如果指定Key不存在,该命令将创建一个新值,并在指定的Offset上设定参数中的BIT值。如果Offset大于Value的字符长度,Redis将拉长Value值并在指定Offset上设置参数中的BIT值,中间添加的BIT值为0。最后需要说明的是Offset值必须大于0。 | 在指定Offset上的BIT原有值。 |
GETBIT | O(1) | 返回在指定Offset上BIT的值,0或1。如果Offset超过string value的长度,该命令将返回0,所以对于空字符串始终返回0。 | 在指定Offset上的BIT值。 |
MGET | O(N) | N表示获取Key的数量。返回所有指定Keys的Values,如果其中某个Key不存在,或者其值不为string类型,该Key的Value将返回nil。 | 返回一组指定Keys的Values的列表。 |
MSET | O(N) | N表示指定Key的数量。该命令原子性的完成参数中所有key/value的设置操作,其具体行为可以看成是多次迭代执行SET命令。 | 该命令不会失败,始终返回OK。 |
MSETNX | O(N) | N表示指定Key的数量。该命令原子性的完成参数中所有key/value的设置操作,其具体行为可以看成是多次迭代执行SETNX命令。然而这里需要明确说明的是,如果在这一批Keys中有任意一个Key已经存在了,那么该操作将全部回滚,即所有的修改都不会生效。 | 1表示所有Keys都设置成功,0则表示没有任何Key被修改。 |
哈希类型
redis hash是一个键值对集合
redis hash 是一个String 类型的field和value的映射表,hash特别适合用于存储对象
类型java里面的MAP(string,object)
操作 | 时间复杂度 | 说明 |
HSET key field value | 将哈希表 key 中的字段 field 的值设为 value 。 | |
HMSET key field1 value1 [field2 value2 ] | 同时将多个 field-value (域-值)对设置到哈希表 key 中。 | |
HSETNX key field value | 只有在字段 field 不存在时,设置哈希表字段的值。 | |
HGET key field | 获取存储在哈希表中指定字段的值。 | |
HMGET key field1 [field2] | 获取所有给定字段的值 | |
HKEYS key | 获取所有哈希表中的字段 | |
HVALS key | 获取哈希表中所有值 | |
HGETALL key | 获取在哈希表中指定 key 的所有字段和值 | |
HEXISTS key field | 查看哈希表 key 中,指定的字段是否存在。 | |
HLEN key | 获取哈希表中字段的数量 | |
HDEL key field1 [field2] | 删除一个或多个哈希表字段 | |
HINCRBY key field increment | 为哈希表 key 中的指定字段的整数值加上增量 increment 。 | |
HSCAN key cursor [MATCH pattern] [COUNT count] | 迭代哈希表中的键值对。 |
形式 | 优点 | 缺点 |
string 序列化{json} | 编程简单,可能节约内存 | 序列化开销,设置属性操作整个数据 |
hash | 直观,节省空间,可以部分更新 | 编程稍复杂,ttl不好控制 |
列表类型
redis列表是简单的字符串列表,按照插入顺序,你可以添加一个元素导列表的头部(左方)或尾部,它的底层实际是一个链表。
list是一个字符串链表,left ,right都可以插入,如果键不存在创建新的链表,如果键已存在,新增内容,如果值全部移除,对应的键也就消失了。链表的操作无论是头是尾部效率都极高,但假如是对中间元素进行操作,效率就不怎么样了。
命令 | 时间复杂度 | 说明 |
RPUSH key value1 [value2] | 在列表中添加一个或多个值(怎么进怎么出) | |
LPUSH key value1 [value2] | 将一个或多个值插入到列表头部 | |
RPUSHX key value | 为已存在的列表添加值 | |
LPUSHX key value | 将一个值插入到已存在的列表头部 | |
LINSERT key BEFORE | 在列表的元素前插入元素 | |
AFTER pivot value | 在列表的元素后插入元素 | |
LSET key index value | 通过索引设置列表元素的值 | |
LRANGE key start stop | 获取列表指定范围内的元素 LRANGE key 0 -1 | |
LPOP key | 移出并获取列表的第一个元素 | |
RPOP key | 移除并获取列表最后一个元素 | |
LINDEX key index | 通过索引获取列表中的元素 | |
BLPOP key1 [key2 ] timeout | 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 | |
BRPOP key1 [key2 ] timeout | 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 | |
LREM key count value | 移除列表元素 | |
BRPOPLPUSH source destination timeout | 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 | |
LLEN key | 获取列表长度 | |
LTRIM key start stop | 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 | |
RPOPLPUSH source destination | 移除列表的最后一个元素,并将该元素添加到另一个列表并返回 |
集合类型
redis的set 是string类型的无序集合,它是通过hash table实现的。
命令 | 时间复杂度 | 说明 |
SADD key member1 [member2] | 向集合添加一个或多个成员 | |
SMEMBERS key | 返回集合中的所有成员 | |
SSCAN key cursor [MATCH pattern] [COUNT count] | 迭代集合中的元素 | |
SREM key member1 [member2] | 移除集合中一个或多个成员 | |
SPOP key | 移除并返回集合中的一个随机元素 | |
SCARD key | 获取集合的成员数 | |
SISMEMBER key member | 判断 member 元素是否是集合 key 的成员 | |
SDIFF key1 [key2] | 返回给定所有集合的差集 | |
SUNION key1 [key2] | 返回所有给定集合的并集 | |
SUNIONSTORE destination key1 [key2] | 所有给定集合的并集存储在 destination 集合中 | |
SINTERSTORE destination key1 [key2] | 返回给定所有集合的交集并存储在 destination 中 | |
SDIFFSTORE destination key1 [key2] | 返回给定所有集合的差集并存储在 destination 中 | |
SINTER key1 [key2] | 返回给定所有集合的交集 | |
SMOVE source destination member | 将 member 元素从 source 集合移动到 destination 集合 | |
SRANDMEMBER key [count] | 返回集合中一个或多个随机数 |
有序集合类型
redis zset和set一样也是string类型的集合,且不允许重复成员
不同的是每个元素都会关联一个double类型的分数
redis正是通过分数来为集合中的成员进行从大到小的排序的,zset的成员是唯一的,但分数(score)却可以重复
命令 | 时间复杂度 | 说明 |
ZADD key score1 member1 [score2 member2] | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 | |
ZCARD key | 获取有序集合的成员数 | |
ZCOUNT key min max | 计算在有序集合中指定区间分数的成员数 | |
ZINCRBY key increment member | 有序集合中对指定成员的分数加上增量 increment | |
ZINTERSTORE destination numkeys key [key ...] | 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中 | |
ZLEXCOUNT key min max | 在有序集合中计算指定字典区间内成员数量 | |
ZRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合成指定区间内的成员 | |
ZRANGEBYLEX key min max [LIMIT offset count] | 通过字典区间返回有序集合的成员 | |
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] | 通过分数返回有序集合指定区间内的成员 | |
ZRANK key member | 返回有序集合中指定成员的索引 | |
ZREM key member [member ...] | 移除有序集合中的一个或多个成员 | |
ZREMRANGEBYLEX key min max | 移除有序集合中给定的字典区间的所有成员 | |
ZREMRANGEBYRANK key start stop | 移除有序集合中给定的排名区间的所有成员 | |
ZREMRANGEBYSCORE key min max | 移除有序集合中给定的分数区间的所有成员 | |
ZREVRANGE key start stop [WITHSCORES] | 返回有序集中指定区间内的成员,通过索引,分数从高到底 | |
ZREVRANGEBYSCORE key max min [WITHSCORES] | 返回有序集中指定分数区间内的成员,分数从高到低排序 | |
ZREVRANK key member | 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序 | |
ZSCORE key member | 返回有序集中,成员的分数值 | |
ZUNIONSTORE destination numkeys key [key ...] | 计算给定的一个或多个有序集的并集,并存储在新的 key 中 | |
ZSCAN key cursor [MATCH pattern] [COUNT count] | 迭代有序集合中的元素(包括元素成员和元素分值) |
通用命令
命令 | 作用 |
EXPIRE key seconds | 为给定 key 设置过期时间 |
KEYS | keys * 命令一般不在生产环境中使用 |
RANDOMKEY | 从当前数据库中随机返回一个 key |
DBSIZE | 查看当前数据库中key的数量 |
EXISTS key | 检查 key 是否存在。存在返回1,不存在返回0 |
DEL key [key...] | 该命令用于在 key 存在时删除 key。 |
EXPIREAT key timestamp | EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp) |
TTL key | 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。-1表示key存在,且没有过期时间,-2表示key不存在 |
PERSIST key | 移除 key 的过期时间,key 将持久保持。 |
TYPE key | 返回key的类型 |
MOVE key db | 将当前数据库的 key 移动到给定的数据库 db 当中。 |
RENAMENX key newkey | 仅当 newkey 不存在时,将 key 改名为 newkey |
DUMP key | 序列化给定 key ,并返回被序列化的值。 |
info | 查看服务器基本信息 |
config get * | 获取服务器的参数配置 |
flushdb | 清空当前数据库 |
flushall | 清空所有的数据库 |
批量删除key
redis-cli -h 127.0.0.1 -p 6379 -a123456 -n 0 keys "xxx*" | xargs redis-cli -h 127.0.0.1 -p 6379 -a123456 -n 0 del
批量执行命令
cat redis.txt
set aaa 123
set bbb 456
unix2dos redis.txt # yum install unix2dos
cat redis.txt | redis-cli -h 127.0.0.1 -p 6379 -a 123456 --pipe