(本文由www.169it.com搜集整理)
redis是一个key-value存储系统,和memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hashs(哈希类型).这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的.在此基础上,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步.
MySQL-Redis 异构读写分离Redis集群图如下

redis 使用标准的 major.minor.patchlevel版本做法。 stable表示稳定版本,一般用偶数版本,如:1.2, 2.0, 2.2, 2.4, 2.6,2.8。 奇数标识不稳定版本,如:2.9.x,他未来的稳定版本是3.0。要安装redis必须先到redis官网http://www.redis.io下载redis安装包,redis版本分为稳定版(stable)和发布候选版(rc-2).当前最新的redis稳定版为Redis 2.8.19,发布候选版为 Redis 3.0。它们在官网的截图如下:

Redis稳定版下载地址: redis-2.8.19.tar.gz
Redis发布候选版下载地址: redis-3.0.0-rc2.tar.gz
一、安装完整过程步骤
1、安装前需要安装make、gcc、tcl
sudo yum install make
sudo yum install gcc
sudo yum install -y tcl
2、将下载的Redis解压、编译、安装
$ tar -xzvf redis-2.8.19.tar.gz
$ cd redis-2.8.19
$ make MALLOC=libc
$ make test
注:make会在目录下生成四个可执行文件:redis-benchmark、redis-cli、redis-server、redis-stat
$sudo make install
注:这个操作会将生成的可执行文件复制到/usr/local/bin中
二、启动
1、直接启动(适用于开发环境)
切换到redis-2.8.19/src目录下
$redis-server
2、通过初始化脚本启动(适用于生产环境)
(1)配置init脚本:
wget https://github.com/ijonas/dotfiles/raw/master/etc/init.d/redis-server
wget https://github.com/ijonas/dotfiles/raw/master/etc/redis.conf
sudo mv redis-server /etc/init.d/redis-server
sudo chmod +x /etc/init.d/redis-server
sudo mv redis.conf /etc/redis.conf
将/etc/init.d/redis-server文件里的内容替换成以下内容:
#!/bin/sh
#
# redis - this script starts and stops the redis-server daemon
#
# chkconfig: - 85 15
# description: Redis is a persistent key-value database
# processname: redis-server
# config: /etc/redis.conf
# config: /etc/sysconfig/redis
# pidfile: /var/run/redis.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
redis="/usr/local/bin/redis-server"
prog=$(basename $redis)
REDIS_CONF_FILE="/etc/redis.conf"
[ -f /etc/sysconfig/redis ] && . /etc/sysconfig/redis
lockfile=/var/lock/subsys/redis
start() {
[ -x $redis ] || exit 5
[ -f $REDIS_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $redis $REDIS_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
stop
start
}
reload() {
echo -n $"Reloading $prog: "
killproc $redis -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
exit 2
esac
(2)初始化用户和日志路径
sudo useradd redis
sudo mkdir -p /var/lib/redis
sudo mkdir -p /var/log/redis
sudo chown redis.redis /var/lib/redis
sudo chown redis.redis /var/log/redis
(3)将redis加入自启动服务
sudo chkconfig --add /etc/init.d/redis-server
sudo chkconfig redis-server --level 345 on
使用chkconfig --list查看添加的服务
(4)启动服务
sudo service redis-server start
三、Redis的使用
redis-cli
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> keys *
(empty list or set)
Redis的优点
性能极高 – Redis能支持超过 100K+ 每秒的读写频率。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
下面是官方的bench-mark数据:
测试完成了50个并发执行100000个请求。
设置和获取的值是一个256字节字符串。
Linux box是运行Linux 2.6,这是X3320 Xeon 2.5 ghz。
文本执行使用loopback接口(127.0.0.1)。
结果:写的速度是110000次/s,读的速度是81000次/s 。
redis常用命令介绍
Redis根本是使用内存存储,持久化的关键是这三条指令:SAVE BGSAVE LASTSAVE .
当接收到SAVE指令的时候,Redis就会dump数据到一个文件里面。值得一说的是它的独特功能:存储列表和集合,这是它与nosql数据库相比更有竞争力的地方。
redis和其它key-value数据库相比特殊的命令:
TYPE key — 用来获取某key的类型KEYS pattern — 匹配所有符合模式的key,比如KEYS * 就列出所有的key了,当然,复杂度O(n)
RANDOMKEY - 返回随机的一个key
RENAME oldkeynewkey— key也可以改名
redis列表操作命令
RPUSH key string — 将某个值加入到一个key列表头部
LPUSH key string — 将某个值加入到一个key列表末尾
LLEN key — 列表长度
LRANGE key start end — 返回列表中某个范围的值,相当于mysql里面的分页查询那样
LTRIM key start end — 只保留列表中某个范围的值
LINDEX key index — 获取列表中特定索引号的值,要注意是O(n)复杂度
LSET key index value — 设置列表中某个位置的值
LPOP key
RPOP key — 和上面的LPOP一样,就是类似栈或队列的那种取头取尾指令,可以当成消息队列来使用了
redis集合操作命令
SADD key member — 增加元素
SREM key member — 删除元素
SCARD key — 返回集合大小
SISMEMBER key member — 判断某个值是否在集合中
SINTER key1 key2 ... keyN — 获取多个集合的交集元素
SMEMBERS key — 列出集合的所有元素
还有Multiple DB的命令,可以更换db,数据可以隔离开,默认是存放在DB 0。
