yl197837 发表于 2018-11-3 11:41:06

redis模块

  Redis模块
  一.Redis简介
  Redis属于键值数据库,支持数据持久化,能够让数据从内存中保存在磁盘里,即使重启服务器数据也依然存在;同时也支持更多 value 类型,除了 string 外,还支持 hash、lists(链表)、sets(集合)和 sorted sets(有序集合)几种数据类型。
  redis 使用了两种文件格式:
  (1)全量数据(RDB):是把内存中的数据写入磁盘,便于下次读取文件进行加载。
  (2)增量请求(AOF):是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据。redis 存储分为内存储存、磁盘存储和log文件三部分。
  二.Redis安装与配置
  1.安装
  # yum install -y gcc epel-release ;yum install -y jemalloc-devel
  # cd /usr/local/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
  # rpm -ivh jemalloc-*
  warning: jemalloc-3.6.0-1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
  Preparing...                                          ###########################################
  1:jemalloc                                       ########################################### [ 50%]
  2:jemalloc-devel                                 ###########################################
  # tar zxf redis-2.8.21.tar.gz
  # 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
  # cd redis-2.8.21
  # make
  # make PREFIX=/usr/local/redis install
  2.编辑配置文件
  # mkdir /usr/local/redis/etc
  # cd /usr/local/redis/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      #设置密码
  # 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 $?
  # useradd -s /sbin/nologin redis
  # mkdir /usr/local/redis/var
  # chmod 777 /usr/local/redis/var/
  # chmod 755 /etc/init.d/redis
  4.启动redis服务
  # chkconfig --add redis
  # chkconfig redis on
  # service redis start
  三.Redis数据结构
  操作之前先做个别名,因为进入redis的命令很长,每次输入都很麻烦
  # alias redis-cli= '/usr/local/redis/bin/redis-cli'
  # 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)查看日志
  # tail /usr/local/redis/var/redis.log
   30 Mar 02:13:41.527 - DB 0: 2 keys (0 volatile) in 4 slots HT.
   30 Mar 02:13:41.527 - 1 clients connected (0 slaves), 465016 bytes in use
   30 Mar 02:13:46.543 - DB 0: 2 keys (0 volatile) in 4 slots HT.
   30 Mar 02:13:46.543 - 1 clients connected (0 slaves), 465016 bytes in use
   30 Mar 02:13:51.556 - DB 0: 2 keys (0 volatile) in 4 slots HT.
  ....
  (2)示例验证
  在master上创建数据
  # 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上查看数据是否同步
  # redis-cli
  127.0.0.1:6379> keys *
  1) "key2"
  2) "key1"
  127.0.0.1:6379> exit
  如果出现上述结果表明简单的redis主从配置成功。

页: [1]
查看完整版本: redis模块