redis之所以能解决高并发的原因是它可以直接访问内存,而以往我们用的是数据库(硬盘),提高了访问效率,解决了数据库服务器压力。
为什么redis的地位越来越高,我们为何不选择memcache,这是因为memcache只能存储字符串,而redis存储类型很丰富(例如有字符串、LIST、SET等),memcache每个值最大只能存储1M,存储资源非常有限,十分消耗内存资源,而redis可以存储1G,最重要的是memcache它不如redis安全,当服务器发生故障或者意外关机等情况时,redsi会把内存中的数据备份到硬盘中,而memcache所存储的东西全部丢失;这也说明了memcache不适合做数据库来用,可以用来做缓存。
下面用redis解决瞬间秒杀活动来说明:
下面这个程序模拟了20w人一瞬间涌入这个页面进行秒杀,能够秒杀成功的只有500人,我们把先进来的用户放入redis队列中,当队列中的用户达到500时,后来用户就转到秒杀结束页面。这里用随机数来表示不同的用户。
![redis解决高并发问题,如商品秒杀](https://img8.php1.cn/3cdc5/12663/8fd/d67848afe930d567.jpeg)
![redis解决高并发问题,如商品秒杀](https://img8.php1.cn/3cdc5/12663/8fd/c46f1c1f677f5639.jpeg)
![redis解决高并发问题,如商品秒杀](https://img8.php1.cn/3cdc5/12663/8fd/af61039eb348ce7c.jpeg)
这里我们可以看到秒杀成功的第一个用户的id是208522,秒杀成功的最后一个用户是176260,参与秒杀人数总共是20w。(让大家注意这些的原因是为了验证下面的准确性)。
接下来我们依次从队列中把秒杀成功的500个用户取出来并观察第一个用户和最后一个用户是否跟之前的记录值一样
![redis解决高并发问题,如商品秒杀](https://img8.php1.cn/3cdc5/12663/8fd/cf37048ffc2d9036.jpeg)
![redis解决高并发问题,如商品秒杀](https://img8.php1.cn/3cdc5/12663/8fd/a2a79819d34d3ff2.jpeg)
我们可以看到从秒杀成功队列中依次取出的第一个用户id是208522,最后一个用户是176260,可以看出结果是很准确的。
redis在解决高并发这方面的能力是真的挺不错的。