redis资料学习整理

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

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

redis 127.0.0.1:6379> set age 3
OK
redis 127.0.0.1:6379> set name PJ
OK
redis 127.0.0.1:6379> multi
OK
redis 127.0.0.1:6379> incr age
QUEUED
redis 127.0.0.1:6379> incr name
QUEUED
redis 127.0.0.1:6379> exec
1) (integer) 4
2) (error) ERR value is not an integer or out of range
redis 127.0.0.1:6379> save
OK
redis 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的修改会全部丢失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值