一、redis核心数据结构
1.string
比如:计数器(incr和get命令即可)
2.hash
redis非常忌讳存储大key和大value,因为redis是一个单线程操作,如果一个命令卡住了几秒或十几秒,其他操作都被阻塞着,所以尽量使用小key.
新建一个购物车key为(cart:1001)
cart:代表前缀;
1001:代表用户id;
10088:代表商品;
1:代表数量;
使用hincrby命令对购物车商品数量+1操作
再添加两个商品
hset cart:1001 10089 1
hset cart:1001 10090 1
获取购物车所有商品
hgetall cart:1001
知道购物车用户和商品id,使用ajax获取商品详情,从而使用购物车,大大提高了性能
为什么这么说呢?
因为有可能hash 对key有可能都存在一个redis集群某一个节点下,
3.list
可以轻松实现数据结构栈,非常容易
举个场景:比如你关注了很多明星大V,进入主页看到非常多消息,按照时间倒排
如果使用数据库实现有些复杂了,如果使用redis呢?
熟悉下 LPUSH 和LRANGE命令
一般不是一个粉丝,大V都会有非常多粉丝,每发一条消息都需要往redis插入一条数据吗?
具体看业务场景,看粉丝多少,如果粉丝不超过万都是可以的,因为redis的qps理论接近十万,足够了!当然如果上千万或亿万粉丝,那么这种方式就不合适了,(早期大V发一条微博就挂了)
4.set
比如:微信抽奖小程序
全部人,中奖人
随机抽取两个不删除原来集合元素(普通情况)
第二种情况:
随机拿两个元素并删除原来集合元素(适合抽取一等奖、二等奖、三等奖)
微信微博点赞场景
检查用户是否点过赞(朋友圈是否有❤️高亮)
当然朋友圈是仅限于熟人,根据用户关系的算法设计的,
关注模型(非常重要的后端技术,可以推送消息,可以推送购买商品,可以挖掘你关注和关注你的兴趣爱好)
SISMEMBER求后面的元素是否在前面的集合(只需要展示几个人,其他分页做 )
SINTER求交集,
SUNION求并集
SDIFF求差集(以第一个集合为标准,第一个集合-后面所有集合的并集)
5.zset
热度排行榜
一条消息执行一条操作
redis其他使用场景