1 Redis 概述

  REmote DIctionary Server(Redis)是一个基于key-value键值对的持久化数据库存储系统。redis和大名鼎鼎的Memcached缓存服务软件很像,但是Redis支持的数据存储类型比Memcached更丰富,包括strings(字符串)、lists(列表)、sets(集合)和sorted sets(有序集合)等

  这些数据类型支持push/pop、add/remove及取交集、并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached缓存服务一样,为了保证效率,数据都是缓存在内存中提供服务。和memcached不同的是,redis持久化缓存服务还会周期性的把更新的数据写入到磁盘以及把修改的操作记录追加到文件里记录下来,比Memcached更有优势的是,redis还支持master-slave(主从)同步,这点很类似关系型数据库MySQL主从复制功能

  Redis是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、key-value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持

  Redis软件的出现,在一定程度上弥补了memcached这类key-value内存缓存服务的不足,在部分场合可以对关系数据库起到很好的补充作用。redis提供了Python,Ruby,Erlang,PHP客户端,使用起来很方便。Redis官方文档如下:

  https://redis.io/documentation

  http://redis.cn/

  1.1 Redis优点

  • 与memcached不同,Redis可以持久化存储数据
  • 性能很高:Redis能支持超过10W美妙的读写频率
  • 丰富的数据类型:Redis支持二进制的Strings,Lists,Hashes,Sets及sorted Sets等数据类型
  • 原子:Redis的所有操作都是原子性,同时Redis还支持对几个操作全并后的原子性执行
  • 丰富的特性:Redis还支持publish/subscribe(发布/订阅),通知,key过期等等特性
  • Redis支持异机主从复制

  1.2 缺点

  • 系统运行有毛刺
  • 不同命令延迟差别极大
  • 内存管理开销大
  • buffer io造成OOM

  1.3 Redis的数据类型

  • String 字符串
  • List 列表
  • Set 集合
  • Sorted set 有序集合

2 Redis的安装及使用

  Redis的生产经验教训

  • 要进行Master-slave主从同步配置,在出现服务故障时可以切换
  • 在master禁用数据持久化,只需在slave上配置数据持久化
  • 物理内存+虚拟内存不足,这个时候dump一直死这,时间久了机器挂掉。这个情况就是灾难!64-128G内存,SSD硬盘
  • 当Redis物理内存使用超过内存总容量的3/时就会开始比较危险了,就开始做SWAP,内存碎片打!
  • 当达到最大内存时,会清空带有过期时间的key,及时key未到过期时间
  • redis与DB同步写的问题,先写DB,厚些redis,因为写内存基本上没有问题

  2.1 redis环境部署

Master:10.0.0.1 Centos6.5 Redis-Master

  2.2 安装

#Master
[root@Redis-Master downloads]# wget http://download.redis.io/releases/redis-3.2.4.tar.gz
[root@Redis-Master downloads]# tar zxf redis-3.2.4.tar.gz
[root@Redis-Master downloads]# cd redis-3.2.4
[root@Redis-Master redis-3.2.4]# make PREFIX=/usr/local/redis install
#查看目录
[root@Redis-Master redis-3.2.4]# ls /usr/local/redis/bin/
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server
#只有这一个bin目录
#redis-server:Redis服务器的daemon启动程序
redis-cli:Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作
redis-benckmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
redis-check-aof:对更新日志appendonly.aof检查,是否可用,类似检查mysql binlog的工具
redis-check-dump:用于本地数据库rdb文件的检查

  2.3 配置并启动redis服务

1、配置环境变量
[root@Redis-Master /]# echo 'PATH=/usr/local/redis/bin/:$PATH' >>/etc/profile
[root@Redis-Master /]# source /etc/profile
2、拷贝配置文件
[root@Redis-Master /]# cd /tmp/downloads/redis-3.2.4
[root@Redis-Master redis-3.2.4]# mkdir /usr/local/redis/conf
[root@Redis-Master redis-3.2.4]# cp redis.conf /usr/local/redis/conf/
3、启动
[root@Redis-Master /]# echo "vm.overcommit_memory = 1" >>/etc/sysctl.conf
[root@Redis-Master /]# sysctl -p #以防后台保存失败
[root@Redis-Master /]# redis-server /usr/local/redis/conf/redis.conf &
#vm.overcommit_memory该参数有三个值,分别是:
0:当用户空间请求更多的内存时,内核尝试估算出剩余可用的内存
1:当设这个参数值为1时,内核允许超量使用内存知道用完为止,主要用于科学计算
2:当设这个参数值为2时,内核会使用一个绝不过量使用内存的算法,即系统整个内存地址空间不能超过swap+50%的RAM值,50%参数的设定是在overcommit_ratio中设定
4、关闭
[root@Redis-Master /]# redis-cli shutdown save

  2.4 通过客户端来操作redis数据库

1、存值
[root@Redis-Master /]# redis-cli
127.0.0.1:6379> set id 001
OK
2、取值
127.0.0.1:6379> get id #可以get ket,无法get value
"001"
3、删除
127.0.0.1:6379> del id #删除key
(integer) 1
4、查看是否存在
127.0.0.1:6379> EXISTS id
(integer) 0 #0为不存在
5、取所有
127.0.0.1:6379> keys * #redis默认有16个库,0为开头 #远程连接
[root@Redis-Master /]# redis-cli -h 10.0.0.1 -p 6379 #可以设置密码,跟mysql很像
10.0.0.1:6379> #telnet和nc都可以操作

  2.5 redis的安全账户密码及授权权限

[root@Redis-Master /]# cat /usr/local/redis/conf/redis.conf |grep requirepass
# If the master is password protected (using the "requirepass" configuration
# requirepass foobared
requirepass 123.com
格式:[ requirepass ] [ password ]
#123.com就是密码
#重启redis #测试
127.0.0.1:6379> set 1 daniel
(error) NOAUTH Authentication required.
#提示没认证
127.0.0.1:6379> auth 123.com
OK
#登录
127.0.0.1:6379> set 1 daniel
OK
#再次测试,成功 #或者
[root@Redis-Master /]# redis-cli -a 123.com
127.0.0.1:6379>
#可以直接输入密码后进入 #命令重命名
[root@Redis-Master /]# grep rename-command /usr/local/redis/conf/redis.conf
# security of read only slaves using 'rename-command' to shadow all the
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
# rename-command CONFIG ""
rename-command set "se"
#格式 [ rename-command ] [ CONFIG ] [ "" ]
#测试
[root@Redis-Master /]# redis-cli -a 123.com
127.0.0.1:6379> set 2 cat
(error) ERR unknown command 'set'
127.0.0.1:6379> se 2 cat
OK
#set无法使用,se可以

  2.7 在php环境中安装redis的客户端扩展

[root@RS02 downloads]# wget https://codeload.github.com/phpredis/phpredis/zip/develop
[root@RS02 downloads]# unzip develop
[root@RS02 downloads]# cd phpredis-develop/
[root@RS02 phpredis-develop]# /usr/local/php5.6.33/bin/phpize
[root@RS02 phpredis-develop]# ./configure --with-php-config=/usr/local/php5.6.33/bin/php-config
[root@RS02 phpredis-develop]# make && make install #修改php.ini,重启php
[root@RS02 php5.6.33]# sed -i 's#; extension_dir = "./"#extension_dir = "/usr/local/php5.6.33/lib/php/extensions/no-debug-non-zts-20131226/"#g' /usr/local/php5.6.33/lib/php.ini
[root@RS02 php5.6.33]# echo "extension = redis.so" >>/usr/local/php5.6.33/lib/php.ini
[root@RS02 php5.6.33]# /usr/local/php5.6.33/sbin/php-fpm

#出现这个信息就算正确

  2.8 开发php程序实战redis服务

#开启redis的远程连接
[root@Redis-Master /]# sed -i 's/bind 127.0.0.1/#bind 127.0.0.1/g' /usr/local/redis/conf/redis.conf
#重启
[root@RS02 php5.6.33]# cat /usr/local/nginx/html/index.php
<?php
$redis = new Redis();
$redis->connect('10.0.0.1',6379) or die ("heh");
$redis->auth('123.com');
$redis->set('100','DANIEL');
$var = $redis->get('100');
echo "$var\n";
?>
[root@Redis-Master /]# curl 10.0.0.81
DANIEL
成功

  2.9 开发python程序实战操作redis服务

redis-day1的更多相关文章

  1. redis学习-day1

    1.nosql数据库的一种. 2.Redis 是一种开源的,先进的key-value存储.它通常被称为数据结构服务器.因为键可以包含字符串.哈希.链表.集合和有序集合. 特点: 3.为了保证效率,数据 ...

  2. redis数据类型及使用场景

    Redis数据类型  String: Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字. 常用命令:  set,get,decr,incr,mge ...

  3. redis 数据类型详解 以及 redis适用场景场合

    1.  MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的 ...

  4. redis系列-redis的使用场景

    redis越来越受大家欢迎,提升下速度,做下缓存,完成KPI之利器呀.翻译一篇文章<<How to take advantage of Redis just adding it to yo ...

  5. 让Redis在你的系统中发挥更大作用的几点建议

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/105.html?1455868313 Redis在很多方面与其他数据库解决 ...

  6. Redis应用场景-转载

    1.  MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的 ...

  7. Redis基础知识之—— 缓存应用场景

    转载原文:http://www.cnblogs.com/jinshengzhi/articles/5225718.html 一.MySql+Memcached架构的问题 Memcached采用客户端- ...

  8. 【转载】Redis的一些使用场景

    看了一些文章,关于Redis的使用场景,觉得挺好的.Redis肯定远远不止作为缓存而使用.Redis更像是一个实现很好的数据结构服务器,通过TCP栈协议提供服务.下面进行详细描述. http://da ...

  9. <转>Redis 应用场景

    http://blog.csdn.net/hguisu/article/details/8836819 1.  MySql+Memcached 架构的问题 Memcached采用客户端-服务器的架构, ...

  10. 转:Redis作者谈Redis应用场景

    毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象 ...

随机推荐

  1. InnoDB的行记录格式, Compact, Redundant, Compressed, Dynamic

    InnoDB存储引擎和大多数数据库一样(如Oracle和Microsoft SQL Server数据库),记录是以行的形式存储的.这意味着页中保存着表中一行行的数据.到MySQL 5.1时,InnoD ...

  2. 使用minikube在本机测试kubernetes

    目录 简介 安装 Docker CE 安装 kubectl 安装 minikube 启动 minikube 启动 dashboard 启动一个服务 删除服务 参考 本文主要讲解 minikube(ku ...

  3. 6.046 Design and Analysis of Algorithms

    课程信息 6.046 Design and Analysis of Algorithms

  4. [转载]Vue 2.x 实战之后台管理系统开发(一)

    2. 开发前须知 我的后台管理系统项目运用了如下框架/插件: Vue 2.x —— 项目所使用的 js 框架,我所使用的版本是:2.1.10 vue-router 2 —— Vue 2.x 配套路由, ...

  5. 如鹏网学习笔记(十四)ASP.NET

    Asp.net笔记 一.Socket类 进行网络编程的类,可以在两台计算机之间进行网络通讯 过程: 向服务器发送指令: GET /index.html HTTP/1.1 Host:127.0.0.1: ...

  6. [javaSE] 网络编程(TCP服务端客户端互访阻塞)

    客户端给服务端发送数据,服务端收到数据后,给客户端反馈数据 客户端: 获取Socket对象,new出来,构造参数:String的ip地址,int的端口号 调用Socket对象的getOutputStr ...

  7. PHP高级工程师面试 - 笔试题

    Part1:HTTP协议 1.状态码的含义 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 100 (继续) 请求者应当继续提出请求. 服务器返回此代码表示已收到请求 ...

  8. 系统分析与设计 homework2

    1. 简述瀑布模型.增量模型.螺旋模型(含原型方法)的优缺点. 瀑布模型 优点: 降低了软件开发的复杂度,提高软件开发过程中的透明性,提高软件开发的可管理性. 为项目提供了按阶段划分的检查点. 当前一 ...

  9. POJ P2104 K-th Number

    You are working for Macrohard company in data structures department. After failing your previous tas ...

  10. JQ的几组API辨析:

    1.插入: Jq的插入一共有八个API可供选择,结果相类似,下面将以例子,简单明了的介绍下用法: <select name="one" multiple="mult ...