String 结构
字符串常用操作
- SET key value //存入字符串键值对
- MSET key value [key value …] //批量存储字符串键值对
- SETNX key value //存入一个不存在的字符串键值对
- GET key //获取一个字符串键值
- MGET key [key …] //批量获取字符串键值
- DEL key [key …] //删除一个键
- EXPIRE key seconds //设置一个键的过期时间(秒)
- INCR key //将key中储存的数字值加1 (原子操作)
- DECR key //将key中储存的数字值减1 (原子操作)
- INCRBY key increment //将key所储存的值加上increment (原子操作)
- DECRBY key decrement //将key所储存的值减去decrement (原子操作)
String 应用场景
- 单值缓存
- 对象缓存,value 为 json 字符串
- 分布式锁:SETNX key value + EXPIRE key seconds
- 计数器:记录文章点赞次数
- web 集群 session 共享
- 分布式系统全局序列号
Hash 结构
Hash 常用操作
- HSET key field value //存储一个哈希表key的键值
- HMSET key field value [field value …] //在一个哈希表key中存储多个键值对
- HSETNX key field value //存储一个不存在的哈希表key的键值
- HGET key field //获取哈希表key对应的field键值
- HMGET key field [field …] //批量获取哈希表key中多个field键值
- HDEL key filed [field …] //删除哈希表key中的field键值
- HLEN key //返回哈希表key中field的数量
- HGETALL key //返回哈希表key中所有的键值
- HINCRBY key field increment //为哈希表key中field键的值加上增量increment
Hash 应用场景
-
对象缓存
-
hmset user 1:name lisi 1:age 12
- hmset user 2:name xiaowu 2:age 33
- hmget user 1:name

-
电商购物车



Hash 优点 -
同类数据归类存储,方便管理
-
相比 String 操作,消耗性能和 CPU 更小
-
相比 String,存储更节省空间
Hash 缺点
- Expire 命令只对 key 生效,对 field 不生效
- Redis 集群架构下不适合大规模使用
List 结构
List 常用操作
- LPUSH key value [value …] //将一个或多个值value插入到key列表的表头(最左边)
- LPOP key //移除并返回key列表的头元素
- RPUSH key value [value …] //将一个或多个值value插入到key列表的表尾(最右边)
- RPOP key //移除并返回key列表的尾元素
- LRANGE key start stop //返回列表key中指定区间内的元素,区间以偏移量start和stop指定
lrange test1 0 -1 #获取 test1 全部元素 - BLPOP key [key …] timeout //从key列表表头弹出一个元素,若列表中没有元素,阻塞等待
timeout秒,如果timeout=0,一直阻塞等待 - BRPOP key [key …] timeout //从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待
timeout秒,如果timeout=0,一直阻塞等待
List 应用场景
- 常用数据结构
- 栈(先进后出):LPUSH + LPOP
- 队列(先进先出):LPUSH + RPOP
- 阻塞队列(先进先出,若列表中没有元素,会阻塞):LPUSH + BRPOP
- 微博和微信公众号信息流
- 用户A 在公众号页面,可以看到关注的公众号发送的最新文章。可以用LPUSH 来实现。
LPUSH userA (用户A的ID) msg1 msg2 (用户关注的公众号发送的文章ID)
- 用户A 在公众号页面,可以看到关注的公众号发送的最新文章。可以用LPUSH 来实现。
Set 结构
Set 常用操作
- SADD key member [member …] //往集合key中存入元素,元素存在则忽略,
若key不存在则新建 - SREM key member [member …] //从集合key中删除元素
- SCARD key //获取集合key的元素个数
- SMEMBERS key //获取集合key中所有元素
- SISMEMBER key member //判断member元素是否存在于集合key中
- SRANDMEMBER key [count] //从集合key中选出count个元素,元素不从key中删除
- SPOP key [count] //从集合key中选出count个元素,元素从key中删除
- SINTER key [key …] //交集运算
- SINTERSTORE destination key [key …] //将交集结果存入新集合destination中
- SUNION key [key …] //并集运算
- SUNIONSTORE destination key [key …] //将并集结果存入新集合destination中
- SDIFF key [key …] //差集运算
- SDIFFSTORE destination key [key …] //将差集结果存入新集合destination中
Set 应用场景
- 微信抽奖小程序
- 查看微信朋友圈点赞记录
- 微博关注模型:用户 A 打开另一个用户 B 界面可以看到
- 共同关注:SINTER user:a user:b;
- 我关注的人也关注他:SISMEMBER,查看用户 A 关注的人,他们关注的人中是否有用户 B。
- 可能认识的人:SDIFF user:b user:a;用户 B 关注但用户 A 没有关注的人。
ZSet 有序列表类型
ZSet 常用操作
- ZADD key score member [score member …] //往有序集合key中加入带分值元素
- ZREM key member [member …] //从有序集合key中删除元素
- ZCARD key //返回有序集合key中元素个数
- ZSCORE key member //返回有序集合key中元素member的分值
- ZINCRBY key increment member //为有序集合key中元素member的分值加上increment
- ZRANGE key start stop [WITHSCORES] //正序获取有序集合key从start下标到stop下标的元素
- ZREVRANGE key start stop [WITHSCORES] //倒序获取有序集合key从start下标到stop下标的元素
- ZUNIONSTORE destkey keynums key [key …] //并集计算
- ZINTERSTORE destkey keynums key [key …] //交集计算
ZSet 应用场景
- 微博排行榜
Bitmap 结构
Bitmap 常用操作
- SETBIT key offset value //将一个二进制数组的offset位置设置成value。value只能是0或者1。
- GETBIT key offset //返回一个二进制数组的offset位置的值。
- BITCOUNT key [start end [BYTE|BIT]] //返回二进制数组中1的个数
- BITPOS key bit [start end [BYTE|BIT]] //返回bitmap中第一个值为bit的offset位置。
- BITOP AND|OR|XOR|NOT destkey key [key …] //对两个bitmap做二进制的与或非计算。
Bitmap 应用场景
- 记录每日签到
Hyperloglog 结构
Hyperloglog 常用操作
- PFADD key [element [element …]] //往集合 key 中添加元素
- PFCOUNT key [key …] //统计集合 key 不同元素的数量
- PFMERGE destkey [sourcekey [sourcekey …]] //将多个hyperloglong数据整合成一条记录。
Hyperloglog 应用场景
- 统计集合中不重复元素元素个数,适用于大数据量。
- 根据用户访问记录统计网站的UV。
Geo 结构
Geo 常用操作
- GEOADD key [NX|XX] [CH] longitude latitude member [longitude latitude member …] //添加一个或多个地点
- GEOPOS key [member [member …]] //返回地址的经纬度
- GEODIST key member1 member2 [M|KM|FT|MI] //计算两个地点之间的距离
- GEORADIUS key longitude latitude radius M|KM|FT|MI [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count
[ANY]] [ASC|DESC] [STORE key|STOREDIST key] //查询某个经纬度地址附近的地点 - GEOSEARCH key FROMMEMBER member|FROMLONLAT longitude latitude BYRADIUS radius
M|KM|FT|MI|BYBOX width height M|KM|FT|MI [ASC|DESC] [COUNT count [ANY]] [WITHCOORD]
[WITHDIST] [WITHHASH] //查询某个地点附近的地点
236

被折叠的 条评论
为什么被折叠?



