设为首页 收藏本站
查看: 543|回复: 0

[经验分享] redis模块

[复制链接]

尚未签到

发表于 2018-11-3 11:41:06 | 显示全部楼层 |阅读模式
  Redis模块
  一.Redis简介
  Redis属于键值数据库,支持数据持久化,能够让数据从内存中保存在磁盘里,即使重启服务器数据也依然存在;同时也支持更多 value 类型,除了 string 外,还支持 hash、lists(链表)、sets(集合)和 sorted sets(有序集合)几种数据类型。
  redis 使用了两种文件格式:
  (1)全量数据(RDB):是把内存中的数据写入磁盘,便于下次读取文件进行加载。
  (2)增量请求(AOF):是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据。redis 存储分为内存储存、磁盘存储和log文件三部分。
  二.Redis安装与配置
  1.安装
  [root@server11 ~]# yum install -y gcc epel-release ;yum install -y jemalloc-devel
  [root@server12 ~]# cd /usr/local/src/
  [root@server12 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
  [root@server12 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%]
  [root@server12 src]# tar zxf redis-2.8.21.tar.gz
  [root@server12 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
  [root@server12 src]# cd redis-2.8.21
  [root@server12 redis-2.8.21]# make
  [root@server12 redis-2.8.21]# make PREFIX=/usr/local/redis install
  2.编辑配置文件
  [root@server12 redis-2.8.21]# mkdir /usr/local/redis/etc
  [root@server12 redis-2.8.21]# cd /usr/local/redis/etc/
  [root@server12 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        #设置密码
  [root@server12 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 $?
  [root@server12 etc]# useradd -s /sbin/nologin redis
  [root@server12 etc]# mkdir /usr/local/redis/var
  [root@server12 etc]# chmod 777 /usr/local/redis/var/
  [root@server12 etc]# chmod 755 /etc/init.d/redis
  4.启动redis服务
  [root@server12 etc]# chkconfig --add redis
  [root@server12 etc]# chkconfig redis on
  [root@server12 etc]# service redis start
  三.Redis数据结构
  操作之前先做个别名,因为进入redis的命令很长,每次输入都很麻烦
  [root@server11 ~]# alias redis-cli= '/usr/local/redis/bin/redis-cli'
  [root@server11 ~]# 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)查看日志
  [root@server12 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上创建数据
  [root@server11 ~]# 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上查看数据是否同步
  [root@server12 ~]# redis-cli
  127.0.0.1:6379> keys *
  1) "key2"
  2) "key1"
  127.0.0.1:6379> exit
  如果出现上述结果表明简单的redis主从配置成功。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-630208-1-1.html 上篇帖子: nginx+tomcat+redis完成session共享 下篇帖子: OpenResty Redis 安装部署测试SET GET功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表