说明:
最近开始系统化学习这个通用技术,将笔记与心得整理下来,希望自己能够进一步学习。
redis的特性
- 速度快
- 持久化
- 多种数据结构
- 支持多种编辑语音
- 功能丰富
- 简单
- 主从复制
- 高可用、分布式
接下来会一一描述:
1、速度快-内存
10w OPS(每秒进行十万次读写),这是官方给出的数字,但一般官方都会给出偏高一点的数字,但通过我们实际用例测试,达到万级别的读写是没问题的(其他因素会影响结果)。
它将数据存储在内存中;它是使用5000多行的C语言实现的;它的线程模型是单线程。
不管代码写的多好啊,没有物理基础,是无法质变的提高性能的,这张图是关于计算机各个存储的介质。从上到下,包括寄存器、一级缓存、二级缓存、内存、本地硬盘、远程硬盘,从上到下越来越慢。(个人认为redis快的根本原因就是使用内存)
2、持久化(断电不丢数据)
我们都知道内存不具有持久化的特性,也就是说当我们的机器断电的时候,是无法对内存的数据进行恢复的,redis也想到了这一点,所以提供一个持久化的功能。
Redis所有数据保持在内存中,对数据的更新将异步地保存到磁盘上。
3、多种数据结构
我们都知道redis是key-value格式进行存储的,redis也存在五种数据结构存储,string、hash、link、sets、sorted sets。除了这几种,还有其他的几种数据结构。
-
BitMaps:位图
-
HyperLogLog:超小内存唯一值计数
-
GEO:地理信息定位
4、支持多种编辑语音
- Java
- Php
- Python
- Ruby
- Lua
- Node.js
- 等等。。。。
5、功能丰富
- 发布订阅
- Lua脚本
- 事务
- pipeline
6、“简单”
虽然redis只有2万3千行代码,但似乎与前面提到的5万行代码不同,因为redis 3.0提供了一个集群的功能,也就是分布式的功能。但它的单机代码只有2万多行,也就是说对一般的开发人员来说去修改源代码进行定制化。推荐带着问题去看代码。
它的简单也体现在它不依赖外部库(like libevent),在安装部署的时候就能体现。也能看到它的线程模型是单线程的,也就是说对线程开发会比较容易一些。
7、主从复制
在redis中有两种角色,有主服务器与从服务器,将主服务器数据复制到从服务器上,这样可以提供高可用及分布式一个很好的基础。
8、高可用-分布式
本身redis的单点,主从复制模型,对于一个实现高可用的数据库来说比较难,或者说根本不可能的,但是从redis 2.8版本后出现了redis-sentinel这样的功能来支持高可用,分布式的功能对于当下各个公司也是非常重要的,所以说redis 3.0版本支持redis-cluster。
redis典型应用场景
- 缓存系统
- 计数器
- 消息队列系统
- 排行榜
- 社交网络
- 实时系统
redis安装(Linux)
- wget http://download.redis.io/releases/redis-3.0.7.tar.gz
- tar -xzf redis-3.0.7.tar.gz
- ln -s redis-3.0.7 redis
- cd redis
- make && make install
安装完成后我们可以了解下,redis-server对应redis服务器;redis-cli对应redis命令行客户端;redis-benchmark对应redis性能测试工具;redis-check-aof对应AOF文件修复工具;redis-check-dump对应RDB文件检查工具;redis-sentinel对应Sentinel服务器(2.8以后)。
redis启动方式
- 最简启动redis:redis-server
- 动态参数启动redis: redis-server --port 6380
- 配置启动redis: redis-server configPath
验证方法:
- ps -ef | grep redis
- netstat -antpl | grep redis
- redis-cli -h ip -p port ping
三种启动方式比较
- 生产环境选择配置启动
- 单机多实例配置文件可以用端口区分开
redis常用配置
- daemonize --> 是否是守护进程(no | yes) 【通常建议yes】
- port --> redis对外端口号
- logfile --> redis系统日志
- dir --> redis工作目录