redis资料学习整理

来源:互联网 发布:农村淘宝免费下载安装 编辑:程序博客网 时间:2024/05/16 06:05

这些天接触redis以来,发现它不仅仅是一个key-value内存数据库那么简单,redis自身简洁的设计有非常好的性能和特点,毕竟最活跃的微博就是基于redis来构建的,下面整理一点相关的资料。

Redis2.6对事务的支持还不够,如下所示,在incr name命令执行出错后并没有回滚到之前状态

redis 127.0.0.1:6379> set age 3OKredis 127.0.0.1:6379> set name PJOKredis 127.0.0.1:6379> multiOKredis 127.0.0.1:6379> incr ageQUEUEDredis 127.0.0.1:6379> incr nameQUEUEDredis 127.0.0.1:6379> exec1) (integer) 42) (error) ERR value is not an integer or out of rangeredis 127.0.0.1:6379> saveOKredis 127.0.0.1:6379> get age"4"redis 127.0.0.1:6379> get name"PJ"

Redis的应用场景

  1. 取最新N个数据的操作
    • (如通过 lpush latest.comments <commentID>,ltrim latest.comments 0 100 两条命令组合保存最新的100条评论)
  2. 排行榜应用,取TOP N操作
    • (场景一是以时间为权重排序,这个应用是其他某个条件为权重,我们可以利用sorted set数据结构,通过zadd chart <score> <member>添加,通过zrange等命令查询排序结果)
  3. 需要精确设定过期时间的应用(如缓存)
  4. 计数器应用(incr,decr指令可以实现原子性的操作)
  5. 数据统计应用(利用set数据结构的自动排重功能)
  6. Pub/Sub构建实时消息系统,使用list结构构建队列系统,使用sorted set构建有优先级的队列系统

如何做分布式

redis直到2.6版本也没有提出自身可靠的分布式解决方案,如何做sharding还需要应用程序的支持,不过由于redis自身的分布式架构(纯粹的key-value格式)要做分布式也不是很难,自己在服务上人为hash一下,分发到各个数据库即可。

redis数据库提供分布式服务的方式有以下两种

  1. 应用程序直接连接redis数据库集群进行set/get操作
  2. 应用程序直接访问redis数据库集群,访问失败时再去后台连接mysql集群

容灾备份

主从复制,master可以有多个slave,slave可以连接master和其他slave,需要注意的是倘若master意外down掉,需要及时提升slave数据库为master,不然等master重启后,针对slave的修改会全部丢失。

原创粉丝点击