redis模块
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis模块相关的知识,希望对你有一定的参考价值。
Redis模块
一.Redis简介
Redis属于键值数据库,支持数据持久化,能够让数据从内存中保存在磁盘里,即使重启服务器数据也依然存在;同时也支持更多 value 类型,除了 string 外,还支持 hash、lists(链表)、sets(集合)和 sorted sets(有序集合)几种数据类型。
redis 使用了两种文件格式:
(1)全量数据(RDB):是把内存中的数据写入磁盘,便于下次读取文件进行加载。
(2)增量请求(AOF):是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据。redis 存储分为内存储存、磁盘存储和log文件三部分。
二.Redis安装与配置
1.安装
[[email protected]1 ~]# yum install -y gcc epel-release ;yum install -y jemalloc-devel
[[email protected]rver12 ~]# cd /usr/local/src/
[[email protected] src]# ls
jemalloc-3.6.0-1.el6.x86_64.rpm
jemalloc-devel-3.6.0-1.el6.x86_64.rpm
redis-2.8.21.tar.gz
[[email protected] src]# rpm -ivh jemalloc-*
warning: jemalloc-3.6.0-1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Preparing... ########################################### [100%]
1:jemalloc ########################################### [ 50%]
2:jemalloc-devel ########################################### [100%]
[[email protected] src]# tar zxf redis-2.8.21.tar.gz
[[email protected] src]# ls
jemalloc-3.6.0-1.el6.x86_64.rpm
jemalloc-devel-3.6.0-1.el6.x86_64.rpm
redis-2.8.21
redis-2.8.21.tar.gz
[[email protected] src]# cd redis-2.8.21
[[email protected] redis-2.8.21]# make
[[email protected] redis-2.8.21]# make PREFIX=/usr/local/redis install
2.编辑配置文件
[[email protected] redis-2.8.21]# mkdir /usr/local/redis/etc
[[email protected] redis-2.8.21]# cd /usr/local/redis/etc/
[[email protected] etc]# vim redis.conf
daemonize yes #是否以后台daemon方式运行
pidfile /usr/local/redis/var/redis.pid #pid文件位置
port 6379 #监听的端口号
timeout 300 #请求超时时间
loglevel debug #log信息级别
logfile /usr/local/redis/var/redis.log #log文件位置
databases 16 #开启数据库的数量
save 900 1 #保存快照的频率,第一个*表示多长时间,第二个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件
save 300 10
save 60 10000
rdbcompression yes #是否使用压缩
dbfilename dump.rdb #数据快照文件名(只是文件名,不包括目录)
dir /usr/local/redis/var/ #数据快照的保存目录(这个是目录)
appendonly no #是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率
appendfsync always #appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)
#requirepass 123456 #设置密码
[[email protected] etc]# vim /etc/init.d/redis
#!/bin/sh
#
# redis init file for starting up the redis daemon
#
# chkconfig: - 20 80
# description: Starts and stops the redis daemon.
# Source function library.
. /etc/rc.d/init.d/functions
name="redis-server"
basedir="/usr/local/redis"
exec="$basedir/bin/$name"
pidfile="$basedir/var/redis.pid"
REDIS_CONFIG="$basedir/etc/redis.conf"
[ -e /etc/sysconfig/redis ] && . /etc/sysconfig/redis
lockfile=/var/lock/subsys/redis
start() {
[ -f $REDIS_CONFIG ] || exit 6
[ -x $exec ] || exit 5
echo -n $"Starting $name: "
daemon --user ${REDIS_USER-redis} "$exec $REDIS_CONFIG"
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $name: "
killproc -p $pidfile $name
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
stop
start
}
reload() {
false
}
rh_status() {
status -p $pidfile $name
}
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)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart}"
exit 2
esac
exit $?
[[email protected] etc]# useradd -s /sbin/nologin redis
[[email protected] etc]# mkdir /usr/local/redis/var
[[email protected] etc]# chmod 777 /usr/local/redis/var/
[[email protected] etc]# chmod 755 /etc/init.d/redis
4.启动redis服务
[[email protected] etc]# chkconfig --add redis
[[email protected] etc]# chkconfig redis on
[[email protected] etc]# service redis start
三.Redis数据结构
操作之前先做个别名,因为进入redis的命令很长,每次输入都很麻烦
[[email protected]1 ~]# alias redis-cli= ‘/usr/local/redis/bin/redis-cli‘
[[email protected]1 ~]# vim .bashrc
alias redis-cli= ‘/usr/local/redis/bin/redis-cli‘
1. string是简单的类型,一个key对应一个value;可以存二进制的对象。
2. List
list 是一个链表结构(相当于一个管道,随时可以从左右插入和取出值,区别于只能先进后出的站),主要功能是 push、pop、获取一个范围的所有值等等。操作中 key 理解为链表的名字。使用 List 结构,我们可以轻松地实现最新消息排行等功能(比如微博的 TimeLine)。list 的另一个应用就是消息队列,可以利用 list 的 push 操作,将任务存在 list 中,然后工作线程再用 pop 操作将任务取出进行执行。
3. Set
set 即集合,和我们数学中的集合概念相似,对集合的操作有添加、删除元素,有对多个集合求交、并、差等操作。操作中的 key 理解为集合的名字。
4. sorted set
sorted set 即有序集合,它比 set 多一个权重参数 score,使得集合中的元素能够按 score 进行有序排列,比如一个存储全班同学成绩的 Sorted Sets,其集合 value 可以是同学的学号,而 score 就可以是其考试成绩,这样在数据插入集合的时候,就已经进行了天然的排序。
5. Hash
在 Redis 中,我们经常将一些结构化的信息打包成 hashmap,在客户端序列化后存储为一个字符串的值(一般是 JSON 格式)。可以把多个键值对存储到一个 hash 中去,比如用户的昵称、年龄、性别可以存储到一个 hash 中去。
四.Redis主从配置
原理:主要是通过master server持久化的rdb文件实现的。master server 先dump出内存快照文件,然后将rdb文件传给slave server,slave server 根据rdb文件重建内存表。
redis复制过程如下:
1)slave server启动连接到master server之后,salve server主动发送SYNC命令给master server
2)master server接受SYNC命令之后,判断,是否有正在进行内存快照的子进程,如果有,则等待其结束,否则,fork一个子进程,子进程把内存数据保存为文件,并发送给slave server
3)master server子进程进程做数据快照时,父进程可以继续接收client端请求写数据,此时,父进程把新写入的数据放到待发送缓存队列中
4)slave server 接收内存快照文件之后,清空内存数据,根据接收的快照文件,重建内存表数据结构
5)master server把快照文件发送完毕之后,发送缓存队列中保存的子进程快照期间改变的数据给slave server,slave server做相同处理,保存数据一致性
6)master server 后续接收的数据,都会通过步骤1建立的连接,把数据发送到slave server
1.实验前准备
Master:server11.example.com 192.168.122.67
Slave:server12.example.com 192.168.122.101
关闭iptables和selinux
2.安装配置
Master配置如上,slave只需在vim /usr/local/redis/etc/redis.conf 文件中添加以下两行:
slaveof 192.168.122.67 6379#指定master上的IP和端口
masterauth 123456#可选内容,指定master的密码
3.分别启动master和slave上的redis服务
4.验证主从
(1)查看日志
[[email protected] etc]# tail /usr/local/redis/var/redis.log
[4425] 30 Mar 02:13:41.527 - DB 0: 2 keys (0 volatile) in 4 slots HT.
[4425] 30 Mar 02:13:41.527 - 1 clients connected (0 slaves), 465016 bytes in use
[4425] 30 Mar 02:13:46.543 - DB 0: 2 keys (0 volatile) in 4 slots HT.
[4425] 30 Mar 02:13:46.543 - 1 clients connected (0 slaves), 465016 bytes in use
[4425] 30 Mar 02:13:51.556 - DB 0: 2 keys (0 volatile) in 4 slots HT.
....
(2)示例验证
在master上创建数据
[[email protected] ~]# redis-cli -a 123456
127.0.0.1:6379> set key1 123
OK
127.0.0.1:6379> set key2 456
OK
127.0.0.1:6379> keys *
1) "key1"
2) "key2"
127.0.0.1:6379> exit
在slave上查看数据是否同步
[[email protected] ~]# redis-cli
127.0.0.1:6379> keys *
1) "key2"
2) "key1"
127.0.0.1:6379> exit
如果出现上述结果表明简单的redis主从配置成功。
本文出自 “12025595” 博客,转载请与作者联系!
以上是关于redis模块的主要内容,如果未能解决你的问题,请参考以下文章