为了账号安全,请及时绑定邮箱和手机立即绑定

Redis 初识

标签:
React

初识 Redis

《 Redis 开发与运维》的学习笔记,希望大家多多指导。

什么是 Redis

  • Redis 的全称是 Remote Dictionary Server, 远程字典服务器。

  • Redis是一个开源的使用ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API,是一种 NoSQL 数据库。

  • 相关网站

Redis 的特点


    • Redis 的所有数据都是存放在内存中的(最主要的原因)

    • Redis 是用 C 语言实现的, 一般来说 C 语言实现的程序“距离”操作系统更近,执行速度相对会更快

    • Redis 使用了单线程架构,预防了多线程可能产生的竞争问题

    • Redis 源代码优良,集性能和优雅于一身

    • 为什么快 ?

  1. 速度快


  1. 基于键值对的数据结构服务器


  • 字符串

  • Bitmaps

  • HyperLogLog

  • GEO , 地理信息定位 ( 3.2 版本 )

  • 哈希

  • 列表

  • 集合

  • 有序集合

  • 5 种数据结构

  • 提供了键过期功能,可以用来实现缓存。

  • 提供了发布订阅功能,可以用来实现消息系统。

  • 支持 Lua 脚本功能,可以利用 Lua 创造出新的 Redis 命令。

  • 提供了简单的事务功能,能在一定程度上保证事务特性。

  • 提供了流水线(Pipeline)功能,这样客户端能将一批命令一次性传到 Redis,减少了网络的开销。

  1. 丰富的功能


  • Redis 的源码很少

  • Redis 使用单线程模型

  • Redis 不需要依赖于操作系统中的类库

  • 简单

  1. 简单稳定


  • Redis 提供了简单的 TCP 通信协议

  1. 客户端语言多


  • RDB

  • AOF

  1. 持久化


  • Redis 提供了复制功能,实现了多个相同数据的 Redis 副本,复制功能是分布式 Redis 的基础

  1. 主从复制


  • 2.8 版本,高可用实现 Redis Sentinel,它能够保证 Redis 节点的故障发现和故障自动转移

  • 3.0 版本, 分布式实现 Redis Cluster, 它是 Redis 真正的分布式实现,提供了高可用、读写和容量的扩展性。

  1. 高可用和分布式

Redis 使用场景

Redis 可以做什么


  1. 缓存


  • 列表和有序集合数据结构

  1. 排行榜系统

3.计数器应用

  • 视频播放数

4.社交网络

  • 赞/踩,粉丝,共同好友/喜好, 推送,下拉刷新


  • Redis 提供了发布订阅通能和阻塞队列的功能,基本可以满足简单的消息队列功能

  1. 消息队列系统

Redis 不可以做什么

  • 数据规模

    • 基于内存,不适合大规模数据,经济成本非常高;适用于小规模数据

  • 数据冷热

    • 指需要频繁操作的数据

    • 热数据

    • 冷数据

    • 热数据适合放到 Redis 中加速读写,冷数据不适合

用好 Redis 的建议


  1. 切勿当作黑盒使用,开发与运维同样重要


  1. 阅读源码

Redis 的基础操作

安装

  • Linux 系统

# 下载 Redis 制定版本的源码压缩包到当前目录wget http://download.redis.io/releases/redis-3.0.7.tar.gz# 解压缩tar xzf redis-3.0.7.tar.gz# 建立 redis 目录的软连接,为了不把 redis 目录固定到指定版本上,利于未来升级ln -s redis-3.0.7 redis
cd redis# 将相关运行文件放到 /usr/local/bin/ 下,编译之前确保操作系统已经安装gccmake# 安装make install# 安装结束后,验证redis-cli -v

配置、启动、操作、关闭 Redis

  • src 和 /usr/local/bin 目录下可执行文件说明

    可执行文件作用
    redis-server启动 Redis
    redis-cliRedis 命令行客户端
    redis-benchmarkRedis 基准测试工具
    redis-check-aofRedis AOF 持久化文件检测和修复工具
    redis-check-dumpRedis RDB 持久化文件检测和修复工具
    redis-sentinel启动 Redis Sentinel
  • 启动 Redis

    • 默认配置文件位置: redis 文件夹下 redis.conf

      配置名配置说明
      port端口
      logfile日志文件
      dirRedis 工作目录(粗放持久化文件和日志文件)
      daemonize是否以守护进程的方式启动 Redis (后台启动)
      redis-server /opt/redis/redis.conf
    • 默认配置

      # 按照默认配置启动redis-server
    • 运行启动

      redis server --configName1 configValue --configName2 configValue2# 例如, 以 6666 作为端口启动 Redisredis-server --port 6666
    • 配置文件启动

  • Redis 命令行客户端

# 两种连接方式## 第一种  redis-cli -h {host} -p {port}redis-cli -h 127.0.0.1 -p 6379# 取值get hello## 第二种  redis-cli -h ip{host} -p {port} {command}redis-cli -h 127.0.0.1 -p 6379 get hello
  • 停止 Redis 服务

# 关闭过程: 断开与客户端的连接、持久化文件生成`redis-cli shutdown# 带参数关闭## 关闭前不生成持久化文件redis-cli shutdown nosave## 关闭前生成持久化文件redis-cli shutdown save# 使用杀死进程的方法关闭kill redis进程号# 注意:不能粗暴的使用 kill -9 强制杀死进程,这样不会持久化操作,同时有可能不能正常关闭和丢失数据
  • 卸载 Redis

    • 安装目录文件夹

    • /usr/local/bin 下的启动文件

    • 关闭 Redis 服务

    • 删除相关文件或文件夹

设置 Redis 开机自启动 ( Linux )

  • init.d 方式 ( CentOS 6 之前版本,包括 CentOS6 )

    • redis 服务名称可以自定义

    • redis_6666, redis_666.service

    • 编写自启动脚本 redis

      # chkconfig: 2345 10 90# description: Start and Stop redisPATH=/usr/local/bin:/sbin:/usr/bin:/bin
      
      REDISPORT=6379 #实际环境而定
      EXEC=/usr/local/bin/redis-server #实际环境而定
      REDIS_CLI=/usr/local/bin/redis-cli #实际环境而定
      
      PIDFILE=/var/run/redis.pid
      CONF="/opt/redis/redis.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
                      if [ "$?"="0" ]
                      then
                              echo "Redis is running..."
                      fi
                      ;;
              stop)
                      if [ ! -f $PIDFILE ]
                      then
                              echo "$PIDFILE exists, process is not running."
                      else
                              PID=$(cat $PIDFILE)
                              echo "Stopping..."
                              $REDIS_CLI -p $REDISPORT SHUTDOWN
                              while [ -x $PIDFILE ]
                              do
                                      echo "Waiting for Redis to shutdown..."
                                      sleep 1
                              done
                              echo "Redis stopped"
                      fi
                      ;;
              restart|force-reload)
                      ${0} stop
                      ${0} start
                      ;;
              *)
                      echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
                      exit 1
      esac
    • 设置权限并测试

      # 设置可执行权限chmod 755 redis# 启动测试/etc/init.d/redis start
    • 设置开机自启动并测试

      # 设置开机自启动chkconfig redis on# 关机重启并验证reboot
      redis-cli
    • 系统开机启动时会去加载 /etc/init.d/ 下面的脚本,通常而言每个脚本文件会自定义实现程序的启动;若想将新的程序开机自启动,只需在该目录下添加一个自定义启动程序的脚本,然后设置相应规则即可。

    • 基本原理

    • 步骤

    • 注意

  • systemctl 方式 ( CentOS7  )

    • 创建systemctl 服务

      # 在/lib/systemd/system 目录下创建一个脚本文件redis.service# 脚本内容# 基本信息[Unit]## 描述信息Description=Redis## 在哪个服务之后启动After=network.target# 服务信息[Service]
      Type=forking## 启动服务的命令ExecStart=/usr/local/bin/redis-server /opt/redis/redis.conf## 重启服务的命令ExecReload=/usr/local/bin/redis-server -s reload## 停止服务的命令ExecStop=/usr/local/bin/redis-server -s stop
      PrivateTmp=true# 安装相关信息[Install]## 以何种方式启动,当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行WantedBy=multi-user.target
    • 刷新配置并设置为开机启用

      # 刷新配置systemctl daemon-reload# 启动服务            systemctl start redis.service# 重新启动systemctl restart redis.service# 停止服务systemctl stop redis.service# 开机启用systemctl enable redis.service# 禁止开机启动systemctl disable redis.service 
      # 当前状态systemctl status redis.service
    • 使用 systemctl 进行服务管理

    • 基本原理

    • 步骤



作者:izerone
链接:https://www.jianshu.com/p/6725951a71df


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消