redis 服务器/客户端安装与配置
1 redis server
- 1.1 获取redis源码包 //官网 http://redis.io/
- wget -c http://redis.googlecode.com/files/redis-2.4.15.tar.gz
- 1.2 解包
- tar zxf redis-2.4.15.tar.gz
- cd redis-2.4.15
- 1.3 安装
- make PREFIX=/usr/local/redis install
- //安装完成后,会/usr/local/redis/bin/目录下生成5个可执行文件,
- ls /usr/local/redis/bin/
- redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server
- redis-server:Redis服务器的daemon启动程序
- redis-cli:Redis命令行操作工具。
- redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
- redis-check-dump: 检查file.rdb 文件
- redis-check-aof:检查file.aof 文件
- 1.4 配置redis
- //建立conf与var目录
- mkdir -p /usr/local/redis/conf
- mkdir -p /usr/local/redis/var
- //redis.conf
- cat > /usr/local/redis/conf/redis.conf << EOF
- #daemonize:是否以后台daemon方式运行
- daemonize yes
- #pidfile:pid文件位置
- pidfile /var/run/redis.pid
- #bind:监听的ip地址
- bind 10.0.100.70
- #port:监听的端口号
- port 6379
- #timeout:请求超时时间,单位秒
- timeout 120
- #loglevel:log信息级别,支持四个级别,debug,notice,verbose,warning
- loglevel warning
- #日志文件位置
- logfile /usr/local/redis/var/redis.log
- #databases:开启数据库的数量
- databases 16
- ##snapshoot
- #save * *:保存快照的频率,第一个*表示多长时间,第二个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
- #在900秒之内,redis至少发生1次修改则redis抓快照到磁盘
- save 900 1
- #在300秒之内,redis至少发生100次修改则redis抓快照到磁盘
- save 300 100
- #在60秒之内,redis至少发生10000次修改则redis抓快照到磁盘
- save 60 10000
- #rdbcompression:是否使用压缩
- rdbcompression yes
- #dbfilename:数据快照文件名(只是文件名,不包括目录)
- dbfilename dump.rdb
- #dir:数据快照的保存目录(这个是目录)
- dir /usr/local/redis/var
- ##aof
- #appendonly:是否开启appendonlylog,AOF是另一种持久化方式,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。
- appendonly no
- #appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)
- appendfsync everysec
- no-appendfsync-on-rewrite no
- auto-aof-rewrite-percentage 100
- auto-aof-rewrite-min-size 64mb
- ##slow log
- #如果操作时间大于0.001秒,记录slow log,这个log是记录在内存中的,可以用redis-cli slowlog get 命令查看
- slowlog-log-slower-than 10000
- #slow log 的最大长度
- slowlog-max-len 128
- ##virtual memory
- #是否使用虚拟内存
- vm-enabled no
- #swap文件,不同redis swap文件不能共享。而且生产环境下,不建议放在tmp目录。
- vm-swap-file /tmp/redis.swap
- #vm大小限制。0 不限制,建议60-80% 可用内存大小
- vm-max-memory 0
- #根据缓存内容大小调整,默认32字节
- vm-page-size 32
- #page数。每 8 page 会占用1字节内存
- vm-pages 134217728
- #m 最大io线程数。注意: 0 标志禁止使用vm(开关真多)
- vm-max-threads 4
- #
- hash-max-zipmap-entries 512
- hash-max-zipmap-value 64
- #
- list-max-ziplist-entries 512
- list-max-ziplist-value 64
- set-max-intset-entries 512
- zset-max-ziplist-entries 128
- zset-max-ziplist-value 64
- activerehashing yes
- ##limit
- #最大使用内存单位<bytes>,默认情况下redis会占用可用的所有内存
- maxmemory 256000000
- #maxclients 最大连接数, 0 表示不限制
- maxclients 1024
- ##replication
- requirepass dongnan
- #slave
- #master的ip地址与端口号
- #slaveof 10.0.100.70 6379
- #设置slave到master的认证
- #masterauth dongnan
- #在master服务器挂掉或者同步失败时,从服务器是否继续提供服务
- slave-serve-stale-data yes
- EOF
- 1.5 启动redis
- /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
- //redis 进程与端口号
- ps -ef | grep redis
- root 19426 1 0 13:44 ? 00:00:00 /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
- lsof -i :6379
- COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
- redis-ser 19426 root 4u IPv4 7257634 TCP *:6379 (LISTEN)
- 1.6 验证redis
- telnet 10.0.100.70 6379
- Trying 10.0.100.70...
- Connected to monitor.test.com (10.0.100.70).
- Escape character is '^]'.
- set name test
- +OK
- get name
- $4
- test
- quit
- +OK
- Connection closed by foreign host.
- //使用redis-cli
- /usr/local/redis/bin/redis-cli -h 10.0.100.70 info
- redis_version:2.4.15
- redis_git_sha1:00000000
- redis_git_dirty:0
- arch_bits:64
- multiplexing_api:epoll
- gcc_version:4.4.4
- process_id:16508
- uptime_in_seconds:602110
- uptime_in_days:6
- lru_clock:1948675
- used_cpu_sys:129.20
- used_cpu_user:117.94
- used_cpu_sys_children:14.57
- used_cpu_user_children:158.95
- connected_clients:1
- connected_slaves:0
- client_longest_output_list:0
- client_biggest_input_buf:0
- blocked_clients:0
- used_memory:594999992
- used_memory_human:567.44M
- used_memory_rss:172482560
- used_memory_peak:594999904
- used_memory_peak_human:567.44M
- mem_fragmentation_ratio:0.29
- mem_allocator:jemalloc-2.2.5
- loading:0
- aof_enabled:0
- changes_since_last_save:0
- bgsave_in_progress:0
- last_save_time:1340097972
- bgrewriteaof_in_progress:0
- total_connections_received:34
- total_commands_processed:6946723
- expired_keys:0
- evicted_keys:0
- keyspace_hits:32
- keyspace_misses:0
- pubsub_channels:0
- pubsub_patterns:0
- latest_fork_usec:9602
- vm_enabled:0
- role:master
- db0:keys=1969249,expires=0
- 1.7 关闭redis
- /usr/local/redis/bin/redis-cli -h 10.0.100.70 -p 6379 shutdown
2 redis(php) api/客户端/扩展
- Redis的客户端实际上担负了通过网络协议与Redis Server进行通信的过程,通信的过程必须遵循协议规范,
- 让客户的调用更加符合特定语言的使用习惯。现有PHP客户端:rediska、phpredis、Predis、Redisent。
- 这些客户端中,有纯PHP的实现方案,也有二进制版本的实现方案。这里我们选择二进制版本的phpreids。
- //官网地址 http://redis.io/clients/
- 2.1 获取源码包
- wget -c https://nodeload.github.com/nicolasff/phpredis/tarball/master
- 2.2 解包(没错你下载的就是master)
- tar zxf master
- cd nicolasff-phpredis-f1231c9/
- 2.3 准备php扩展库所需环境
- /usr/bin/phpize
- Configuring for:
- PHP Api Version: 20041225
- Zend Module Api No: 20050922
- Zend Extension Api No: 220051025
- 2.4 配置
- ./configure --with-php-config=/usr/bin/php-config
- 2.5 编译安装
- make && make install
- //生成的redis.so
- file /usr/lib64/php/modules/redis.so
- /usr/lib64/php/modules/redis.so: ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), not stripped
- 2.6 编辑/etc/php.ini (我的rpm 方式安装的php)
- extension_dir = "/usr/lib64/php/modules"
- extension=redis.so
- //重启apache
- /etc/init.d/httpd restart
- 2.7 验证模块
- php -m | grep -i 'redis'
- redis
- //phpinfo 输出
- 2.8 验证
- cat > redis.php << EOF
- <?php
- $redis = new Redis();
- $redis->connect('10.0.100.70',6379);
- $redis->set('foo', 'Hello world');
- echo $redis->get('foo');
- ?>
- EOF
- $ php redis.php
- Hello world$
3 redis 定义
http://zh.wikipedia.org/wiki/Redis
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。
数据模型
除了常规的数值或字符串,redis的键值还可以是以下形式之一:
Lists (列表)
Sets (集合)
Sorted sets (有序集合)
Hashes (哈希表)
持久化
通常,Redis将数据存储于内存中,或被配置为使用虚拟内存。通过两种方式可以实现数据持久化:使用快照的方式,将内存中的数据不断写入磁盘;或使用类似MySQL的日志方式,记录每次更新的日志。前者性能较高,但是可能会引起一定程度的数据丢失;后者相反。
主从同步
Redis支持将数据同步到多台从库上,这种特性对提高读取性能非常有益。
性能
相比需要依赖磁盘记录每个更新的数据库,基于内存的特性无疑给Redis带来了非常优秀的性能。读写操作之间有显著的性能差异。
提供API的语言:
C/C++/C#/Clojure/Common Lisp/Erlang/Haskell/Java/Javascript/Lua/Objective-C/Perl/PHP/Python/Ruby/Scala/Go/Tcl
4 redis-cli 命令
- 连接操作相关的命令
- quit:关闭连接(connection)
- auth:简单密码认证
- 持久化
- save:将数据同步保存到磁盘
- bgsave:将数据异步保存到磁盘
- lastsave:返回上次成功将数据保存到磁盘的Unix时戳
- shundown:将数据同步保存到磁盘,然后关闭服务
- 远程服务控制
- info:提供服务器的信息和统计
- monitor:实时转储收到的请求
- slaveof:改变复制策略设置
- config:在运行时配置Redis服务器
- 对value操作的命令
- exists(key):确认一个key是否存在
- del(key):删除一个key
- type(key):返回值的类型
- keys(pattern):返回满足给定pattern的所有key
- randomkey:随机返回key空间的一个key
- rename(oldname, newname):将key由oldname重命名为newname,若newname存在则删除newname表示的key
- dbsize:返回当前数据库中key的数目
- expire:设定一个key的活动时间(s)
- ttl:获得一个key的活动时间
- select(index):按索引查询
- move(key, dbindex):将当前数据库中的key转移到有dbindex索引的数据库
- flushdb:删除当前选择数据库中的所有key
- flushall:删除所有数据库中的所有key
参考
http://www.redis.cn/documentation.html
redis安装使用
Redis 的安装配置介绍
redis安装以及php扩展
Redis的PHP客户端
redis-cli 命令总结
http://slj.me/2011/04/redis-cli-commands/
redis-commands
http://www.redis.cn/commands.html
#update 20120709
redis replication
磁盘io
cpu
结束
更多请:
linux 相关 37275208
vmware 虚拟化相关 166682360
本文转自 dongnan 51CTO博客,原文链接:http://blog.51cto.com/dngood/925481