redis 概述及部署 安装php和python客户端
概述
Redis是一个基于key-value键值对的持久化数据库存储系统。redis支持的数据存储类型比memcached更丰富,包括strings(字符串),lists(列表),sets(集合)和sorted sets(有序集合)等。
这些数据类型支持push/pop,add/remove及取交集,并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached缓存服务一样,为了保证效率,数据都是缓存在内存中提供服务。和memcached不同的是,redis持久化缓存服务还会周期性的把更新的数据写入到磁盘以及把修改的操作记录追加到文件里记录下来,比memcached更有优势的是,redis还支持master-slave(主从)同步,这点很类似关系型数据库MySQL主从复制功能
Redis是一个开源的使用C语言编写(3万多行代码),支持网络,可基于内存亦可持久化的日志型,Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。
Redis软件的出现,再一定程度上弥补了memcached这类key-value内存缓存服务的不足,在部分场合可以对关系数据库起到很好的补充作用。redis提供了Python,Ruby,Erlang,PHP客户端,使用起来很方便.
redis特点
1.key-value键值类型存储
2.支持数据可靠存储及落地
3.单进程单线程高性能服务器
4.crash safe & recovery slow
5.单机qps可以达到10W
6.适合小数据量高速读写访问
Redis优点
1.与memcached不同,Redis可以持久化存储数据
2.性能很高:Redis能支持超过10W每秒的读写频率。
3.丰富的数据类型:Redis支持二进制的Strings,Lists,Hashes,Sets及sorted Sets等数据类型操作
4.原子:Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行
5.丰富的特性:Redis还支持publish/subscribe(发布/订阅),通知,key过期等等特性。
6.redis支持异机主从复制。
redis缺陷与陷阱
1.系统运行有毛刺
2.不同命令延迟差别极大
3.内存管理开销大(设置低于物理内存3/5)
4.buffer io造成系统OOM(内存溢出)
redis的数据类型
作为Key-value型存储系统数据库,Redis提供了键(Key)和值(value)映射关系。但是,除了常规的数值或字符串,Redis的键值还可以是以下形式之一,下面为最为常用的数据类型:
- String 字符串
- Hash 哈希表
- List 列表
- Set 集合
- Sorted set 有序集合
redis 持久化
通常,Redis将数据存储于内存中,或被配置为使用虚拟内存。通过两种方式可以实现数据持久化:
使用快照(snapshot)的方式,将内存中的数据不断写入磁盘,或使用类似MySQL的binlog日志
aof (但并不用于主从同步)方式,记录每次更新的日志。前者性能较高,但是可能会引起一定程度的数据丢失;后者相反。
#Snapshot(快照)
save #900秒有1key容量被更新,则触发快照写入磁盘
save
save
#AOF(更新日志)
appendfsync always #总是记录更新内容
appendfsync everysec #每秒记录更新内容
appendfsync no #不记录更新内容
特别提示:
如果选择了快照的策略,那么快照在每次进行保存的时候,都会阻碍执行前端的客户端请求。 快照会一次性将内存里的数据全都写进磁盘。
Redis的生产经验教训
1.一定要进行Master-slave主从同步配置,在出现服务故障时可以切换
2.在master禁用数据持久化,只需要在slave上配置数据持久化
3.物理内存+虚拟内存不足,这个时候dump一直死着,时间久了机器挂掉。这个情况就是灾难!
4.当Redis物理内存使用超过内存总容量的3/5时就会开始比较危险了,就开始做swap,内存碎片大!
5.当达到最大内存时,会清空带有过期时间的key,即使key未到过期时间。
6.redis与DB同步写的问题,先写DB,后写redis,因为写内存基本上没有问题。
Redis的服务器4.0版本源码编译安装
系统:Centos7
版本:redis4.0
redis下载地址:https://redis.io/download
redis源码编译
yum -y install wget gcc gcc-c++ make tar openssl-devel cmake
tar xf redis-4.0.10.tar.gz -C /usr/src/
cd /usr/src/redis-4.0.10/
make;make MALLOC=jemalloc;make PREFIX=/usr/local/redis install
mkdir -p /usr/local/redis/conf
cp /usr/src/redis-4.0.10/redis.conf /usr/local/redis/conf/
cp /usr/src/redis-4.0.10/sentinel.conf /usr/local/redis/conf/
ln -s /usr/local/redis/bin/* /usr/local/bin/
redis-server --version #服务端连接命令
Redis server v=4.0.10 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=d2228e273f4aff2f
redis-cli --version #客户端连接命令
redis-cli 4.0.10
编译安装命令执行完成之后,会在/usr/local/redis/bin/目录下生成5个可执行文件,分别是:
redis-server #Redis服务器的daemon启动程序
redis-cli #Redis命令操作工具。当然,你也可以用telnet根据其纯文本协议来操作
redis-benchmark #Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能。
redis-check-aof #对更新日志appendonly.aof检查,是否可用,类似检查mysql binlog的工具
redis-check-dump #用于本地数据库rdb文件的检查
Redis的服务器启动和系统参数调整
简化redis配置文件
cp /usr/local/redis/conf/redis.conf{,.bak} #备份配租文件
egrep -v "^$|^#" /usr/local/redis/conf/redis.conf.bak > /usr/local/redis/conf/redis.conf #简化配置文件
mkdir -p /data/redis/ #创建redis数据目录
更改redis配置文件/usr/local/redis/conf/redis.conf
#修改redis配置文件以下参数
cat -n conf/redis.conf | sed -n '1p;3p;4p;7p;9p;11p;21p'
bind 127.0.0.1
port
tcp-backlog
daemonize no
pidfile /var/run/redis_6379.pid
logfile ""
dir ./
#修改成以下设置
cat -n conf/redis.conf | sed -n '1p;3p;4p;7p;9p;11p'
bind 0.0.0.0 #监听地址
port #监听端口
tcp-backlog #tcp连接数
daemonize yes #是否后台启动
pidfile /data/redis/redis.pid #pid存放目录
logfile "/data/redis/redis.log" #日志存放目录
dir /data/redis/ #工作目录
redis服务器启动和关闭
#启动redis服务器
redis-server /usr/local/redis/conf/redis.conf
netstat -antup | grep redis
#关闭redis服务器
redis-cli shutdown
netstat -antup | grep redis
#连接redis服务器
redis-server /usr/local/redis/conf/redis.conf
redis-cli -h 127.0.0.1
系统参数优化调整
#启动redis以后,我们查看系统日志
cat /data/redis/redis.log
cat /data/redis/redis.log
:C Aug ::02.029 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
:C Aug ::02.029 # Redis version=4.0., bits=, commit=, modified=, pid=, just started
:C Aug ::02.029 # Configuration loaded
:M Aug ::02.033 * Increased maximum number of open files to (it was originally set to ).
#警告提示1:系统文件描述符设置的太小了,才1024,我们最好设置到10032
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 4.0. (/) bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port:
| `-._ `._ / _.-' | PID: 7703
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-' :M Aug ::02.035 # WARNING: The TCP backlog setting of cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of .
#由于/proc/sys/net/core/somaxconn设置为较低的128,因此无法强制设置1024的TCP backlog。
:M Aug ::02.035 # Server initialized
:M Aug ::02.035 # WARNING overcommit_memory is set to ! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
#警告提示3:overcommit_memory=0为不允许超额抢占内存,但是,rdb保存可能会失败。建议将vm.overcommit_memory = 1进行修改
:M Aug ::02.035 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.#警告提示4:你的内核中启用了巨大内存页的支持,这将与redis的延迟内存使用冲突。
:M Aug ::02.035 * Ready to accept connections
(1)调整系统文件描述符
echo "* - nofile 10240" >> /etc/security/limits.conf
bash #刷新下即生效
ulimit -n
(2)调整系统的TCP连接数
sysctl -a | grep soma
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.eth0.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
net.core.somaxconn = echo "net.core.somaxconn = 10240" >> /etc/sysctl.conf sysctl -p
net.core.somaxconn =
(3)调整系统内存分配策略
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
sysctl -p
net.core.somaxconn =
vm.overcommit_memory =
vm.overcommit_memory参数说明:
根据内核文档,该参数有三个值,分别是:
0:当用户空间请求更多的内存时,内核尝试估算出剩余可用的内存。
1:当设这个参数值为1时,内核允许超量使用内存直到用完为止,主要用于科学计算
2:当设这个参数值为2时,内核会使用一个绝不过量使用内存的算法,即系统整个内存地址空间不能超过swap+50%的RAM值,50%参数的设定是在overcommit_ratio中设定。
(4)关闭系统内核的巨大内存页支持
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
#添加到/etc/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local
(5)重启redis的服务器验证修改
redis-cli shutdown #关闭redis
> /data/redis/redis.log #清空redis日志
redis-server /usr/local/redis/conf/redis.conf #启动redis cat /data/redis/redis.log #查看redis日志
:C Aug ::42.049 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
:C Aug ::42.050 # Redis version=4.0., bits=, commit=, modified=, pid=, just started
:C Aug ::42.050 # Configuration loaded
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 4.0. (/) bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port:
| `-._ `._ / _.-' | PID: 8065
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-' :M Aug ::42.055 # Server initialized
:M Aug ::42.055 * DB loaded from disk: 0.000 seconds
:M Aug ::42.055 * Ready to accept connections
为php安装redis客户端扩展
(1)获取源码包
wget https://github.com/phpredis/phpredis/archive/2.2.4.tar.gz
(2)安装
unzip phpredis-master.zip #解压
cd /usr/src/phpredis-master/
/usr/local/php/bin/phpize
如果出现以下报错
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No:
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
yum install m4 autoconf #安装这些解决
/usr/local/php/bin/phpize #再次执行
./configure --with-php-config=/usr/local/php/bin/php-config
#编译安装
make; make install
(3)修改php.ini设置,重启php
echo "extension = redis.so" >> /usr/local/php/lib/php.ini
#将php.ini配置文件中的extension_dir修改成如下:
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/"
安装Python redis客户端操作redis
wget https://pypi.python.org/packages/source/r/redis/redis-2.10.1.tar.gz
tar xf redis-2.10..tar.gz
cd redis-2.10.
python setup.py install
开发python程序操作redis
python
import redis #引用redis支持库
r = redis.Redis(host='192.168.50.157',port='',password='') #建立redis数据库的连接对象(面向对象方式)
r.set('name','wk') #操作对象调用set方法写入数据
True
r.get('name') #操作对象调用get方式读取数据
'wk'
redis 概述及部署 安装php和python客户端的更多相关文章
- Redis概述以及Linux安装
Redis 概述 Redis是什么 Redis,Remote Dictionary Server,远程字典服务.是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.key-v ...
- Apache Ignite 学习笔记(一): Ignite介绍、部署安装和REST/SQL客户端使用
Apache Ignite 介绍 Ignite是什么呢?先引用一段官网关于Ignite的描述: Ignite is memory-centric distributed database, cachi ...
- Redis3.2集群部署安装
Redis集群部署安装 Linux版本:CentOS release 6.9 Redis 版本:redis-3.2.12.tar.gz 1.执行解压命令 tar -xzf redis-3.2.12.t ...
- Docker+Redis镜像的原理以及部署安装(超详解附截图)
文章来源:公众号-智能化IT系统. 一. DOCKER介绍 Docker简介 (1)Docker 是一个开源的应用容器引擎,基于 Go 语言,并遵从Apache2.0协议开源. (2)Docker 可 ...
- 第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块
第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块 virtualenv简介 1.安装virtuale ...
- redis 概述、windows版本下载启动访问退出安装、中文乱码、RedisDesktopManager下载
redis 概述 redis的key是string类型的:value有多种类型,但放入的不是特定类型数据,添加的都是string,只是redis把这些值组织成了各种数据结构.key和相应的值都是str ...
- Python基础学习(一)之Python的概述与环境安装
Python介绍 Python语言介绍 Python是一门高级的.面向对象的.解释性.脚本语言. 高级语言:贴近开发者,对应底层语言,底层语言贴近机器:java.C#.php .ruby 面向对象对应 ...
- 三十九.NoSQL概述 部署Redis服务 、 部署LNMP+Redis
1. 搭建Redis服务器 在主机 192.168.4.50 上安装并启用 redis 服务 设置变量test,值为123 查看变量test的值 1.1 搭建redis服务器 1.1.1 安装re ...
- Redis 部署安装
一.Redis介绍 Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多 ...
随机推荐
- 3.IOC的配置与应用(annotation的方式)
自动装载 @Autowired public class UserService { private UserDAO userDAO; public UserDAO getUserDAO() { re ...
- opencv3.0中contrib模块的添加+实现SIFT/SURF算法
平台:win10 x64 +VS 2015专业版 +opencv-3.x.+CMake+Anaconda3(python3.7.0) Issue说明:Opencv3.0版本已经发布了有一段时间,在这段 ...
- 使用Barrier分三步将大象放入冰箱
class Program { //构造大象和冰箱 private static ElephantsAndFridges elephantsAndFridges = new ElephantsAndF ...
- CentOS7 字体安装卸载
CentOS7 默认安装有 Fonts 程序, 所以能直接双击打开字体文件, 并且可以直接点击上图的 Install 按钮安装字体.采用这种安装方法,字体会被安装在 ~/.local/share/fo ...
- git diff 检查更新
git diff 检查更新 git fetch #需要先 fetch git diff master..origin/master --name-only -- [path] #path:指定检查 可 ...
- linux运维面试前,先来检查这些基础知识忘了没?
知乎上有这样一个问题:一个新手面试 Linux 运维工作至少需要知道哪些知识?其中有一个答案对这一话题的解读非常深入,今天特别分享给大家. 一.什么是大型网站运维? 首先明确一下,全文所讲的”运维“是 ...
- 二叉堆的应用——查找长度为N数组中第M大数
看到这个题目首先想到是排序,那么时间复杂度自然就是O(NlgN).那么使用二叉堆如何解决呢? 对于下面一个数组,共有12个元素,我们的目标就是找出第5大元素——12 首先建立一个具有M个元素的最小堆, ...
- Linux命令之nano(简单文本编辑器)
nano 字符终端文本编辑器 补充说明 nano 是一个字符终端的文本编辑器,有点像DOS下的editor程序.它比vi/vim要简单得多,比较适合Linux初学者使用.某些Linux发行版的默认编辑 ...
- 数字签名 转载:http://www.youdzone.com/signature.html
What is a Digital Signature?An introduction to Digital Signatures, by David Youd Bob (Bob's public k ...
- setTimeout设置为0 为啥不能立马执行
setTimeout(function(){}, timer) 是指延时执行.第一个参数是回调函数,第二个参数是指延时多久执行回调函数. setTimeout(function(){console.l ...