redis常用数据结构以及使用场景举例

一、常用数据机构

         

二、String字符串类型

        常用命令:

            set(设置键值对)、mset(批量设置键值对)、setnx(当键不存在时设置键值对)、get(根据键获取值)、mget(批量根据键获取值)、del(根据键删除键值对)、expire(设置键超期时间)、incr(将键对应的数值加1)、incrby(将键对应的数值加自定义大小的值)、decr(将键对应的数值减1)、decrby(将键对应的数值减自定义大小的值)等

        示例:

            

            

        应用场景举例:

            (1)缓存:减小数据库的压力,将部分数据存储在redis中

            (2)session共享:在集群的情况下通过spring session和redis实现session共享

            (3)计数器:redis为单线程,计数器可为原子操作,比如文章的点赞数统计,浏览量统计,分享数等

            (4)分布式系统全局序列号:分布式数据库集群的情况下,可通过redis生成全局唯一的序列号

三、Hash类型

        常用命令:

            hset(设置哈希表键值对)、hmset(批量设置哈希表键值对)、hsetnx(当哈希表中键不存在时设置键值对)、hget(根据哈希表中键获取值)、hmget(批量根据哈希表中键获取值)、hdel(根据哈希表中键删除键值对)、hlen(查询哈希表中键的长度)、hgetAll(查询哈希表中所有的键)、hincrby(设置哈希表键对应的数值加1)

        示例:

            

            

        应用场景举例:

            (1)缓存:存储一些对象信息相比与String类型更加的直观,更加的节省空间等,但是过期时间只能作用在key上,不能作用到哈希表中的key上

四、List类型

        常用命令:

            lpush(从list最左边加入元素)、lpop(从list最左边取出元素)、rpush(从list最右边加入元素)、rpop(从list最右边取出元素)、lrange(按区间取元素)、blpop(从list最左边取出元素,没有元素则会按设置的时间阻塞等待)、brpop(从list最右边取出元素,没有元素则会按设置的时间阻塞等待)

        示例:

            

        应用场景举例:

            (1)构造数据结构:栈(lpush-lpop/rpush-rpop)、队列(lpush-rpop/rpush-lpop)、阻塞队列(lpush-brpop/rpush-blpop)

            (2)微信关注的订阅号的消息列表等

五、Set类型

        常用命令:

            sadd(向集合中添加元素)、srem(删除集合中的元素)、smembers(获取集合中的元素)、scard(获取集合中的元素个数)、sismember(判断元素在集合中是否存在)、srandmember(从集合中随机获取指定个数的元素)、spop(从集合中随机获取指定个元素并从集合中移除)、sinter(集合取交集)、sinterstore(集合取交集并存入到指定集合)、sunion(集合取并集)、sunionstore(集合取并集并存入到指定集合)、sdiff(集合取差集)、sdiffstore(集合取差集并存入到指定集合)

        示例:

            

            

        应用场景举例:

            (1)点赞、收藏、标签、抽奖:可使用sadd、smembers、srandmember等命令

            (2)社交关系模型:可通过集合操作实现例如共同关注的人、可能认识的人等

六、ZSet类型

        常用命令:

            zadd(向集合中添加元素)、zrem(从集合中删除元素)、zscore(获取集合中元素的score的值)、zincrby(设置集合中元素的score的值)、zcard(获取集合中的元素个数)、zrange(正序获取集合中指定区间的元素)、zrevrange(倒序获取集合中指定区间的元素)

        示例: