Redis 是一个开源的、key-value 结构的、非关系型数据库。它支持存储的 value 类型相对更多,包括 String(字符串)、List(列表)、Set(集合)、Sorted Set(有序集合) 和 Hash(哈希),而且这些操作都是原子性的。在此基础上,Redis 支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中。Redis 可以周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
通过Redis客户端连接工具可以看到,Redis默认有16个数据库。由于Redis不支持自定义数据库的名字,所以每个数据库都以编号命名。
通过redis配置文件 redis.conf 也可以看出默认是16个数据库。我们连接redis默认使用的是0号数据库,可以通过命令 select dbid 进行切换,编号是 0 至 databases-1。
KEYS pattern
生产上禁止,更安全的做法是采用scan,操作如下:
因为keys命令会一次性地遍历整个数据库来获取所有与给定模式相匹配的键,所以随着数据库包含的键值对越来越多,这个命令的执行也会越来越慢,而对一个非常大的数据库执行keys命令,将导致服务器阻塞 一段时间。为了解决这个问题,Redis从2.8.0版本开始提供scan命令,这个命令可以以渐进的方式,分多次遍历整个数据库,并返回匹配给定模式的键。scan家族相关命令有scan,sscan,hscan和zscan,命令如下:
# 遍历的是当前数据库的所有key组成的集合
SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
# 遍历一个set里的所有元素
SSCAN key cursor [MATCH pattern] [COUNT count]
# 遍历一个哈希表的所有元素,返回的list是key1,field1,key2,field2…的形式
HSCAN key cursor [MATCH pattern] [COUNT count]
# 遍历zset,返回的zset中包含对应的元素和它的分数score
ZSCAN key cursor [MATCH pattern] [COUNT count]
EXISTS [key ...]
DEL [key ...]
TYPE key
RANDOMKEY
RENAME key newkey
如果newkey存在,将会被覆盖,返回0k表示成功,其他表示失败。失败原因可能是key不存在或者和newkey相同
RENAMENX key newkey
EXPIRE key seconds [NX|XX|GT|LT]
EXPIREAT key unix-time-seconds [NX|XX|GT|LT]
PEXPIRE key milliseconds [NX|XX|GT|LT]
PEXPIREAT key unix-time-milliseconds [NX|XX|GT|LT]
返回1成功,0失败。
NX:只有key没有设置过期时间时,才能设置过期时间
XX:只有key存在过期时间时,才能设置过期
GT:只有新设置的过期时间比当前的(过期时间)更大,才能设置过期时间
LT:只有新设置的过期时间比当前的(过期时间)更小,才能设置过期时间
TTL key
返回设置过过期时间的key的剩余过期秒数 -1表示没有设置过过期时间,对于不存在的key,返
回-2。
PTTL key
以毫秒返回过期时间。
PERSIST key
消除key超时:返回1成功,0失败。
SET key value [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL
成功返回ok,其中超时参数前面已经解释了,如果key已经存在则覆盖
SETNX key value
仅当key不存在时才set,如果key已经存在,返回0,nx 是not exist的意思
MSET key value [key value ...]
一次设置多个key的值,成功返回ok。如果key已经存在,则覆盖原来的value
MSETNX key value [key value ...
仅当key不存在时才set,只要其中 一个key存在,则全部失败返回0
GET key
如果key不存在返回nil
GETSET key value
原子的设置key的值,并返回key的旧值。如果key不存在返回nil。应用场景:设置新值,返回
旧值,配合setnx可实现分布式锁。
MGET key [key ...]
一次获取多个key的值,如果对应key不存在,则对应返回nil
INCR key
对key的值做加加操作,并返回新的值。incr一个不是int的value会返回错误,incr一个不存
在的key,key的值会先被初始化为0 ,然后再执行 INCR 操作,返回为1。
DECR key
同上,incr一个不存在的key,key的值会先被初始化为 0 ,然后再执行DECR操作,返回为-1。
INCRBY key increment
同incr,加指定值 ,key不存在时候会设置key,并认为原来的value是0
DECRBY key decrement
同decr,减指定值。decrby完全是为了可读性,我们完全可以通过incrby一个负值来实现同样
效果,反之一样。
INCRBYFLOAT key increment
为字符串key的值加上浮点数增量,没有对应DECRBYFLOAT,可以给定负值来实现。
APPEND key value
返回新字符串值的长度
SUBSTR key start end
返回截取过的key的字符串值,并不修改key的值。下标是从0开始的
SETRANGE key offset value
用value参数覆写(overwrite)给定key所储存的字符串值,从偏移量offset 开始。 不存在的key
当作空白字符串处理。
GETRANGE key start end
返回key中字符串值的子字符串,字符串的截取范围由start和end两个偏移量决定(包括start和end在内)。可以使用负值,字符串最右边下标是-1。
STRLEN key
返回key的值得长度,如果key不存在则返回0
SETBIT key offset value
设置key对应的值的二进制offset的值
GETBIT key offset
获取key的值对应位置的二进制
LPUSH key element [element ...
RPUSH key element [element ...]
在key对应的list添加字符串元素,L:代表左Push,R:代表右Push,成功返回list的长度,失败返回0。一般从左端Push,右端Pop,即LPush/RPop。
LPUSHX key element [element ...]
RPUSHX key element [element ...]
在key对应的list添加字符串元素,如果key不存在,则不作任何操作。
LINSERT key BEFORE|AFTER pivot element
在key对应list的特定位置之前或之后添加字符串元素
LLEN key
返回key对应list的长度,key对应类型不是list则返回0,key不存在返回错误。
LINDEX key index
返回名称为key的list中index位置的元素
LRANGE key start stop
返回指定区间内的元素,下标从0开始,负值表示从后面计算,-1表示倒数第一个元素 ,key
不存在返回空列表。
LTRIM key start stop
保留指定区间内元素,成功返回1。
LPOP key [count]
RPOP key [count]
从list的头部删除元素,并返回删除元素。如果key对应list不存在或者key对应值不是lis返回为空。
LREM key count element
从key对应list中删除count个和value相同的元素。count为0时候删除全部,count为正,则删
除匹配count个元素,如果为负数,则是从右侧扫描删除匹配count个元素。
LSET key index element
成功返回1,key或者下标不存在返回错误
BLPOP key [key ...] timeout
BRPOP key [key ...] timeout
从头部/尾部删除一个元素,如果list是空或不存在,则会阻塞timeout秒,timeout为0表示一直阻塞。
SADD key member [member ...]
成功返回添加数量,如果元素在集合中返回0
SREM key member [member ...]
成功返回删除数量,如果member在集合中不存在或者key不存在返回0,如果key对应的不是set类型
的值返回错误。
SPOP key [count]
如果set是空或者key不存在返回空
SRANDMEMBER key [count]
同spop,随机取set中的一个元素,但是不删除元素。
SMOVE source destination member
从source对应set中移除member并添加到destination对应set中,整个操作是原子的。成功返回1,
如果member在srckey中不存在返回0,如果key不是set类型返回错误。
SCARD key
如果set是空或者key不存在返回0
SISMEMBER key member
存在返回1,0表示不存在或者key不存在。
SINTER key [key ...]
返回所有给定key的交集
SINTERSTORE destination key [key ...
同SINTER,但是会同时将交集存到destination下
SUNION key [key ...]
返回所有给定key的并集
SUNIONSTORE destination key [key ...]
同SUNIONSTORE,但是会同时将交集存到destination下
SDIFF key [key ...]
返回所有给定key的差集
SDIFFSTORE destination key [key ...]
同SDIFF,但是会同时将交集存到destination下
SMEMBERS key
返回key对应set的所有元素,结果是无序的,生产上禁止,可以使用使用SSCAN
ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]
ZREM key member [member ...]
1表示成功,如果元素不存在返回0
ZREMRANGEBYLEX key min max
删除有序集合中给定的字典区间的所有成员
ZREMRANGEBYSCORE key min max
删除集合中score在给定区间的元素
ZINCRBY key increment member
增加对应member的score值,然后移动元素并保持skip list保持有序。返回更新后的score值,
可以为负数递减
ZRANK key member
返回指定元素在集合中的排名(下标,注意不是分数),集合中元素是按score从小到大排序的
ZRANGE key min max [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]
类似lrange操作从集合中去指定区间的元素。返回的是有序结果
ZREVRANGE key start stop [WITHSCORES]
同上,返回结果是按score逆序的,如果需要得分则加上withscores
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
返回给定分数区间的元素
ZCOUNT key min max
返回集合中score在给定区间的数量
ZCARD key
ZSCORE key member
HSET key field value [field value ...]
将哈希表key的域field的值设置为value,返回值为新创建的field域的个数,对于已经存在的域进行了value的覆写,是不计算在返回值中的。
HGET key field
获取指定的hash field
HMGET key field [field ...]
获取全部指定的hash filed
HMSET key field value [field value ...]
同时设置hash的多个field
HINCRBY key field increment
将指定的hash filed 加上给定值, 如果filed不是integer则报错
HEXISTS key field
测试指定field是否存在
HDEL key field [field ...]
删除指定的hash field
HLEN key
返回指定hash的field数量
HKEYS key
返回hash的所有field
HVALS key
返回hash的所有value
HGETALL key