Redis安装说明及应用场景介绍

Redis是个非常不错的开源软件,key-value存储,数据完全内存中,虽是单进程,由于其采用异步非阻塞IO操作,性能表现非凡。

虽然Redis的使用已经很广泛了,但考虑到可能有一些朋友没有使用过,还是写一些基础的,安装过程,应用场景类的文章。

Redis的特性简要列一下:

速度快:数据存于内存中
数据结构丰富: string, hash, list, set, sortedSst, bitmap
持久化:有2种持久方式 RDB,AOF 
主从复制:异步复制,支持部署方式 M ->S, M ->S ->S
发布/订阅:轻量级MQ
支持key过期自动失效
支持简单的事务
单进程,原子性操作,setnx expire 可作为分布式锁

Redis安装  是在 CentOS release 6.4 64bit 安装的,过程非常简单

1、下载安装文件

cd /data/apps

wget http://download.redis.io/releases/redis-3.0.7.tar.gz

2、解压安装

tar xzf redis-3.0.7.tar.gz 

cd redis-3.0.7

make

3、copy安装后生成的bin‘文件

mkdir -p  /data/apps/redis-3.0.7_6379/bin
mkdir -p  /data/apps/redis-3.0.7_6379/data

cd /data/apps/redis-3.0.7/src

	cp -rfp redis-benchmark    /data/apps/redis-3.0.7_6379/bin/redis-benchmark
cp -rfp redis-check-aof     /data/apps/redis-3.0.7_6379/bin/redis-check-aof
cp -rfp redis-check-dump  /data/apps/redis-3.0.7_6379/bin/redis-check-dump
cp -rfp redis-cli               /data/apps/redis-3.0.7_6379/bin/redis-cli
cp -rfp redis-sentinel        /data/apps/redis-3.0.7_6379/bin/redis-sentinel
cp -rfp redis-server          /data/apps/redis-3.0.7_6379/bin/redis-server

cd /data/apps/redis-3.0.7
cp -rfp redis.conf           /data/apps/redis-3.0.7_6379/redis.conf
cp -rfp sentinel.conf      /data/apps/redis-3.0.7_6379/sentinel.conf

4、启动服务

cd /data/apps/redis-3.0.7_6379/bin

./redis-server /data/apps/redis-3.0.7_6379/redis.conf

如果看到下面的图,则说明启动成功了

$ ./redis-server /data/apps/redis-3.0.7_6379/redis.conf

                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 3.0.7 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 14166
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |     http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

[14166] 15 Apr 12:30:11.312 # Server started, Redis version 3.0.7
[14166] 15 Apr 12:30:11.319 * DB loaded from disk: 0.007 seconds
[14166] 15 Apr 12:30:11.319 * The server is now ready to accept connections on port 6379
启动成功后的输出:日志里给出 Port、PID 与 “ready to accept connections”。

查看大图

由于redis默认不是以后台模式启动的,需要修改配置下。

找到这一行  daemonize no

修改为       daemonize yes

然后重新启动就可以了。

5、客户端连接使用. redis 默认使用 6379端口,不设置密码,客户端使用比较简单

cd /data/apps/redis-3.0.7_6379/bin

[root@localhost bin]# ./redis-cli 
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> 
其他的命令可以参考 http://redis.io/commands 使用。更复杂的操作,需要自己去查阅官方文档了。

6、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 。 需要做如下操作:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
sysctl -p

应用场景

其实这里有好多要说,就我们自己的业务来说使用非常广泛,我先简单列一下:

1、过期key会自动删除,命令expire

    这个是比较常用的,比如每日任务,key存储用户完成的任务ID,今日完成后,就标示已完成,key的失效时间设置成明日凌晨失效。

2、计数器使用

    统计访问次数,限制用户访问次数等都可以利用此特性

3、实时排行榜

    以前未使用redis之前,排行榜根本无法做到实时,基本是5分钟扫描统计。

    直接使用SortedSet,就可以轻松来做排行榜数据

4、最新文章

    这个是使用list类型,lpush和ltrim结合,可以保存最新的某个区间的数据

5、pub/sub

    Redis可以作为MQ来使用,消息的发布和订阅。

    主意:此特性是“forget”模式,Redis不存储消息,当Consumer端出问题时,消息就会丢失

6、作为MySQL的一个补充

    可以存储业务数据,作为关系型数据库的一个补充,但前提要开启持久化,不然重启后数据就丢掉了。

7、分布式锁

    这个可以参考先前的一篇文章。主要是 setnx 和 expire 相结合使用。

8、配置服务

    可以作为一个配置中心来使用,存储配置信息。

9、Cache

    这个自不用说了。

10、Lua

    Redis支持Lua脚本,编写若干命令组合为一个小型的非阻塞事务或者更新逻辑。

当然其应用远不止上面这些点,等待着我们去挖掘。

— 本文写于 2016 年 4 月 12 日,收录于《刘晓的博客》。转载请注明作者与出处。

刘晓

十余年一线研发与技术管理经验,关注高并发、分布式系统与中间件。 本文内容来自真实项目实践,如有偏颇,欢迎交流指正。

← 上一篇(更早)基于Redis实现分布式锁 Java版本(经典案例)

评论 0

评论区已随原站关闭,欢迎邮件交流:liuxiao.sh#gmail.com