1. 字符串 String
1.1 简单介绍
string是redis最基本的类型,一个key对应一个value。
string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M
1.2 常用命令
SET key value
:设置指定 key 的值GET key
:获取指定 key 的值GETSET key value
:将给定 key 的值设为 value ,并返回 key 的旧值(old value)GETRANGE key start end
:返回 key 中字符串值的子字符(下标从start到end)MGET key1 [key2..]
: 获取所有(一个或多个)给定 key 的值SETNX key value
:只有在 key 不存在时设置 key 的值MSET key value [key value ...]
:同时设置一个或多个 key-value 对MSETNX key value [key value ...]
: 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在才会执行SETRANGE key offset value
: 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始INCR key
:将 key 中储存的数字值增一INCRBY key increment
:将 key 所储存的值加上给定的增量值(increment)DECR key
:将 key 中储存的数字值减一DECRBY key decrement
:将 key 所储存的值减去给定的减量值(decrement)APPEND key value
:如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾
1.3 应用场景
记录视频的点赞数量,每当有用户对视频进行点赞,程序就可以调用命令INCR key
将对应key的值加一
2. 列表 list
2.1 简单介绍
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
它的底层实际是个双端链表,最多可以包含 2^32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)
2.2 常用命令
LPUSH key value1 [value2]
:将一个或多个值插入到列表头部(最左边)RPUSH key value1 [value2]
:将一个或多个值插入到列表的尾部(最右边)LRANGE key start stop
:返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。LPOP key
:从左边移出并获取列表的第一个元素(整个列表的第一个元素)RPOP key
:从右边移除并获取列表的第一个元素(整个列表的最后一个元素)LINDEX key index
:通过索引获取列表中的元素LLEN key
:获取列表长度LREM key count value
:根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。- count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
- count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
- count = 0 : 移除表中所有与 VALUE 相等的值。
LTRIM key start stop
:对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除RPOPLPUSH source destination
:移除列表的最后一个元素,并将该元素添加到另一个列表并返回。LSET key index value
:通过索引设置列表元素的值LINSERT key BEFORE|AFTER pivot value
:在列表的元素前或者后插入元素
2.3 应用场景
使用list存储公众号中的文章,list中每一个元素就代表一篇文章
3. 哈希 hash
3.1 简单介绍
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表 ,hash 特别适合用于存储对象。
其数据结构定义类似于Map<String, Map<String, String>>
Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)
3.2 常用命令
HDEL key field2 [field2]
:删除一个或多个哈希表字段HEXISTS key field
:查看哈希表 key 中,指定的字段是否存在。HGET key field
:获取存储在哈希表中指定字段的值HGETALL key
:获取在哈希表中指定 key 的所有字段和值HINCRBY key field increment
:为哈希表 key 中的指定字段的整数值加上增量 incrementHINCRBYFLOAT key field increment
:为哈希表 key 中的指定字段的浮点数值加上增量 incrementHKEYS key
:获取所有哈希表中的字段HLEN key
:获取哈希表中字段的数量HMGET key field1 [field2]
:获取所有给定字段的值HMSET key field1 value1 [field2 value2 ]
:同时将多个 field-value (域-值)对设置到哈希表 key 中HSET key field value
:将哈希表 key 中的字段 field 的值设为 valueHSETNX key field value
:只有在字段 field 不存在时,设置哈希表字段的值HVALS key
:获取哈希表中所有值
3.3 应用场景
购物车,存放购物车中的商品id及数量,key为购物车编号,用来区分不用用户的购物车数据。field为商品id,对应的value为该商品的购买数量
4. 集合 set
4.1 简单介绍
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,集合对象的编码可以是 intset 或者 hashtable。
Redis 中Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中==最大的成员数为 2^32 - 1 ==(4294967295, 每个集合可存储40多亿个成员)
4.2 常用命令
SADD key member1 [member2]
:向集合添加一个或多个成员SCARD key
:获取集合的成员数SISMEMBER key member
:判断 member 元素是否是集合 key 的成员SREM key member1 [member2]
:移除集合中一个或多个成员SCARD key
:获取集合的成员数SRANDMEMBER key [count]
:返回集合中count个随机数SPOP key
:移除并返回集合中的一个随机元素SMOVE source destination member
:将 member 元素从 source 集合移动到 destination 集合SDIFF key1 [key2]
:返回给定所有集合的差集SUNION key1 [key2]
:返回所有给定集合的并集SINTER key1 [key2]
:返回给定所有集合的交集
4.3 应用场景
微信抽奖小程序,可以使用命令SRANDMEMBER key [count]
随机弹出给定数量的用户
5. 有序集合 zset
5.1 简单介绍
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
zset集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 2^32 - 1
5.2 常用命令
ZADD key score1 member1 [score2 member2]
:向有序集合添加一个或多个成员,或者更新已存在成员的分数ZRANGE key start stop [WITHSCORES]
:通过索引区间返回有序集合中指定区间内的成员(按分数值递增(从小到大)来排序)ZREVRANGE key start stop [WITHSCORES]
:通过索引区间返回有序集合中指定区间内的成员(按分数值递减(从大到小)来排序)ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]
:通过分数返回有序集合指定区间内的成员ZSCORE key member
:返回有序集中,成员的分数值ZCARD key
:获取有序集合的成员数ZREM key member [member ...]
:移除有序集合中的一个或多个成员ZINCRBY key increment member
:有序集合中对指定成员的分数加上增量 incremenZCOUNT key min max
:计算在有序集合中指定区间分数的成员数ZRANK key member
:返回有序集合中指定成员的索引ZREVRANK key member
:返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
5.3 应用场景
各种排行榜单
6. 基数统计 HyperLogLog
6.1 简单介绍
HyperLogLog 是用来做基数统计的算法,也就是统计去掉重复数据后的数据量大小。HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定且是很小的。
在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
HyperLogLog 统计的基数只是估算值,存在一定的误差。
6.2 常用命令
PFADD key element [element...]
:添加指定元素到 HyperLogLog 中PFCOUNT key
:返回给定 HyperLogLog 的基数估算值PFMERGE destkey sourcekey [soucekey...]
:将多个 HyperLogLog 合并为一个 HyperLogLog
6.3 应用场景
统计服务固定时间内的访问量,对精度要求不高
7. 位图 bitmap
7.1 简单介绍
bitmap 用String类型作为底层数据结构实现的一种统计二值状态的数据类型.
位图本质是数组,它是基于String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量(我们称之为一个索引)。
Bitmap支持的最大位数是2^32位,它可以极大的节约存储空间,使用512M内存就可以存储多达42.9亿的字节信息(2^32 = 4294967296)
7.2 常用命令
setbit key offset val
:给指定的key的第offset位赋值valgetbit key offset
:获取指定key的第offset位bitcount key start end
:返回指定key中给定区间[start,end]中1的数量bitop operation destkey key
:对不用的二进制存储数据进行位运算(AND, OR, NOT, XOR)
7.3 应用场景
记录用户的签到情况,签到记为1