试用Redis安装、php环境连接、测试

Redis介绍
Redis本质上一个Key/Value数据库,与Memcached类似的 NoSQL型数据库,但是他的数据可以持久化的保存在磁盘上,解决了服务重启后数据不丢失的问题,他的值可以是string(字符串)、list(列 表)、sets(集合)或者是ordered sets(被排序的集合),所有的数据类型都具有push/pop、add/remove、执行服务端的 并集、交集、两个sets集中的差别等等操作,这些操作都是具有原子性的,Redis还支持各种不同的排序能力
Redis 2.0更是增加了很多新特性,如:提升了性能、增加了新的数据类型、更少的利用内存(AOF和VM)
Redis支持绝大部分主流的开发语言,如:C、Java、C#、PHP、Perl、Python、Lua、Erlang、Ruby等等
官网:http://code.google.com/p/redis/

Redis性能
根据Redis官方的测试结果:在50个并发的情况下请求10w次,写的速度是110000次/s,读的速度是81000次/s
地址:http://code.google.com/p/redis/wiki/Benchmarks

安装过程
最新稳定版,Redis 2.0.4 stable
wget http://redis.googlecode.com/files/redis-2.0.4.tar.gz
tar zxf redis-2.0.4.tar.gz
cd redis-2.0.4
与其它软件不同的是,不需要configure。
make
装完了。

创建一个目录
mkdir /usr/local/redis2
cp redis-server redis-benchmark redis-cli redis.conf /usr/local/redis2

启动:
./redis-server > /dev/null &

测试:

存值:
./redis-cli set hx value
取值:
./redis-cli get hx

附:redis.conf配置文件:
引用
#是否作为守护进程运行
daemonize yes
#配置pid的存放路径及文件名,默认为当前路径下
pidfile redis.pid
#Redis默认监听端口
port 6379
#客户端闲置多少秒后,断开连接
timeout 300
#日志显示级别
loglevel verbose
#指定日志输出的文件名,也可指定到标准输出端口
logfile stdout
#设置数据库的数量,默认连接的数据库是0,可以通过select N来连接不同的数据库
databases 16
#保存数据到disk的策略
#当有一条Keys数据被改变是,900秒刷新到disk一次
save 900 1
#当有10条Keys数据被改变时,300秒刷新到disk一次
save 300 10
#当有1w条keys数据被改变时,60秒刷新到disk一次
save 60 10000
#当dump .rdb数据库的时候是否压缩数据对象
rdbcompression yes
#dump数据库的数据保存的文件名
dbfilename dump.rdb
#Redis的工作目录
dir /home/falcon/redis-2.0.0/
########### Replication #####################
#Redis的复制配置
# slaveof
# masterauth

############## SECURITY ###########
# requirepass foobared

############### LIMITS ##############
#最大客户端连接数
# maxclients 128
#最大内存使用率
# maxmemory

########## APPEND ONLY MODE #########
#是否开启日志功能
appendonly no
# 刷新日志到disk的规则
# appendfsync always
appendfsync everysec
# appendfsync no
################ VIRTUAL MEMORY ###########
#是否开启VM功能
vm-enabled no
# vm-enabled yes
vm-swap-file logs/redis.swap
vm-max-memory 0
vm-page-size 32
vm-pages 134217728
vm-max-threads 4
############# ADVANCED CONFIG ###############
glueoutputbuf yes
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
#是否重置Hash表
activerehashing yes

安装php客户端

使用rediska做为redis的PHP客户端。
安装peal
cd /usr/local/webserver/php/
curl http://pear.php.net/go-pear | /usr/local/webserver/php/bin/php
pear channel-discover pear.geometria-lab.net
pear install geometria-lab/Rediska-beta

php使用参考:http://rediska.geometria-lab.ru/documentation/usage/
测试代码大致如下:
$options = array(
'servers' => array(
array('host' => '127.0.0.1', 'port' => 6379)
)
);
require_once '/usr/local/webserver/php/PEAR/Rediska.php';

$rediska = new Rediska($options);
$redis = new Rediska_Key('key');
$redis->setValue('value');
$value = $redis->getValue('key');
echo $value;

分别测试了下,使用mc,mcdb和redis。
引用

1000次
memcache:82.2749ms
memcachedb:84.4438ms
include语句放在循环里面
redis:463.0890ms

memcache:81.6891ms
memcachedb:86.5080ms
include文件放在外面
redis:237.6881ms

5000次
memcache:388.6840ms
memcachedb:421.1838ms
include语句放在循环外面
redis:1,075.9599ms

redis本身性能优越,但由于php客户端需要包含不少文件,反而性能比mcdb差不少。如果没有list,set等存储要求,用mcdb足已!

@@10-12-24@@UPDATE:增加了PHP测试代码。

CentOS Linux解决Device eth0 does not seem to be present

在VMware里克隆出来的CentOS Linux。。
ifconfig...没有看到eth0.。然后重启网卡又报下面错误。
故障现象:
service network restart
Shutting down loopback insterface: [ OK ]
Bringing up loopback insterface: [ OK ]
Bringing up interface eth0: Device eth0 does not seem to be present,delaying initialization. [FAILED]

解决办法:
首先,打开/etc/udev/rules.d/70-persistent-net.rules内容如下面例子所示:
# vi /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.
# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:8f:89:9
7", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:50:bd:1
7", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
记录下,eth1网卡的mac地址00:0c:29:50:bd:17
接下来,打开/etc/sysconfig/network-scripts/ifcfg-eth0
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
将 DEVICE="eth0" 改成 DEVICE="eth1" ,
将 HWADDR="00:0c:29:8f:89:97" 改成上面的mac地址 HWADDR="00:0c:29:50:bd:17"
最后,重启网络
# service network restart
或者
# /etc/init.d/network restart
正常了。

linux CentOS 修改IP地址,重启丢失设置的问题

修改对应网卡的IP地址的配置文件
# vi /etc/sysconfig/network-scripts/ifcfg-eth0

修改以下内容
DEVICE=eth0 #描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为eth0
BOOTPROTO=static #设置网卡获得ip地址的方式,可能的选项为static,dhcp或bootp,分别对应静态指定的 ip地址,通过dhcp协议获得的ip地址,通过bootp协议获得的ip地址
BROADCAST=192.168.0.255 #对应的子网广播地址
HWADDR=00:07:E9:05:E8:B4 #对应的网卡物理地址
IPADDR=12.168.1.2 #如果设置网卡获得 ip地址的方式为静态指定,此字段就指定了网卡对应的ip地址
IPV6INIT=no
IPV6_AUTOCONF=no
NETMASK=255.255.255.0 #网卡对应的网络掩码
NETWORK=192.168.1.0 #网卡对应的网络地址
ONBOOT=yes #系统启动时是否设置此网络接口,设置为yes时,系统启动时激活此设备
二、CentOS 修改网关
修改对应网卡的网关的配置文件
[root@centos]# vi /etc/sysconfig/network
修改以下内容
NETWORKING=yes(表示系统是否使用网络,一般设置为yes。如果设为no,则不能使用网络,而且很多系统服务程序将无法启动)
HOSTNAME=centos(设置本机的主机名,这里设置的主机名要和/etc/hosts中设置的主机名对应)
GATEWAY=192.168.1.1(设置本机连接的网关的IP地址。例如,网关为10.0.0.2)
三、CentOS 修改DNS
修改对应网卡的DNS的配置文件
# vi /etc/resolv.conf
修改以下内容
nameserver 8.8.8.8 #google域名服务器
nameserver 8.8.4.4 #google域名服务器
四、重新启动网络配置
# service network restart

# /etc/init.d/network restart
修改 IP 地址
即时生效:
# ifconfig eth0 192.168.0.2 netmask 255.255.255.0
启动生效:
修改 /etc/sysconfig/network-scripts/ifcfg-eth0
修改网关 Default Gateway
即时生效:
# route add default gw 192.168.0.1 dev eth0
启动生效:
修改 /etc/sysconfig/network
修改 DNS
修改/etc/resolv.conf
修改后可即时生效,启动同样有效
修改 host name
即时生效:
# hostname centos1
启动生效:
修改/etc/sysconfig/network

centos的软件安装方法rpm和yum

centos的软件安装大致可以分为两种类型:
[centos]rpm文件安装,使用rpm指令 类似[ubuntu]deb文件安装,使用dpkg指令
[centos]yum安装 类似[ubuntu]apt-get安装
rpm命令
(一)查询系统装已经安装的软件信息
对于一个rpm包来说,都是有"-"和"."构成的,基本上有以下几部分组成: * 包名 * 版本信息 * 发布版本号 * 运行平台,当出现noarch,代表的是软件可以平台兼容
1)查询系统中已经安装的软件
rpm -qa
2)查询一个已经安装的文件属于哪个软件包;
rpm -qf 文件名的绝对路径
3)查询已安装软件包都安装到何处;
软件名定义是:rpm包去除平台信息和后缀后的信息
rpm -ql 软件名
4)查询一个已安装软件包的信息
rpm -qi 软件名
5)查看一下已安装软件的配置文件;
rpm -qc 软件名
6)查看一个已经安装软件的文档安装位置:
rpm -qd 软件名
7)查看一下已安装软件所依赖的软件包及文件;
rpm -qR 软件名

(二)对于未安装的软件包信息查询
1)查看一个软件包的用途、版本等信息;
rpm -qpi rpm文件
2)查看一件软件包所包含的文件;
rpm -qpl rpm文件
3)查看软件包的文档所在的位置;
rpm -qpd rpm文件
4)查看一个软件包的配置文件;
rpm -qpc rpm文件
5)查看一个软件包的依赖关系
rpm -qpR rpm文件

(三)软件包的安装、升级、删除等
1)安装或者升级一个rpm包
rpm -ivh rpm文件【安装】 rpm -Uvh rpm文件【更新】
2)删除一个rpm 包
rpm -e 软件名
如何需要不管依赖问题,强制删除软件,在如上命令其后加上 --nodeps

(四)签名导入
rpm --import 签名文件 rpm --import RPM-GPG-KEY
yum命令
(一)yum基本概念
1)yum是什么
yum = Yellow dog Updater, Modified 主要功能是更方便的添加/删除/更新RPM包. 它能自动解决包的倚赖性问题. 它能便于管理大量系统的更新问题
2)yum的特点
可以同时配置多个资源库(Repository) 简洁的配置文件(/etc/yum.conf 自动解决增加或删除rpm包时遇到的倚赖性问题 使用方便 保持与RPM数据库的一致性
3)yum安装
CentOS自带(yum-*.noarch.rpm) #rpm -ivh yum-*.noarch.rpm 在第一次启用yum之前首先需要导入系统的RPM-GPG-KEY:

(二)yum指令的使用
当第一次使用yum管理软件时,yum会自动下载所需要的headers放置在/var/cache/yum目录下;
1) rpm包的更新

#检查可以更新的软件包
yum check-update
#更新所有的软件包
yum update

#更新特定的软件包
yum update kernel

#大规模的升级
yum upgrade

2) rpm包的安装和删除
#rpm包的安装和删除
yum install xxx【服务名】
yum remove xxx【服务名】
3) yum缓存的相关信息

#清楚缓存中rpm包文件
yum clean packages
#清楚缓存中rpm的头文件
yum clean headers
#清除缓存中旧的头文件
yum clean old headers
#清除缓存中旧的rpm头文件和包文件
yum clean all

4)软件包信息查询
#列出资源库中所有可以安装或更新的rpm包
yum list

#列出资源库中特定的可以安装或更新以及已经安装的rpm包
yum list firfox*
N:可以在rpm包名中使用通配符,查询类似的rpm包

#列出资源库中所有可以更新的rpm包
yum list updates

#列出已经安装的所有的rpm包
yum list installed

#列出已经安装的但是不包含在资源库中的rpm包
yum list extras
N:通过如网站下载安装的rpm包

#rpm包信息显示(info参数同list),列出资源库中所有可以安装或更新的rpm包的信息
yum info

#列出资源库中特定的可以安装或更新以及已经安装的rpm包的信息

yum info firefox*
N:可以在rpm包名中使用匹配符

#列出资源库中所有可以更新的rpm包的信息
yum info updates

#列出已经安装的所有的rpm包的信息

yum info installed

#列出已经安装的但是不包含在资源库中的rpm包的信息
yum info extras
N:通过如网站下载安装的rpm包的信息

#搜索匹配特定字符的rpm包
yum search firofox
#搜索包含特定文件的rpm包
yum provides firefox

(三)yum软件源更新
http://mirrors.163.com/.help/centos.html

CentOS开机自动运行程序的脚本

有些时候我们需要在服务器里设置一个脚本,让他一开机就自己启动。方法如下:
cd /etc/init.d
vi youshell.sh #将youshell.sh修改为你自己的脚本名
编写自己的脚本后保存退出。
在编写脚本的时候,请先加入以下注释
#add for chkconfig
#chkconfig: 2345 70 30
#description: the description of the shell #关于脚本的简短描述
#processname: servicename #第一个进程名,后边设置自启动的时候会用到
说明:
2345是指脚本的运行级别,即在2345这4种模式下都可以运行,234都是文本界面,5就是图形界面X
70是指脚本将来的启动顺序号,如果别的程序的启动顺序号比70小(比如44、45),则脚本需要等这些程序都启动以后才启动。
30是指系统关闭时,脚本的停止顺序号。
给脚本添加上可执行权限:
chmod +x youshell.sh
利用chkconfig命令将脚本设置为自启动
chkconfig --add servicename
这样你的脚本就可以在开机后自动运行了。
另外,在redhat里也可以使用这个方法来实现开机自启动。
chkconfig的使用方法
chkconfig(check config)
功能说明:检查,设置系统的各种服务。
语  法:chkconfig
[--add][--del][--list][系统服务]或chkconfig[--level<等级代号>][系统服务][on/off/reset]
补充说明:这是RedHat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。
参数:
 –add 增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
 –del 删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。
 –level<等级代号> 指定读系统服务要在哪一个执行等级中开启或关毕
1:chkconfig 命令也可以用来激活和解除服务。chkconfig –list 命令显示系统服务列表,以及这些服务在运行级别0到6中已被启动(on)还是停止(off)。
chkconfig –list
chkconfig –list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
2:chkconfig 还能用来设置某一服务在某一指定的运行级别内被启动还是被停运。譬如,要在运行级别3、4、5中停运 nscd 服务,使用下面的命令:
chkconfig –level 345 nscd off
3:由 xinetd 管理的服务会立即被 chkconfig 影响。譬如,如果 xinetd 在运行,finger 被禁用,那么执行了 chkconfig finger on 命令后,finger 就不必手工地重新启动 xinetd 来立即被启用。对其它服务的改变在使用 chkconfig 之后不会立即生效。必须使用service servicename start/stop/restart命令来重起服务

第二种方法
编辑 /etc/rc.d/rc.local文件
格式为 程序名 程序路径
例如 a.sh /home/a.sh