Redis 的数据类型之——对应的应用场景

目录

目录

1.数据类型

1.1 字符串String

1.2 字典——hash

1.3 列表——list

1.4 集合——Set

1.5 有序集合——zSet



1.数据类型


1.1 字符串String

String是最常用的数据类型格式,普通的key-value都归结为这一类,value值不仅可以是String,也可以是数字、集合。类似JAVA中的String类型,可存入数字相互转换,也可以存储json字符串等。

表达式理解Map<String,String>

使用场景:

通过访问用户的次数为依据封锁id,可以将用户的访问次数以String类型记录在redis中,并通过incr操作,每次访问都自增一次。

其他场景:

常用命令:

get,set,incr,decr,mget

1.2 字典——hash

类比JAVA中的Map类型,是一个String类型的field和value的映射表,hash特别适合用于存储对象。

表达式理解:Map<String , Map<String,String>>

应用场景:

例如 用户包含id,name,address等属性,当需要使用redis存放用户信息时,可以使用hash。

        其他场景:可参考 http://t.csdnimg.cn/YZHqk

常用命令:

hget,hset,hgetall

1.3 列表——list

类比JAVA中的ListkedList,有序,可重复的集合

表达式理解:Map<String,List<String>>

应用场景:

最新消息排行;消息队列。利用List的push操作,将任务存储在List中,然后工作线程再用pop操作将任务取出进行执行。

        其他场景:

        1. 朋友圈点赞,要求按照点赞顺序现实点赞好友的信息;

我们可以完整的将这个模型用list实现,发朋友圈的人用key表示,点赞的人为value,点赞操作对应rpush,取消点赞操作可以对应lrem。评论信息可以通过list去查询关系型数据库。

        2. 在一般要求顺序的业务中,一般都用list来实现。

常用命令:

 lpush,rpush,lpop,rpop,lrange,blpop(阻塞版)等;

        

1.4 集合——Set

类比JAVA中的HashSet,存储无序不能重复的数据,Redis本身提供了交集,并集,差集等操作。

表达式理解:Map<String,Set<String>>

应用场景:

set 和 list 比较类似,特殊之处是set可以自动排重,同时还提供了某个成员是否存在于一个set内的接口,这个在list也没有。

        其他场景:

1、标签:比如我们博客网站常常使用到的兴趣标签,把一个个有着相同爱好,关注类似内容的用户利用一个标签把他们进行归并。

2、共同好友功能,共同喜好,或者可以引申到二度好友之类的扩展应用。

3、统计网站的独立IP。利用set集合当中元素唯一性,可以快速实时统计访问网站的独立IP。

常用命令:

sadd,srem,spop,smembers,sunion等;

1.5 有序集合——zSet

类比JAVA中的TreeSet,存储的数据有顺序,常用作排行榜等应用场景;

表达式理解:Map<String,Sort Set<>String>

应用场景:

 使用场景:zset的使用场景与set类似,区别是set不是有序的,而zset可以通过用户额外提供的一个优先级(score即分值)参数来为成员排序,插入后自动排序。

例如:将所有评论按发表时间为score存储,可以方便获取最新发表的评论;全班同学成绩的SortedSets,value可以是同学的学号,而score就可以是其考试得分,这样数据插入集合的,就已经进行了天然的排序。
另外还可以用Sorted Sets来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。

        其他场景http://t.csdnimg.cn/h7cMd

常用命令
zadd,zrange,zrem,zcard,zcount等

本章博客仅用来记录自己当前学习的笔记,上面图片引用至:http://t.csdnimg.cn/qRzZe博文。

本章博客分享结束,如果能帮助到你,那这篇博文就有意义,感谢你的驻留。

### Redis 支持的主要数据类型 #### 字符串(String) 字符串是最简单的键值对形式,在 Redis 中可以存储任何类型的字符串,包括二进制数据。除了基本的设置和获取操作外,还提供了丰富的命令来处理数值型字符串。 ```python SET key "value" GET key INCR key # 对整数进行自增 DECR key # 对整数进行自减 ``` 对于更复杂的场景,还可以通过 `INCRBY` 或者 `DECRBY` 来指定增量或减量[^1]。 #### 哈希表(Hash) 哈希表用于保存字段到值之间的映射关系。内部实现上会根据情况选用 ziplist 或 hashtable 结构。当 field 和 value 较小时采用 ziplist;反之则切换至 hashtable。这使得 Hash 类型既节省空间又高效。 ```python HSET user:1 name "Alice" HGET user:1 name HMSET user:2 name "Bob" age 30 HMGET user:2 name age ``` 上述例子展示了如何向名为 `user:id` 的 hash 添加多个字段以及批量查询这些字段的内容[^2]。 #### 列表(List) 列表是一个双向链表结构,允许从两端快速插入/删除元素。通常被当作消息队列使用,适用于生产者消费者模式下的任务分发机制。 ```python LPUSH mylist "item1" RPUSH mylist "item2" LRANGE mylist 0 -1 # 获取整个列表中的所有项 LPOP mylist # 移除并返回最左边第一个元素 RPOP mylist # 移除并返回最右边最后一个元素 ``` 此代码片段体现了 list 如何作为先进先出(FIFO)或者后进先出(LIFO)栈来进行工作[^4]。 #### 集合(Set) 集合由唯一成员组成,不允许重复。支持交集、并集、差集运算,非常适合用来解决社交网络中好友推荐等问题。 ```python SADD unique_set "member1" SMEMBERS unique_set # 返回集合内所有的成员 SCARD unique_set # 统计集合大小 SINTER setA setB # 计算两个集合间的交集 ``` 以上命令可用于管理不重复项目的集合,并执行各种基于集合的操作。 #### 有序集合(Sorted Set) 有序集合不仅保持了集合的特点——即成员不可重叠,而且还能按照分数排序。因此特别适合排行榜之类的场合,其中每个项目都有一个关联权重决定其位置。 ```python ZADD sorted_scores 89.5 "player:Alice" ZADD sorted_scores 97.0 "player:Bob" ZRANK sorted_scores "player:Alice" # 查询某成员排名 ZRANGEBYSCORE sorted_scores "-inf" "+inf" WITHSCORES # 按照得分范围检索成员及其对应的分数 ``` 这段脚本显示了怎样创建带评分的对象并将它们按顺序排列起来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值