Redis 非关系型数据库 ( Nosql )
简介:
Redis 是一个开源的,高性能的 key-value 系统,可以用来缓存或存储数据。
Redis 数据可以持久化,并且支持多种数据类型:字符串(string),列表(list),哈希(hash),集合(set)和有序集合(sorted set)。
能够对关系型数据库起到很好的补充作用。它还提供了多种客户端 Python 、Ruby 、Erlang 、PHP ,可以方便调用。
持久化:
Redis 是一种内存数据库(跟 memcache 类似),在数据存取效率方面很优秀,由于内存中的数据时刻面临丢失的危险,Redis 提供了两种持久化机制,及时将内存中的数据写入磁盘。
RDB 利用存储快照的方式把内存数据定期写入磁盘,半持久化
AOF 利用写日志的方式(类似 mysql 的 binlog),每执行一条更改 Redis 数据的命令,就写入到磁盘的一个 aof 文件中
Redis 默认开启 RDB 模式,关闭 AOF 模式,因为 AOF 更耗资源,但是对数据安全极高,称为全持久化,按需选择哪种模式。
主从功能:
为了防止 Redis 磁盘损坏,导致数据丢失,Redis 提供了复制功能,将一个主数据库的数据自动同步到从数据库,防止数据丢失。
主从原理:
1、从数据库启动后,向主数据库发送 SYNC 命令
2、主数据库收到 SYNC 命令后开始保存快照,在此期间所有发给主数据库的命令都被缓存起来
3、快照保存完后,主数据库把快照和缓存的命令一起发给从数据库
4、从数据库保存主数据发来的快照文件,并依次执行主数据库发来的缓存命令
在同步过程中,从数据库不会阻塞,它默认使用同步之前的数据继续响应客户端发来的命令
下载地址:https://code.google.com/p/redis/downloads/list
一、安装 Redis
shell > tar zxf redis-2.6..tar.gz
shell > cd redis-2.6.; make; make install
二、调整 Redis
shell > mkdir /usr/local/redis
shell > cd !$
shell > cp ../src/redis-2.6./redis.conf .
shell > cp ../src/redis-2.6./src/redis-cli .
shell > cp ../src/redis-2.6./src/redis-server .
shell > cp ../src/redis-2.6./src/redis-sentinel .
shell > cp ../src/redis-2.6./src/redis-benchmark .
shell > cp ../src/redis-2.6./src/redis-check-aof .
shell > cp ../src/redis-2.6./src/redis-check-dump .
## redis.conf 主配置文件
## redis-cli 命令行操作工具
## redis-server 启动程序
## redis-sentinel 集群管理工具
## redis-benchmark 性能测试工具,测试 redis 在当前系统配置下的读写性能
## redis-check-aof 更新日志检查,--fix 可以修复 log 文件
## redis-check-dump 检查本地数据文件
三、编辑 redis.conf
shell > mv redis.conf redis.conf.bak shell > vim redis.conf
daemonize yes # 以守护进程方式启动
pidfile /usr/local/redis/logs/redis.pid # 定义 pid 文件存放路径
port 6379 # 监听端口
timeout 300 # 请求超时时间
loglevel debug # 定义日志级别
logfile /usr/local/redis/logs/redis.log # 定义日志文件路径
databases 16 # 启动数据库实例数,默认连接的数据库为 ,可以通过 select N 来连接不同的数据库
# 从内存保存数据到磁盘的策略:
save 900 1 # 当有 1 条 keys 数据改变时,900 秒刷新到磁盘一次
save 10 # 当有 10 条 keys 数据改变时,300 秒刷新到磁盘一次
save 10000 # 当有 1W 条 keys 数据改变时,60 秒刷新到磁盘一次
rdbcompression yes # dump .rdb 数据库时,是否压缩数据对象
dbfilename dump.rdb # dump 数据库时,数据库保存的文件名
dir /usr/local/redis/data/ # dump 时数据库保存的路径
#-----------------------------------------------------------------------------------------------------
appendonly no # 是否开启日志功能,如果开启每次操作都会记录一条日志,相当于 mysql 的 binlog ,但是会影响效率
#appendfilename appendonly.aof # AOF 文件名称,默认为 ppendonly.aof
#appendfsync everysec # 同步数据到磁盘的规则:
#1、 no 不主动写入磁盘,依赖与系统的写入,一般 秒左右写入一次,性能最好,但是持久化没有保证。
#2、 everysec 每秒强制写入磁盘一次,在性能跟持久化方面折中,推荐使用。
#3、 always 每次收到写操作就立即强制写入磁盘,是最有保证的完全持久化,但是速度慢。
#no-appendfsync-on-rewrite yes # 在日志重写时,不进行命令追加操作,而只是将其放在缓冲区里,避免与命令的追加造成磁盘 IO 上的冲突
#auto-aof-rewrite-percentage 100 # 当前 AOF 文件的大小是上次日志重写得到的 AOF 文件大小的两倍时,自动启动新的日志重写过程
#auto-aof-rewrite-min-size 64mb # 当前 AOF 文件启动新的日志重写过程的最小值,避免刚启动 redis 时由于文件较小导致频繁重写
#-----------------------------------------------------------------------------------------------------
## 设置在向客户端应答时,是否把较小的包合并为一个包发送
四、启动 Redis
shell > echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf shell > sysctl vm.overcommit_memory=
## 调整内核参数,如果不调整 redis 会报一个警告信息
shell > mkdir /usr/local/redis/data # 创建 data 目录 shell > mkdir /usr/local/redis/logs # 创建 logs 目录 shell > redis-server /usr/local/redis/redis.conf # 启动 redis ,需要指定配置文件路径 shell > netstat -anpt | grep redis
tcp 0.0.0.0: 0.0.0.0:* LISTEN /redis-server
五、测试 Redis
-----------------------------------------------------------------------------------------------------
shell > redis-cli
redis 127.0.0.1:> set password
OK
redis 127.0.0.1:> get password
""
redis 127.0.0.1:> quit
## 登陆本机的 redis ,写入 keys/value ,读取 keys
shell > ls /usr/local/redis/data/
## 没有生成 dump.rdb ,因为半持久化的 save 规则没有触发
shell > redis-cli shutdown
shell > ls /usr/local/redis/data/
dump.rdb
## 当关闭 redis 的时候,会将内存中的数据保存为 dump.rdb
shell > redis-server /usr/local/redis/redis.conf
shell > redis-cli
redis 127.0.0.1:> get password
""
redis 127.0.0.1:> quit
## redis 启动后从 dump.rdb 文件中读取数据,所以数据依然存在
-----------------------------------------------------------------------------------------------------
shell > rm -rf /usr/local/redis/data/* shell > redis-cli
redis 127.0.0.1:6379> set password abcdef
OK
redis 127.0.0.1:6379> get password
"abcdef"
redis 127.0.0.1:6379> quit shell > kill -9 `cat /usr/local/redis/logs/redis.pid`
## 当不是正常关闭 redis 时,如 kill -9 、redis 服务器突然宕机等
shell > ls /usr/local/redis/data/
## 是不会将内存中的数据同步到磁盘的,也就是说不会生成 dump.rdb 文件
shell > redis-server /usr/local/redis/redis.conf shell > redis-cli
redis 127.0.0.1:> get password
(nil)
redis 127.0.0.1:> quit
## 这时启动 redis ,发现数据丢失了 。如果不能忍受这种丢失可以启动 AOF 全持久化。
-----------------------------------------------------------------------------------------------------
参考文献:
http://blog.csdn.net/qtyl1988/article/details/39553339
Redis 非关系型数据库 ( Nosql )的更多相关文章
- 非关系型数据库Nosql的优缺点分析
Nosql的全称是Not Only Sql,Nosql指的是非关系型数据库,而我们常用的都是关系型数据库.就像我们常用的mysql,oralce.sqlserver等一样,这些数据库一般用来存储重要信 ...
- Redis非关系型数据库
1.简介 Redis是一个基于内存的Key-Value非关系型数据库,由C语言进行编写. Redis一般作为分布式缓存框架.分布式下的SESSION分离.分布式锁的实现等等. Redis速度快的原因: ...
- 非关系型数据库(NOSQL)-Redis
整理一波Redis 简介,与memcached比较 官网:http://redis.io Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括 ...
- redis非关系型数据库的基本语法
导入并连接数据库: import redis # 导入redis模块,通过python操作redis 也可以直接在redis主机的服务端操作缓存数据库 import time # host是redis ...
- redis 非关系型数据库
redis 类型,数据存在磁盘里面,所以存储速度比较快,其他数据类型还是存储在数据库所以比较慢些 链接redis数据库: r=redis.Redis(host="%%%%%%%", ...
- Redis (非关系型数据库) 数据类型 之 list列表类型
Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素到列表的头部(左边)或者尾部(右边) list即可以作为“栈”也可以作为"队列". 操作: >lpush ...
- Redis (非关系型数据库) 数据类型 之 String类型
Redis 一个内存数据库,通过 Key-Value 键值对的的方式存储数据.由于 Redis 的数据都存储在内存中,所以访问速度非常快,因此 Redis 大量用于缓存系统,存储热点数据,可以极大的提 ...
- python 之操作redis数据库(非关系型数据库,k-v)
数据库: 1. 关系型数据库 表结构 2. 非关系型数据库 nosql (k - v 速度快),常用的时以下三种: memcache 存在内存里 redis 存在内存里 mangodb 数据还是存在磁 ...
- Redis 01: 非关系型数据库 + 配置Redis
数据库应用的发展历程 单机数据库时代:一个应用,一个数据库实例 缓存时代:对某些表中的数据访问频繁,则对这些数据设置缓存(此时数据库中总的数据量不是很大) 水平切分时代:将数据库中的表存放到不同数据库 ...
随机推荐
- 【requirejs】JS模块化工具requirejs教程
初识requirejs 随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用.单元 ...
- win7 QT +opencv环境搭建
1.Win7 Qt4.8.5+QtCreator2.8.0+mingw环境参考前博文先搭建 2.下载Cmake2.8.11.2版本,安装.运行 [项目]那编译器选择:MinGW4.4.另外,重新编译O ...
- Java API 操作Redis
针对Redis的Java客户端有很多种,具体查看官网信息:https://redis.io/clients#java 本次测试使用Jedis API,Jedis使用方便,其api方法名称与redis命 ...
- 记一次socket_create()函数耗时异常记录
背景: 下午开发时突然整个页面耗时增加,空接口每次都需要2-3秒的耗时,一开始以为连开发环境数据库出现问题,最后断开数据库跑,发现还是很慢 最终逐步调试此页面耗时,定位到了socket_create( ...
- js继承方式及其优缺点?
原型链继承的缺点一是字面量重写原型会中断关系,使用引用类型的原型,并且子类型还无法给超类型传递参数.借用构造函数(类式继承)借用构造函数虽然解决了刚才两种问题,但没有原型,则复用无从谈起.所以我们需要 ...
- java代码-----------继承练习
总结:父类和子类拥有相同的 方法时,父类的方法被覆盖,子类 package com.sads; class fong { void pprint() { this.print(); this.prin ...
- [转]Jsp 页面中的错误
1. Jsp 语法格式问题,导致其不能被翻译成 Servlet 源文件. 2. Jsp 翻译成 Servlet 源文件后出现的语法格式问题. 3. Jsp 翻译成 Servlet 后运行时发生异常.
- [Java.Web]Tomcat 常用配置
1. web.xml 文件最下方内容 (X:\apache-tomcat-7.0.77\conf\ 目录下) <welcome-file-list> <welcome-file> ...
- MySQL5.7.18,初始化完成登录,提示密码过
初始化完成登录,提示密码过期 原因: 安装CentOs的时候,默认安装了mysql,并且版本与自己安装的mysql版本不一致,直接使用mysql -uroot -p'password'连接,默认调用的 ...
- 01:Sysbench 基准压测 IO篇
line:V1.1 mail: gczheng@139.com date: 2017-11-17 一.Sysench测试前准备 1.1.压测环境 配置 信息 主机 Dell PowerEdge R73 ...