关于面试的那些事!——Redis的五种数据类型与场景

Redis五种数据类型的应用场景:

1.String:

1.Redis中的String类型,提供了很多操作:

        基本操作 set(改变v),get(获取v),append(从后面加,和stirngBuffer一样),strlen(获取v的长度,空格也算)。
        增减基本操作 incr(自增),decr(自减)。

2.应用场景:
        
        缓存结构体信息:将结构体中的JOSN序列化称为字符串,保存在Redis中的value中,将结构体的业务唯一标示作为key:这种就属于缓存用户信息。用户名id为k ,信息为 v,然后通过josn和bean之间的转换完成操作,

        计数功能:Redis是单线程,通过上面的方法incr 自增,decr自减,想要多一点可以用incrby设置/decrby。

 2.Hash:

1.Redis中Hash类型的一些操作和场景:

基本操作:

hset(key, field, value):向名称为key的hash中添加元素field<—>value

hget(key, field):返回名称为key的hash中field对应的value
 
hmget(key, field1, …,field N):返回名称为key的hash中field i对应的value
 
hmset(key, field1, value1,…,field N, value N):向名称为key的hash中添加元素field i<—>value i
 
hincrby(key, field, integer):将名称为key的hash中field的value增加integer
 
hexists(key, field):名称为key的hash中是否存在键为field的域
 
hdel(key, field):删除名称为key的hash中键为field的域
 
hlen(key):返回名称为key的hash中元素个数
 
hkeys(key):返回名称为key的hash中所有键
 
hvals(key):返回名称为key的hash中所有键对应的value
 
hgetall(key):返回名称为key的hash中所有的键(field)及其对应的value


应用场景:
类似于表记录的存储,页面视图所需数据的存储。k-k-v的感觉。
 

3.List:

Redis中List的操作和应用场景:

基本操作:
rpush(key, value):在名称为key的list尾添加一个值为value的元素  
 
 lpush(key, value):在名称为key的list头添加一个值为value的 元素
 
 llen(key):返回名称为key的list的长度
 
 lrange(key, start, end):返回名称为key的list中start至end之间的元素(下标从0开始,下同)
 
 ltrim(key, start, end):截取名称为key的list,保留start至end之间的元素
 
 lindex(key, index):返回名称为key的list中index位置的元素
 
 lset(key, index, value):给名称为key的list中index位置的元素赋值为value
 
 lrem(key, count, value):删除count个名称为key的list中值为value的元素。count为0,删除所有值为value的元素,count>0      从头至尾删除count个值为value的元素,count<0从尾到头删除|count|个值为value的元素。
 
 lpop(key):返回并删除名称为key的list中的首元素
 
 rpop(key):返回并删除名称为key的list中的尾元素
 
 blpop(key1, key2,… key N, timeout):lpop 命令的block版本。即当timeout为0时,若遇到名称为key i的list不存在或该list为空,则命令结束。如果 timeout>0,则遇到上述情况时,等待timeout秒,如果问题没有解决,则对key i+1开始的list执行pop操作。
 
 brpop(key1, key2,… key N, timeout):rpop的block版本。参考上一命令。
 
 rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部

应用场景:

数据存储需求:存储多个数据,并对数据进行存储空间的顺序进行区分。

需要的存储结构:一个存储空间保存多个数据,且通过的数据可以体现进入顺序。

list类型:保存多个数据,底层使用双向链表存储结构实现。

比较适用于列表式存储且顺序相对比较固定,例如:

省份、城市列表

品牌、厂商、车系、车型等列表

拆车坊专题列表

4.Set

Redis中的set操作与应用场景:

基本操作:

sadd(key, member):向名称为key的set中添加元素member
 
 srem(key, member) :删除名称为key的set中的元素member
 
 spop(key) :随机返回并删除名称为key的set中一个元素  
 
 smove(srckey, dstkey, member) :将member元素从名称为srckey的集合移到名称为dstkey的集合
 
 scard(key) :返回名称为key的set的基数        
 
 sismember(key, member) :测试member是否是名称为key的set的元素
 
 sinter(key1, key2,…key N) :求交集
 
 sinterstore(dstkey, key1, key2,…key N) :求交集并将交集保存到dstkey的集合
 
 sunion(key1, key2,…key N) :求并集
 
 sunionstore(dstkey, key1, key2,…key N) :求并集并将并集保存到dstkey的集合
 
 sdiff(key1, key2,…key N) :求差集
 
 sdiffstore(dstkey, key1, key2,…key N) :求差集并将差集保存到dstkey的集合
 
 smembers(key) :返回名称为key的set的所有元素
 
 srandmember(key) :随机返回名称为key的set的一个元素

应用场景:

集合元素不能重复

应用场景:QQ好友推荐功能[如果双方有共同好友]

Set对外提供的功能与list类似,当需要存储一个列表数据,又不希望出现重复数据时,可选用set。

5.Zset

Redis中Zset的操作与应用场景:

基本操作:

zadd(key, score, member):向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序。
 
 zrem(key, member) :删除名称为key的zset中的元素member
 
 zincrby(key, increment, member) :如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment
 
 zrank(key, member) :返回名称为key的zset(元素已按score从小到大排序)中member元素的rank(即index,从0开始),若没有member元素,返回“nil”
 
 zrevrank(key, member) :返回名称为key的zset(元素已按score从大到小排序)中member元素的rank(即index,从0开始),若没有member元素,返回“nil”
 
 zrange(key, start, end):返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素
 
 zrevrange(key, start, end):返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素
 
 zrangebyscore(key, min, max):返回名称为key的zset中score >= min且score <= max的所有元素
 
 zcard(key):返回名称为key的zset的基数
 
 zscore(key, element):返回名称为key的zset中元素element的score
 
 zremrangebyrank(key, min, max):删除名称为key的zset中rank >= min且rank <= max的所有元素
 
 zremrangebyscore(key, min, max) :删除名称为key的zset中score >= min且score <= max的所有元素

应用场景:

zset 可以用做排行榜,但是和 list 不同的是 zset 它能够实现动态的排序,例如: 可以用来存储粉丝列表,value 值是粉丝的用户 ID,score 是关注时间,我们可以对粉丝列表按关注时间进行排序。

zset 还可以用来存储学生的成绩, value 值是学生的 ID, score 是他的考试成绩。 我们对成绩按分数进行排序就可以得到他的名次。

zset的使用场景与set类似,区别是set不是自动有序的,而zset可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序.当你需要一个有序的并且不重复的集合列表,那么可以选择zset数据结构。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值