一、Redis基础
1.概述
Redis:Remote Dictionary Server,远程字典服务器;发行与2009年,本质上来说,提供一种数据结构的远程存储结构;基于BSD开源协定的高级键值缓存和存储。常用于作为数据结构服务器(data structure server),能够存储列表、属组、字符串、hash、集合、有序集合、Bitmaps以及hyperloglogs
2.特性
(1)所有数据集必须在内存中运行,性能高
(2)能提供持久存储;在内存中运行,周期性将内存中数据写入磁盘用于冗余数据,仅保证下一次Redis启动后数据依然存在,而不是数据的直接访问
注释:持久化方式
快照(Snapshotting)数据从内存中异步传输至磁盘上保存起来
AOF(Append Only File)每次的写操作附加在一个现有的文件后面,类似于Mysql的事务日志
(3)单进程,响应所有请求
(4)支持Lua脚本完成复杂的操作
(5)支持组从模式,实现组从架构实现高可用;借助于sentinel来监控主节点,当发生故障提升从节点
(6)redis 3.0开始支持集群,实现分布式,去中心化,读写操作可以在多节点进行
(7)支持实现消息队列,可当做订阅使用
3.评估数据
(1)100万较小的键值字符串数据使用100MB内存
(2)单线程,因此多核CPU只有一个核心会使用;但CPU不一定会成为瓶颈,因为Redis是非常简单的键值存储
(3)大体上每秒承载50万并发
4.Redis 3.0新功能:2015年4月1日正式推出
(1) 对于Cluster功能进行改进
(2) 新的数据类型:embedded string
(3) LRU(最近最小使用)算法改进
预设随机取5个样本,插入并排序至一个pool,移除最佳者,如此反复,直到内存用量小于maxmemory设定
样本数量为5,多于先前的3
从局部最优趋向于全局最优
5.存储系统
RDBMS关系型数据库:Oracle、DB2、PostgreSQL、MySQL、SQL Server… ...
NoSQL非关系型数据库:Cassandra、HBase、Memcached、MongoDB、Redis… …
key-value NoSQL:键值存储NoSQL,Memcached、Redis… ...
Column family NoSQL:列式存储NoSQL,Cassandra、Hbase… ...
Documentation NoSQL:文档存户NoSQL,MongoDB… ...
Graph NoSQL:图示存储NoSQL,Neo4j… ...
NewSQL分布式的关系型数据库系统:Aerospike、foundationDB、rethinkDB
二、Redis和Memcached对比
1.Memcached的优势
(1)分布式的内存对象缓存系统
(2)支持LRU算法
(3)多线程;善用多核CPU,更少的阻塞类操作
(4)更少的内存开销、内存分配压力、内存碎片
2.Redis优势
(1)丰富的资料形态操作
(2)内奸replication复制及cluster集群功能
(3)就地更新(in-place update) 操作,直接在内存中更新
(4)支持持久化,避免雪崩效应
三、Redis安装配置
1.Redis组件
redis-server:服务器端
redis-cli:命令行客户端,基于Redis协议连入redis服务端
redis-benchmmark:redis压力测试工具
redis-check-dump &redis-check-aof:实现redis检查的工具,检查两种持久化后的文件是否出现错误
2.安装redis
(1)编译安装方式
无需configure,直接make即可编译;复制阳历配置文件
(2)RPM包安装Redis
epel源:yuminstall -y redis
注意:
1) 最新版本的可以在官方站点redis.io或者在pkgs下载RPM包
2) 依赖于jemalloc,高性能分配算法库
3.配置文件
[root@localhost ~]#vim /etc/redis.conf
(1)GENERAL配置段
daemonize no |
是否以守护进程运行,默认为no;但是基于脚本启动依然运行为守护进程 |
pidfile /var/run/redis/redis.pid |
pid文件 |
port 6379 |
监听端口6379/tcp |
tcp-backlog 511 |
tcp-backlog(等待队列)的长度 |
bind 127.0.0.1 |
监听地址;本地建议监听在unixsocket在内存中直接交换 |
timeout 0 |
客户端连接超时时间,0不超时 |
tcp-keepalive 0 |
tcp-keepalive功能 |
loglevel notice |
日志级别 |
logfile /var/log/redis/redis.log |
日志文件 |
databases 16 |
内部数据集合数量,默认都放置0号数据库,在分布式情况下不支持多库存储 |
(2)SNAPSHOTTING:快照持久化配置段
save
实例:
save " " :禁用RDB格式的持久化功能
save 900 1:在900秒至少有一个键发生变化就进行一次持久化
save 300 10:在300秒内10个键发生变化
save 60 10000:在60秒内10000个键发生变化
(3)REPLICATION:复制相关配置
slaveof
注意:当启用该选项,表示为Redis主服务器
slave-read-only yes:从服务器是否是只读
(4) SECURITY:安全相关的配置
(5) LIMITS:限制相关的配置
maxclients 10000:最大的并发客户端数量
maxmemory
(6) APPEND ONLY MODE:AOF持久化功能配置段
appendonly no:禁用AOF持久化功能
appendfilename"appendonly.aof":保存文件名称
appendfsync everysec:是否使用fsync功能
注意:
两种持久化方式可以并行使用,不冲突
(7) LUA SCRIPTING:Lua脚本配置段
lua-time-limit5000
(8) SLOW LOG:慢查询日志配置段
(9) LATENCY MONITOR:监控功能配置段
(10) Event notification :事件通知机制配置段,和发布订阅相关
(11) ADVANCED CONFIG :高级配置,键和某些集合如何工作的属性
4.启动服务
[root@localhost ~]#systemctl start redis
[root@localhost ~]#systemctl status redis
[root@localhost ~]#ss -tnl
5.redis-cli命令行接口连接服务
(1)连接服务器
格式:redis-cli [OPTIONS] [cmd [arg [arg ...]]]
-h
-p
-s
-a
-r
Examples:
cat /etc/passwd | redis-cli -x set mypasswd
redis-cli get mypasswd
redis-cli -r 100 lpush mylist x
redis-cli -r 100 -i 1 info | grepused_memory_human:
redis-cli --eval myscript.lua key1 key2 ,arg1 arg2 arg3
redis-cli --scan --pattern '*:12345*'
注意:
默认是不启用认证功能的,可以直接连接使用
(2)获取帮助
因为redis功能强大,当获取帮助时候需要指明具体方面
Type:
"help @
"help
"help
实例:
[root@localhost~]# redis-cli -h 127.0.0.1
127.0.0.1:6379>help @STRING
127.0.0.1:6379>help APPEND