redis数据类型介绍官网链接:https://redis.io/topics/data-types-intro
redis指令官网链接:https://redis.io/commands
概述
本文主要讲述redis的五种基本数据结构:String、Hash、List、Set以及Zset,以及它们的常用使用场景。
正文
String
格式:key value<String,Object>。
常用命令:set、mset、setnx、get、mget、del、expire(设置一个键的过期时间)。
原子加减:incr key、decr key、incrby key increment(将key所存储的值加上increment,注意数据类型)、decrby key decrement。
相关命令官网链接:https://redis.io/commands/set
应用场景:单值缓存、对象缓存(Json格式)、分布式锁、计数器、Web集群sessin共享和分布式系统全局序列号分配(incrby orderId 1000 //一次批量获取序列ID)。
注意事项:尽量不要有Big key,因为redis是单线程操作数据,可以采取分段去除;key的命名要有辨识度的前缀,最好由多个部分组成;每个key的最大size为512MB。
Hash
格式:key field value;注意过期功能只能在key上使用,相对于string操作消耗内存和CPU更小,相比string存储更节省空间。
常用命令:hset、hsetnx(存储一个不存在的哈希表key的键值)、hmset、hget、hmget、hdel、hlen、hgetall。
相关命令官网链接:https://redis.io/commands/hset
应用场景:
对象缓存——相对应string缓存对象,可以更好的实现更新;
电商购物车——相关前缀和用户ID为key,商品ID为field,商品数量当作value。
注意事项:在redis集群中,不要大量使用hash,容易造成数据倾斜。
List
格式:key {value1,value2...};Redis lists are implemented via Linked Lists.所以相对于Array,读性能会稍差,写性能会很高。但是redis list只能从两端插入数据。
常用命令:lpush、rpush、lpop、rpop、lrange、【blopo key [key ...] timeout】(从列表表头弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0,一直阻塞等待)、brpop。
相关命令官网链接:https://redis.io/commands/lpush
应用场景:
实现常用数据结构——Stack(栈)、Queue(队列)、Blocking MQ(阻塞队列);
消息列表——比如微信的公众号消息列表,前缀:用户ID当作一个list的key,然后关注的公众号或者关联推荐的公众号发送消息,就lpush到这个list中,查看最新消息使用lrange 0 4.
Set
格式:key {value1,value2...};value不会重复。
常用命令:sadd、srem、smembers、scard(集合的元素数量)、sismembers、srandmember key [count](从集合中随机选出count元素,不从key中删除这些元素,下个命令会删除)、spop;
运算操作:
sinter:交集运算;sinterstore destination key [key ...] 将交集结果存入新集合destination中;
sunion:并集运算;sunionstore destination key [key ...];
sdiff:差集运算;sdiffstore destination key [key ...]。
相关命令官网链接:https://redis.io/commands/sadd
应用场景:
微信微博点赞、收藏、标签的用户列表;关注列表。
ZSet
格式:*key {value1,socre1;value2,socer2...};在官网中说Zset像是hash和set的组合体,因为相对于set,每个value多了一个score,类似于hash的fied。value不会重复,并且会按照socre从小到大排好序,如果score一样,按照字典顺序排列。
常用命令:zadd、zrem、zscore key member、zincrby key increment member、zcard key、zrange key start stop withscores、zrevrange key start stop withscores。
集合操作:zinter、zunion、zdiff、zunionstore等。
相关命令官网链接:https://redis.io/commands/zadd
应用场景:实现排行榜。