您的位置:首页 > 数据库 > Redis

redis使用总结记录

2018-02-25 16:28 134 查看
1、单线程,单个命令都是原子性操作

2、5种数据类型,string(字符串),hash(哈希),list(列表),set(集合不可重复)及zset(sorted set:有序集合)

3、multi事务与pipeline管道,都是批量执行命令,区别pipeline不是原子操作,

4、事务没有回滚,WATCH 一个或多个key,在事务执行之前,如果key被改动,那么事务将不执行,原子操作,如果事务执行期间报错,不回滚

5、秒杀简单实现:通过list的pop原子操作,防止多卖,重复购买等功能

  库存列表,用户排队列表,已抢列表

  起多个线程循环lpop,lpop原子操作,保证多线程安全,

  从用户排队列表pop一个用户,如果pop成功,判断库存是否还有,判断用户是否已经抢过,再从库存列表pop一个商品,如果成功则取出来(原子操作)

  还可以用redis分布式锁实现

  商品库(作为共享资源,可能会有一个集群应用来购买商品,该共享资源的载体可以是数据库或nosql)

  利用分布式锁可以更小粒度的对每个商品加锁

  大概实现:

  1、假设数据库或nosql存储着每个商品的name和num,每个商品作为key

 






zookeeper分布式锁参考资料
http://blog.csdn.net/youmengdaigu/article/details/44134233 http://blog.csdn.net/sunfeizhi/article/details/51926396 http://blog.csdn.net/abccheng/article/details/72420996
6、排行榜的实现

  set类型本身就有,交集、并集、差集的功能,下面是zset的实现







7、Redis集群的不足

  redis集群无法保证数据强一致性,主从是异步同步

  2)、集群,高可用,可扩展,注意:假设有三个机房,分别是JF-A、JF-B、JF-C,假如JF-A断网的情况(比如光钎被挖断了:just a joke),这种情况需要考虑在JF-B,部署一套所有主节点的slave,因为数据分布在不同的slots 槽位,当一个主节点包括所有的

    slave都挂掉的时候,分布在该主节点的slots的key就无法使用,一共有16384个slots

8、Redis集群的优点

  实现高可用,可扩展

9、Redis消息队列的不足

  1)、持久化机制,会把所有数据持久化

  2)、没有可靠发布、消费机制

  3)、消费者没有负载均衡

  4)、没有队列监控、流量限制等

10、Redis消息队列的优点

  轻量级,高并发,延迟敏感 可使用在即时数据分析、秒杀计数器、缓存等场景
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: