目录
一、字符串
1、说明
以key-value的方式存储数据。
2、操作命令
命令 | 说明 | 备注 |
SET key value | 设置指定 key 的值 | SET test 123456789 |
MSET key value [key value ...] | 同时设置一个或多个 key-value 对。 | MSET t1 aaa t2 bbb |
SETEX key seconds value | 设置指定 key 的值,并设置 key 的过期时间(秒) | |
PSETEX key milliseconds value | 设置指定 key 的值,并设置 key 的过期时间(毫秒) | |
SETNX key value | 只有在 key 不存在时设置 key 的值 | |
MSETNX key value [key value ...] | 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。 | |
GET key | 获取指定 key 的值。 | GET test |
MGET key1 [key2..] | 获取所有(一个或多个)给定 key 的值 | |
GETRANGE key start end | 返回 key 中字符串值的子字符 start:索引从0开始 end:结束索引位置 |
GETRANGE test 2 3 结果:34 |
GETSET key value | 将给定 key 的值设为 value ,并返回 key 的旧值(old value) | |
SETBIT key offset value | 对 key 所储存的数值,设置或清除指定偏移量上的位(bit); value:0或1 |
SETBIT testBit 200 1 |
GETBIT key offset | 对 key 所储存的数值,获取指定偏移量上的位(bit) | GETBIT testBit 200 结果:1 |
SETRANGE key offset value | 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。 offset :从0开始 |
SET test 111111 SETRANGE test 2 aaa GET test 结果:11aaa1 |
STRLEN key | 返回value值的长度。 | |
INCR key | 将value值增一; value必须存储整数; | key不存在的话会自动创建,value为1 |
INCRBY key increment | 将value值加上给定的增量值 value和increment都是整数 |
|
INCRBYFLOAT key increment | 将 key 所储存的值加上给定的浮点增量值 value和increment可以是浮点数 |
|
DECR key | 将 key 中储存的数字值减一 | |
DECRBY key decrement | key 所储存的值减去给定的减量值(decrement) | |
APPEND key value | 如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾 |
3、应用场景
3.1 记录状态
通过SETBIT命令设置偏移量来实现。
setbit userStatus 100 1 (将用户ID为100的用户设置为在线状态)
例如:用户是否在线,用户是否观看过某篇文章或者视频等
3.2 统计
将value值设置为整数类型,使用 INCR命令来实现value增长。
例如:统计在线用户数量,统计文章阅读量等。
3.3 缓存数据
用户登陆token、热点数据等
3.4 手机验证码
设置用户登陆手机验证码(五分钟过期): setex login:18046XXXX 300 684953
二、哈希
1、说明
一个string类型的field和value的映射表,适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
2、操作命令
命令 | 说明 | 备注 |
HSET key field value | 将哈希表 key 中的字段 field 的值设为 value | 也可以加多个key-value 例:HSET test k1 111 k2 222 |
HSETNX key field value | 只有在字段 field 不存在时,设置哈希表字段的值 | |
HMSET key field1 value1 [field2 value2 ] | 批量设置key中的字段和值 | |
HGET key field | 获取存储在哈希表中指定字段的值 | |
HMGET key field1 [field2] | 获取所有给定字段的值 | |
HGETALL key | 获取在哈希表中指定 key 的所有字段和值 | |
HKEYS key | 获取哈希表中所有字段key | |
HVALS key | 获取哈希表中所有值value | |
HLEN key | 获取哈希表中字段的数量 | |
HSCAN key cursor [MATCH pattern] [COUNT count] | 迭代哈希表中的键值对 | |
HINCRBY key field increment | 为哈希表 key 中的指定字段的整数值加上增量 increment | |
HINCRBYFLOAT key field increment | 为哈希表 key 中的指定字段的浮点数值加上增量 increment | |
HEXISTS key field | 查看哈希表 key 中,指定的字段是否存在 | |
HDEL key field1 [field2] | 删除一个或多个哈希表字段 | HDEL test k1 |
3、应用场景
3.1 存储、读取、修改对象
例如:存储用户ID为100,姓名为小熊,电话为1804152XXXX,性别为男的用户信息
HMSET userInfo:100 userName 小熊 userPhone 1804152XXXX sex 男
三、列表
1、说明
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)
2、操作命令
命令 | 说明 | 备注 |
LPUSH key value1 [value2] | 将一个或多个值插入到列表头部 | LPUSH test 3 2 5 |
RPUSH key value1 [value2] | 将一个或多个值插入到列表尾部 | |
LPUSHX key value | 将一个值插入到已存在的列表头部 | 列表必须已经存在 |
RPUSHX key value | 将一个值插入到已存在的列表尾部 | |
LSET key index value | 通过索引设置列表元素的值 | LSET test 0 1 将索引为0的值设置为1 |
LPOP key | 移除列表的第一个元素,返回值为移除的元素 | |
RPOP key | 移除列表的最后一个元素,返回值为移除的元素 | |
RPOPLPUSH source destination | 移除列表的最后一个元素,并将该元素添加到另一个列表并返回 | RPOPLPUSH test test1 将test列表中最后一个元素移除,并将该元素添加到test1集合中 |
LINDEX key index | 通过索引获取列表中的元素 | |
LRANGE key start stop | 获取列表指定范围内的元素 | LRANGE test 0 2 |
LINSERT key BEFORE|AFTER pivot value | 在列表的pivot元素第一次出现的前或者后插入元素 | LINSERT test BEFORE 2 a 在test列表中第一个值为2的元素前面插入值a;返回当前列表长度 |
LLEN key | 获取列表长度 | |
LREM key count value | 移除列表元素; count = 0 ;移除全部值为value的元素 count > 0 ; 从左边开始移除count个值为value的元素 count < 0 ; 从右边开始移除-count个值为value的元素 |
LREM test -3 a 从右边开始删除值为a的元素,删除3个 |
LTRIM key start stop | 对一个列表进行修剪(trim),删除指定范围之外的数据 strat:开始位置(索引从0开始) stop:结束位置(索引从0开始) 注意:当stop小于start的时候会删除所有元素 |
LTRIM test 5 6 保留列表中索引位置为5 - 6的元素,其他元素全部删除 |
BLPOP key1 [key2 ] timeout | 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 timeout:等待超时时间(秒) |
|
BRPOP key1 [key2 ] timeout | 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 timeout:等待超时时间(秒) |
|
BRPOPLPUSH source destination timeout | 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
3、应用场景
3.1 构造队列
使用lpush和rpop实现队列
3.2 构造栈
使用lpush和lpop实现栈
3.3 记录前五百最新登陆用户ID
使用lpush追加用户ID,ltrim test 0 499 截取保留最新五百名
四、集合
1、说明
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
2、操作命令
命令 | 说明 | 备注 |
SADD key value1 [value2] | 向集合添加一个或多个成员 | SADD test 1111 2222 |
SMEMBERS key | 返回集合中的所有成员 | |
SRANDMEMBER key [count] | 返回集合中一个或多个随机数 | |
SREM key member1 [member2] | 移除集合中一个或多个成员 | |
SCARD key | 获取集合的成员数量 | |
SUNION key1 [key2] | 返回所有给定集合的并集 | |
SUNIONSTORE destination key1 [key2] | 所有给定集合的并集存储在 destination 集合中 | |
SDIFF key1 [key2] | 返回给定所有集合的差集 从key1集合中排除掉也存在于[key2]的元素 |
|
SDIFFSTORE destination key1 [key2] | 返回给定所有集合的差集并存储在 destination 中 | |
SINTER key1 [key2] | 返回给定所有集合的交集 | |
SINTERSTORE destination key1 [key2] | 返回给定所有集合的交集并存储在 destination 中 | |
SISMEMBER key member | 判断 member 元素是否是集合 key 的成员 | |
SMOVE source destination member | 将 member 元素从 source 集合移动到 destination 集合 | |
SPOP key | 移除并返回集合中的一个随机元素 | |
SSCAN key cursor [MATCH pattern] [COUNT count] | 迭代集合中的元素 cursor:游标值,从0开始,下次迭代应该从前一次返回的值开始。 match:匹配方式 count :获取的数据量,不一定按严格按照count返回, 有可能会多一些,只要迭代值不返回0,就说明还能继续获取数据 |
3、应用场景
3.1 共同好友
使用sinter xiaoxiongFriends xiaowangFriends计算交集的方式得到两个人的共同好友列表
3.2 点赞功能
集合中的成员是唯一的,所以限制一个人多次点赞。
sadd userID sceneID 返回1点赞成功,返回0重复点赞
3.3 统计访问网站的所有ip
五、有序集合
1、说明
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
2、操作命令
命令 | 说明 | 备注 |
ZADD key score1 member1 [score2 member2] | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 | ZADD test 1 a 5 c 3 b 6 e |
ZCARD key | 获取有序集合的成员数 | |
ZCOUNT key min max | 计算在有序集合中指定区间分数的成员数 |
max >= min 包含min和max |
ZINCRBY key increment member | 有序集合中对指定成员的分数加上增量 increment | 集合和member不存在的话会自动创建 |
ZINTERSTORE destination numkeys key [key ...] | 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中 | |
ZLEXCOUNT key min max | 在有序集合中计算指定字典区间内成员数量 | |
ZRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合成指定区间内的成员 WITHSCORES:带上分数 返回结果根据分数从小到大排序 |
ZRANGE test 1 100 WITHSCORES |
ZREVRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合成指定区间内的成员 WITHSCORES:带上分数 返回结果根据分数从大到小排序 |
|
ZRANGEBYLEX key min max [LIMIT offset count] | 通过字典区间(value,不是分数)返回有序集合的成员 min和max的取值: +:正无穷 -:负无穷 ( :开区间(指定的值不被包含) [:闭区间(指定的值被包含) |
ZRANGEBYLEX test - (c 结果: a b |
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 | 移除有序集合中给定的分数区间的所有成员 | |
ZREVRANGEBYSCORE key max min [WITHSCORES] | 返回有序集中指定分数区间内的成员,分数从高到低排序 | |
ZREVRANK key member | 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序 | |
ZSCORE key member | 返回有序集中,成员的分数值 | |
ZUNIONSTORE destination numkeys key [key ...] | 计算给定的一个或多个有序集的并集,并存储在新的 key 中 | |
ZSCAN key cursor [MATCH pattern] [COUNT count] | 迭代有序集合中的元素(包括元素成员和元素分值) |
3、应用场景
3.1 访问排行榜
将商品ID为200的商品访问量增一: zincrby commodityOrder 1 200