Redis 五种数据类型及其应用场景
Redis 数据都是 k-v 模型,本身就是hashmap 一种形式,器丰富的数据类型,应该场景特别多。
Redis 可使用redis-cli:help @string 查看方法
一,string
1, 简单的 key : value
2,计数器:设置数值时,incr 加1 ,decr 减1。数值计算
3,二进制位计算:统计用户 登录天数 1 0 0 1 1 0(登录四天)。365 就是365 个二进制位。
用户A: setbit 202001 9 1
用户A 第八天登录设置
用户A:setbit 202002 265 1
用户A 第264天登录
用户B: setbit 20200101 8 1
用户B 第七天登录设置
使用场景:缓存k-v、session、文件系统fs(小文件 项目中频繁 IO 特别快)、计数器、统计注册数、活跃数等等
二、list
lpush 添加的数据 a b c d e lrange 0 -1 得到是 e d c b a
1,list 同向 lpush lpop, rpush lpop(先进后出) 模仿 栈行为
2, list 异向 lpush rpop (先进先出) 模仿队列
3,lindex key 1 模仿数组
4,lstrm 可以优化Reids 内存量。可以只返回部分数据,全量数据可以到MySQL查询,因为不是大部分用户查看全量数据
使用场景:消息队列,评论列表,替代编程语言容器,模仿栈,队列、数组。
三、hash
如果没有hash:
set sean::name tom
set sean::age 18
但是 使用hash:
hset sean name tom
hset sean age 18
就会发现 key 变少了,只有sean 了,只需要 hgetall sean 就可以拿到所有数据,hkeys sean 拿到所有key, hvals sean 拿到所有数据
hash 可以理解为一个hashmap
hashmap : redis 的 key-value 就是hashmap ---> hash_table
使用场景:集聚数据(页面来自很多表的时候,并且数据变化不频繁),详情页,用户详情
四、set
特点:无序且不重复
应该场景:抽奖,验证码,扑克牌
五、zset
特点:有序且不重复
应用场景:排行榜、评论:(无序、分页)
主要实现:skiplist