Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。( From - 维基百科)
Redis和Memcached类似,但很大程度改进了Memcached的不足,它支持存储的value类型相对更多,包括string、list、set、zset和hash。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作。在此基础上,Redis支持各种不同方式的排序。
Redis数据都是缓存在计算机内存中,并且会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
可以用做数据库、缓存和消息中间件。现在Twitter、GitHub和Weibo等知名公司都在使用Redis。
Redis通常将全部的数据存储在内存中。2.4版本后可配置为使用虚拟内存,一部分数据集存储在硬盘上,但这个特性废弃了。
目前通过两种方式实现持久化:a. 使用快照,一种半持久耐用模式。不时的将数据集以异步方式从内存以RDB格式写入硬盘;
b. 1.1版本开始使用更安全的AOF格式替代,一种只能追加的日志类型。将数据集的修改操作记录,能够在后台对只可追加的记录作修改来避免无限增长的日志。
Redis和MySQL等数据库一样,都是原子性的操作,支持事务。
它的外围由一个键、值映射的字典构成。与其他非关系型数据库主要不同在于:Redis中值的类型不仅限于字符串,还支持如下抽象数据类型:
- 字符串列表
- 无序不重复的字符串集合
- 有序不重复的字符串集合
- 键、值都为字符串的哈希表
如:5种常见的数据类型:字符串(String)、散列/哈希(Hash)、列表(List)、集合(Set)、有序集合(Sort Set)。
Redis支持主从同步,数据可以从主服务器上向任意的从服务器上同步,而从服务器又可以是关联其他从服务器的主服务器。
Redis的主从同步机制可以确保redis的master(主)和slave(辅)之间的数据同步。
由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。
Redis的处理速度非常快,每秒能执行约11万集合,每秒约81000+条记录。
当数据依赖不再需要Redis这种基于内存的性质时,与在执行一个事务时将每个变化都写入硬盘的数据库系统相比就显得执行效率非常高。写与读操作速度没有明显差别。
说明: 安装Redis最新稳定版本 redis-3.2.8
wget http://download.redis.io/releases/redis-3.2.8.tar.gz
tar xzf redis-3.2.8.tar.gz
tar -xzf的意思是解压并解包一个文件,这个文件应该是经tar打包后按gzip格式压缩的。
对于tar命令,x表示解包(不是解压缩),v表示显示详细过程,f表示使用文件(紧跟它的一定是空格加文件名),z表示先解压gzip格式的压缩文件(现在这个选项已经不是必须的了)。
#将redis-3.2.8 更名为 redis
mv redis-3.2.8 redis
#进入redis安装目录
cd redis
#编译
make
# 进入redis的src目录下执行下面命令,后台启动redis服务
./redis-server &
./redis-cli
#下面为测试: 定义一个test字符串,赋值为"redis",之后获取输出
[root@aitest05 src]# ./redis-cli
127.0.0.1:6379> set test redis
OK
127.0.0.1:6379> get test
"redis"
上面说明Redis已经安装成功,也可以查看下运行状态:
ps -ef | grep redis
cp redis_init_script /etc/init.d/redis
检查 CONF=”/etc/redis/${REDISPORT}.conf” 。 将redis安装目录下的配置文件拷贝到/etc/redis/下,如文件没有就新建。
mkdir redis
#6379 Redis默认端口
cp redis.conf /etc/redis/6379.conf
#!/bin/sh
#
# chkconfig: 2345 80 90
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF &
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac
#chkconfig --add redis-server
#设置为开机自启动服务器
chkconfig redis on
#查看redis的系统自动启动选项配置
chkconfig --list redis
service redis start
service redis stop
[root@aidev05 init.d]# service redis stop
/var/run/redis_6379.pid does not exist, process is not running
说明在run下没有这个文件,我们进入到/var/run下发现没有redis相关的 *.pid 文件。 解决这个问题,可以修改Redis的配置文件redis.cof:
将daemonize 守护线程属性改为yes
pidfile的路径改为 pidfile /var/run/redis.pid
#daemonize no 默认情况下, redis 不是在后台运行的,如果需要在后台运行,把该项的值更改为 yes
daemonize yes
#当 redis 在后台运行的时候,Redis 默认会把 pid 文件放在 /var/run/redis.pid ,可以配置到其他地址。
#当运行多个 redis 服务时,需要指定不同的 pid 文件和端口
pidfile /var/run/redis.pid
指定 redis 运行的端口,默认是 6379
port 6379
PIDFILE=/var/run/redis.pid
这样再去测试用 service redis start/stop就可以正确使用了。