1 redis 初始
1.1 redis是什么
- 开源的
- 具有多种数据结构
- 高性能key-value服务器
- 高性能,功能丰富(pipeline,发布订阅,位图等等)
- 高可用分布式支持
- codis
- Twemproxy
1.2 redis的特性介绍
1.2.1 速度快
官方测试数据是:10w OPS(每秒处理10万的读写)
- Redis的数据是存储于内存中
- Redis是使用C语言编写的,代码也只有50000多行
- Redis是单线程的线程模型å
Redis速度快的最主要的原因是存储的介质:
register | fast | small | expensive |
---|---|---|---|
一级缓存 | |||
二级缓存 | |||
基于内存 | |||
本地磁盘 | |||
远程磁盘 | slow | big | cheap |
比较常见存储类型的读写
类型 | 每秒读写次数 | 随机读写延迟 | 访问带宽 |
---|---|---|---|
内存 | 千万级 | 80ns | 5GB |
SSD盘 | 35000 | 0.1-0.2ms | 100~300MB |
机械盘 | 100左右 | 10ms | 100MB左右 |
1.2.2 持久化
redis所有的数据保存在内存中,对数据的更新将异步地保存在磁盘上
1.2.3 支持多种数据结构
字符串,哈希,列表,集合,有序集合;
在后期的版本中衍生出了一些数据类型如:
- 位图(bitmaps)
- HyperLogLog: 超小内存唯一值计数
- GEO: 地图信息定位,可以用于计算经度纬度。
1.2.4 支持多种编辑语言
- ruby , python , go , java,php
1.2.5 功能丰富
- 发布订阅
- 支持lua脚本
- 支持简单的事务功能
- 支持pipeline,写一写并发脚本的功能
1.2.6 简单
- 不依赖外部库(like libevent)
- 单线程的进程模型
1.2.7 主从复制
1.2.8 高可用,分布式
- 高可用: redis-sentinel(v2.8)支持高可用
- 分布式: redis-cluster(3.0)支持分布式
1.3 redis典型的应用场景
- 缓存系统
- 充当cache层
- 计数器
- 排行榜
- 消息队列系统
- redis实现的分布订阅这样的消息队列系统
- 社交网络
- 实时系统
- 垃圾邮件处理系统
- 过滤处理系统
1.4 redis安装
1.4.1 编译安装
代码语言:javascript复制wget http://download.redis.io/releases/redis-3.0.6.tar.gz
tar xf redis-3.0.6.tar.gz
mv redis-3.0.6 /usr/local/cd /usr/local/
ln -s redis-3.0.6 redis
make && make install
root# which redis-server/usr/local/bin/redis-server# 运行redis服务,直接执行redis-server即可redis-server# 客户端连接redis-cli -h127.0.0.1 -p6379
代码语言:javascript复制6379是redis的默认端口,据说是redis的老式手机的键盘上敲打一个女歌手的名字时按到的数字; 1.4.1.1 验证服务运行
# 1ps -ef |grep redis# 2netstat -tunlp |grep redis# 3redis-cli -hlcoalhost -p6379 ping
1.4.1.2 redis可执行文件的说明
- Redis-check-aof: aof文件修复工具
- Redis-check-dump: rdb文件检查工具
- Redis-sentinel: sentinel服务器(2.8以后)
1.4.2 redis启动方式
- 直接运行redis-server
redis-server
- 动态参数启动redis
redis-server --port 6380[root@devops-node4 ~]# ps -ef |grep redis | grep -v greproot 6619 3438 0 00:07 pts/0 00:00:00 redis-server *:6379root 6627 6442 1 00:07 pts/1 00:00:00 redis-server *:6380
- 使用配置文件启动redis
- 生产环境建议使用模式,比如多实例配置的时候使用配置文件启动比较方便
cd /usr/local/redis/
mkdir config/data -pv
cp redis.conf config/redis6381.conf
cat config/redis6381.conf
daemonize yes
port 6381dir "/usr/local/redis/config/data"logfile "6381.log"[root@devops-node4 ~]# redis-server /usr/local/redis/config/redis6381.conf [root@devops-node4 ~]# ps -ef |grep redis |grep -v greproot 6619 3438 0 00:07 pts/0 00:00:00 redis-server *:6379root 6627 6442 0 00:07 pts/1 00:00:00 redis-server *:6380root 6912 1 2 00:15 ? 00:00:00 redis-server *:6381# 查看日志是否写入[root@devops-node4 data]# cat /usr/local/redis/config/data/6381.log |grep 6381|`-._`-...-` __...-.``-._|'` _.-'| Port: 63816912:M 28 Feb 00:15:50.488 * The server is now ready to accept connections on port 6381
1.4.3 客户端返回值
- 状态回复
ping
- 错误回复
hget hello field
- 整数回复
incr hello
- 字符串回复
get hello
- 多行字符串回复
mget hello foo
1.4.4 redis常用配置
- daemonize: 是都运行在后台进程
- port: 指定运行的端口
- logfile: redis日志文件文件名
- dir: redis工作目录
- RDB config的配置
- AOF config的配置
- slow log config的配置
- maxMemory等等
- …
# 在redis服务中查看所有的配置项redis> config get *
未完待续。。。