开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情
redis技术的使用
-
redis 简直就是我们 web 开发的一个福音,因为有了它我们的网站性能至少能成倍的提升。并且在某种程度上还能解决我们并发的问题。同事因为Redis 我们还能解决不同类锁的实现。比如之前我就实现了一个资源争抢的功能。保证同时在分布式项目中仅有一个是咧能够获取到资源。
-
redis高的原因并发可以解决的是它可以直接访问内存,因为内存操作和硬盘操作根本不在一个量级别上,所以内存操作可以减轻数据库的压力。从而保证我们的数据持久化的可行性。
-
但是同样是内存操作的 MEMCACHE 为什么没有被广泛的使用呢?那是因为 memcache 它的数据结构太单一了,单一到纯粹的拿内存当载体。
场景使用
- 上面我们提到之前我使用 redis 实现了分布式项目的中资源抢夺的功能,当时的灵感来自于Java 中的 Correnthashmap 这个类中的分段机制, 所以讲一个实体的部分字段组合形成 redis 的key , 这样就能够保证相同类型的数据会存在竞争关系,同时不同类型却不需要竞争的功能,比如你买一个电视商品,总不能和电风扇,电冰箱存在竞争关系吧。这时候讲商品的类别和id组合成key 作为redis ,然后利用redis 的原子性, 这样就能够保证我们只有一个能够抢占资源。
下面的程序模拟20w人秒冲进这个页面,只有能秒成功的500人,我们把高级用户放到redis中排队,当队列中的用户达到500的时候,后来用户转向第二杀页结束。这里我们使用随机数来代表不同的用户。
总结
简单的总结下,其实redis本事是不会存在并发问题的,因为他是单进程的,再多的command都是one by one执行的。我们使用的时候,可能会出现并发问题,比如get和set这一对。