简介:

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 )的更多相关文章

  1. 非关系型数据库Nosql的优缺点分析

    Nosql的全称是Not Only Sql,Nosql指的是非关系型数据库,而我们常用的都是关系型数据库.就像我们常用的mysql,oralce.sqlserver等一样,这些数据库一般用来存储重要信 ...

  2. Redis非关系型数据库

    1.简介 Redis是一个基于内存的Key-Value非关系型数据库,由C语言进行编写. Redis一般作为分布式缓存框架.分布式下的SESSION分离.分布式锁的实现等等. Redis速度快的原因: ...

  3. 非关系型数据库(NOSQL)-Redis

    整理一波Redis 简介,与memcached比较 官网:http://redis.io Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括 ...

  4. redis非关系型数据库的基本语法

    导入并连接数据库: import redis # 导入redis模块,通过python操作redis 也可以直接在redis主机的服务端操作缓存数据库 import time # host是redis ...

  5. redis 非关系型数据库

    redis 类型,数据存在磁盘里面,所以存储速度比较快,其他数据类型还是存储在数据库所以比较慢些 链接redis数据库: r=redis.Redis(host="%%%%%%%", ...

  6. Redis (非关系型数据库) 数据类型 之 list列表类型

    Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素到列表的头部(左边)或者尾部(右边) list即可以作为“栈”也可以作为"队列". 操作: >lpush ...

  7. Redis (非关系型数据库) 数据类型 之 String类型

    Redis 一个内存数据库,通过 Key-Value 键值对的的方式存储数据.由于 Redis 的数据都存储在内存中,所以访问速度非常快,因此 Redis 大量用于缓存系统,存储热点数据,可以极大的提 ...

  8. python 之操作redis数据库(非关系型数据库,k-v)

    数据库: 1. 关系型数据库 表结构 2. 非关系型数据库 nosql (k - v 速度快),常用的时以下三种: memcache 存在内存里 redis 存在内存里 mangodb 数据还是存在磁 ...

  9. Redis 01: 非关系型数据库 + 配置Redis

    数据库应用的发展历程 单机数据库时代:一个应用,一个数据库实例 缓存时代:对某些表中的数据访问频繁,则对这些数据设置缓存(此时数据库中总的数据量不是很大) 水平切分时代:将数据库中的表存放到不同数据库 ...

随机推荐

  1. Docker学习(二)docker镜像操作

    上一篇:docker学习(一)在centos7上安装docker 列出所有docker镜像 docker images 拉取镜像 docker pull 镜像名 我这里一Tomact为例 首先在Doc ...

  2. 初次使用git遇到的问题总结

    第一次使用git时,遇到好多问题,但也都是小问题,下边我把这些问题总结一下. 问题一: 创建远程仓库的时候,如果你勾选了Initialize this repository with a README ...

  3. 数字证书在web应用中实现登陆

    1数字证书登录认证的优点 作为企业信息系统的第一道大门,身份认证是确保企业信息资源只能被合法用户所访问的重要保障. 传统的口令认证方式虽然简单,但是由于其易受到窃听.重放等攻击的安全缺陷,使其已无法满 ...

  4. Luogu 1452 Beauty Contest

    Luogu 1452 Beauty Contest 求平面最远点对,先求出凸包,再找凸包的直径. 使用旋转卡壳,直径一定出现在对踵点对间.比较不同点到同一直线距离可以用叉积算三角形面积来比较. 实现时 ...

  5. 淘宝npm镜像使用

    淘宝NPM镜像使用 镜像使用方法 1.config命令 npm config set registry https://registry.npm.taobao.org npm info undersc ...

  6. 转:Excel导入SQL数据库完整代码

    Excel导入SQL数据库完整代码 protected void studentload_Click(object sender, EventArgs e) {//批量添加学生信息 SqlConnec ...

  7. 40+个对初学者非常有用的PHP技巧

    1.不要使用相对路径,要定义一个根路径 这样的代码行很常见: require_once('../../lib/some_class.php'); 这种方法有很多缺点: 它首先搜索php包括路径中的指定 ...

  8. PHP面向对象(OOP)----访问限制符

    访问控制修饰符指public.protected.private三个关键词来修饰类的成员属性和成员方法,可以有不同的权限 public:[共有的]类里面调用和类外面调用都是可以的 protected: ...

  9. flannel vxlan 实现原理【转】

    flannel是coreos为kubernets提供的网络解决方案,主要为打通跨节点的容器通信,其中vxlan模式为flannel实现的一种后端模式,其他模式还包括udp, host-gw等,可以通过 ...

  10. 自定义显示提示一段时间自动消失ShowMsgText控件

    public partial class ShowMsgText : Label { public string TextMsg { get { return Text; } set { timer1 ...