Redis安装和使用场景
简介
Redis是个非常不错的开源软件,key-value存储,数据完全内存中,虽是单进程,由于其采用异步非阻塞IO操作,性能表现非凡。
虽然Redis的使用已经很广泛了,但考虑到可能有一些朋友没有使用过,还是写一些基础的,安装过程,应用场景类的文章。
特性
数据结构丰富: string, hash, list, set, sortedSst, bitmap
持久化:有2种持久方式 RDB,AOF
速度快:数据存于内存中
主从复制:异步复制,支持部署方式 M ->S, M ->S ->S
发布/订阅:轻量级MQ
支持key过期自动失效
支持简单的事务
单进程,原子性操作,setnx expire 可作为分布式锁
Reis安装
Redis安装是在 CentOS release 6.4 64bit 安装的,过程非常简单。
下载安装文件
1 | cd /data/apps |
解压安装
1 | tar xzf redis-3.0.7.tar.gz |
copy安装后生成的bin‘文件
1 | mkdir -p /data/apps/redis-3.0.7_6379/bin |
启动服务
1 | cd /data/apps/redis-3.0.7_6379/bin |
如果看到这个图,说明启动成功
查看大图
由于redis默认不是以后台模式启动的,需要修改配置下。
找到这一行 daemonize no
修改为 daemonize yes
然后重新启动就可以了。
客户端连接使用. redis 默认使用 6379端口,不设置密码,客户端使用比较简单
1 | cd /data/apps/redis-3.0.7_6379/bin |
其他的命令可以参考 http://redis.io/commands 使用。更复杂的操作,需要自己去查阅官方文档了。
Redis所在OS的内核优化
在Redis启动的时候,打印出来一句话“WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect.”
也就是说当Redis执行BGSAVE时可能由于内存不够用导致失败,需要调整 vm.overcommit_memory = 1 。 需要做如下操作:1
2
3echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
sysctl -p
redis运用场景
其实这里有好多要说,就我们自己的业务来说使用非常广泛,我先简单列一下:
过期key会自动删除,命令expire
这个是比较常用的,比如每日任务,key存储用户完成的任务ID,今日完成后,就标示已完成,key的失效时间设置成明日凌晨失效。
计数器使用
统计访问次数,限制用户访问次数等都可以利用此特性
实时排行榜
以前未使用redis之前,排行榜根本无法做到实时,基本是5分钟扫描统计。
直接使用SortedSet,就可以轻松来做排行榜数据
最新文章
这个是使用list类型,lpush和ltrim结合,可以保存最新的某个区间的数据。
LTRIM 命令通常和 LPUSH 命令或 RPUSH 命令配合使用,举个例子:
1 | LPUSH log newest_log |
这个例子模拟了一个日志程序,每次将最新日志 newest_log 放到 log 列表中,并且只保留最新的 100 项。注意当这样使用 LTRIM 命令时,时间复杂度是O(1),因为平均情况下,每次只有一个元素被移除。
pub/sub
Redis可以作为MQ来使用,消息的发布和订阅。
注意:此特性是“forget”模式,Redis不存储消息,当Consumer端出问题时,消息就会丢失
作为MySQL的一个补充
可以存储业务数据,作为关系型数据库的一个补充,但前提要开启持久化,不然重启后数据就丢掉了。
分布式锁
主要是 setnx 和 expire 相结合使用。
配置服务
可以作为一个配置中心来使用,存储配置信息。
Lua
Redis支持Lua脚本,编写若干命令组合为一个小型的非阻塞事务或者更新逻辑。
当然其应用远不止上面这些点,等待着我们去挖掘。