Redis 初识

初识 Redis

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

什么是 Redis

  • Redis 的全称是 Remote Dictionary Server, 远程字典服务器。
  • Redis是一个开源的使用ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API,是一种 NoSQL 数据库。
  • 相关网站

Redis 的特点

    1. 速度快
    • 为什么快 ?
      • Redis 的所有数据都是存放在内存中的(最主要的原因)
      • Redis 是用 C 语言实现的, 一般来说 C 语言实现的程序“距离”操作系统更近,执行速度相对会更快
      • Redis 使用了单线程架构,预防了多线程可能产生的竞争问题
      • Redis 源代码优良,集性能和优雅于一身
    1. 基于键值对的数据结构服务器
    1. 丰富的功能
    • 5 种数据结构
      • 字符串
      • Bitmaps
      • HyperLogLog
      • GEO , 地理信息定位 ( 3.2 版本 )
      • 哈希
      • 列表
      • 集合
      • 有序集合
    • 提供了键过期功能,可以用来实现缓存。
    • 提供了发布订阅功能,可以用来实现消息系统。
    • 支持 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 真正的分布式实现,提供了高可用、读写和容量的扩展性。

Redis 使用场景

Redis 可以做什么

    1. 缓存
    1. 排行榜系统
    • 列表和有序集合数据结构
  • 3.计数器应用
    • 视频播放数
  • 4.社交网络
    • 赞/踩,粉丝,共同好友/喜好, 推送,下拉刷新
    1. 消息队列系统
    • Redis 提供了发布订阅通能和阻塞队列的功能,基本可以满足简单的消息队列功能

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/ 下,编译之前确保操作系统已经安装gcc
make
# 安装
make install

# 安装结束后,验证
redis-cli -v

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

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

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

    • 默认配置

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

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

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

        配置名 配置说明
        port 端口
        logfile 日志文件
        dir Redis 工作目录(粗放持久化文件和日志文件)
        daemonize 是否以守护进程的方式启动 Redis (后台启动)
        redis-server /opt/redis/redis.conf
        
  • 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
    • 关闭 Redis 服务
    • 删除相关文件或文件夹
      • 安装目录文件夹
      • /usr/local/bin 下的启动文件

设置 Redis 开机自启动 ( Linux )

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

    • 基本原理
      • 系统开机启动时会去加载 /etc/init.d/ 下面的脚本,通常而言每个脚本文件会自定义实现程序的启动;若想将新的程序开机自启动,只需在该目录下添加一个自定义启动程序的脚本,然后设置相应规则即可。
    • 步骤
      • 编写自启动脚本 redis

        # chkconfig: 2345 10 90
        # description: Start and Stop redis
        
        PATH=/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
        
    • 注意
      • redis 服务名称可以自定义
        • redis_6666, redis_666.service
  • systemctl 方式 ( CentOS7 )

    • 基本原理
      • 使用 systemctl 进行服务管理
    • 步骤
      • 创建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
        
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,639评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,277评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,221评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,474评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,570评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,816评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,957评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,718评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,176评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,511评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,646评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,322评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,934评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,755评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,987评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,358评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,514评论 2 348

推荐阅读更多精彩内容