原创

    Redis 入门教程【一】

    第一章:Redis 基本介绍

    快速链接通道:

    1、Redis 官网下载链接:Redis 官网 【下载的是 Liunx 版本,不是 windows 版本】
    2、Redis 中文网下载链接:Redis 中文网 【下载的是 Liunx 版本,不是 windows 版本】
    3、GitHub 下载链接:Redis 的 GitHub 地址 【建议使用,各种版本都有,这个是微软的,不是 Redis 的】
    4、本博客站点下载:redis-2.8.9.zip 【建议使用,windows 版本的】
    5、Redis 命令教程:Redis 命令教程

    一、Redis 简介

    Redis(Remote Dictionary Server ): 即远程字典服务 ,是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、高性能的 NOSQL 系列的非关系型数据库 ,并提供多种语言的 API 。


    那么什么是 NOSQL 呢? NoSQL(NoSQL = Not Only SQL) 意为:不仅仅是 SQL ,是一项全新的数据库理念,泛指 非关系型数据库NOSQL 出现原因: 随着互联网 web2.0 网站的兴起,传统的关系数据库在应付 web2.0 网站,特别是超大规模和高并发的 SNS 类型的 web2.0 纯动态网站已经显得力不从心,暴露了很多难以克服的问题, 而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL 数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

    二、Redis 优缺点

    Redis 和关系型数据库比较,也是 NoSQL 和关系型型数据库的对比。异同点如下所示:

    # Redis 优点:
    1、【成本】NOSQL 数据库简单易部署,基本都是开源软件,
    不需要像使用 Oracle 那样花费大量成本购买使用,相比关系型数据库价格便宜
    
    2、【查询速度】NOSQL 数据库将数据存储于缓存之中,
    关系型数据库将数据存储在硬盘中,自然查询速度远不及 NOSQL 数据库
    
    3、【存储数据的格式】NOSQL 的存储格式是 key=value 形式、文档形式、图片形式等等,
    所以可以存储基础类型以及对象或者是集合等各种格式,而关系型数据库则只支持基础类型
    
    4、【扩展性】关系型数据库有类似 join 这样的多表查询机制的限制导致扩展很艰难
    
    5、【是否区分大小写】Redis 不区分大小写
    
    6、【瓶颈】Redis 是单线程的,所以 Redis 的瓶颈不是 CPU ,而是【机器内存和网络带宽】
    
    Redis 缺点:
    1、维护的工具和资料有限,因为 NOSQL 是属于新的技术,不能和关系型数据库十几年的技术同日而语 2、不提供对 SQL 的支持,如果不支持 SQL 这样的工业标准,将产生一定用户的学习和使用成本 3、不提供关系型数据库对事务的处理。(有些支持,有些不支持)
    # 总结如下:
    
    1、关系型数据库与 NoSQL 数据库并非对立而是互补的关系。
    即通常情况下使用关系型数据库,在适合使用 NoSQL 的时候使用 NoSQL 数据库。
    
    2、让 NoSQL 数据库对关系型数据库的不足进行弥补。
    
    3、一般会将数据存储在关系型数据库中,在 NoSQL 数据库中备份存储关系型数据库的数据
    

    三、Redis 应用场景

    Redis 是用 C 语言开发的一个开源的 高性能键值对(key-value)数据库 ,官方提供测试数据,50 个并发执行 100000 个请求,读的速度是 110000 次 / s ,写的速度是 81000 次 / s 。且 Redis 通过提供多种键值数据类型来适应不同场景下的存储需求。目前为止 , Redis 支持的键值数据类型 如下:

    Redis 支持的键值数据类型:
    1、字符串类型 string 2、哈希类型 hash 3、列表类型 list 4、集合类型 set 5、有序集合类型 sortedset
    Redis 的应用场景:
    1、缓存(数据查询、短连接、新闻内容、商品内容等等) 2、聊天室的在线好友列表 3、任务队列。(秒杀、抢购、12306 等等) 4、应用排行榜 5、网站访问统计 6、数据过期处理(可以精确到毫秒 7、分布式集群架构中的 session 分离 8、发布订阅系统 9、地图信息分析

    当前主流的 NOSQL 产品如下:

    # 键值(Key-Value)存储数据库
    相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
    典型应用: 内容缓存,主要用于处理大量数据的高访问负载。 
    数据模型: 一系列键值对
    产品优势: 快速查询
    产品劣势: 存储的数据缺少结构化
    
    
    # 列存储数据库
    相关产品:Cassandra, HBase, Riak
    典型应用:分布式的文件系统
    数据模型:以列簇式存储,将同一列数据存在一起
    产品优势:查找速度快,可扩展性强,更容易进行分布式扩展
    产品劣势:功能相对局限
    
    # 文档型数据库
    相关产品:CouchDB、MongoDB
    典型应用:Web应用(与 Key-Value 类似,Value 是结构化的)
    数据模型: 一系列键值对
    产品优势:数据结构要求不严格
    产品劣势: 查询性能不高,而且缺乏统一的查询语法
    
    
    # 图形(Graph)数据库
    相关数据库:Neo4J、InfoGrid、Infinite Graph
    典型应用:社交网络
    数据模型:图结构
    产品优势:利用图结构相关算法。
    产品劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。
    

    四、Redis 下载安装

    Redis 的下载:

    1、Redis 官网下载链接:Redis 官网 【下载的是 Liunx 版本,不是 windows 版本】
    2、Redis 中文网下载链接:Redis 中文网 【下载的是 Liunx 版本,不是 windows 版本】
    3、GitHub 下载链接:Redis 的 GitHub 地址 【建议使用,各种版本都有,这个是微软的,不是 Redis 的】
    4、本博客站点下载:redis-2.8.9.zip 【建议使用,windows 版本的】
    5、Redis 命令教程:Redis 命令教程

    下载完成之后,解压即可使用 。解压之后如下图:

    那么如何使用 Redis 呢? 双击打开 redis-server.exe ,如下图:

    然后 双击打开 redis-cli.exe 即可使用,如下图:

    五、Redis 配置文件详解

    这个是 windows 下的配置文件【linux 的配置文件详解在 Redis 高级部分】,具体介绍如下:

    port 6379           # 指定 Redis 运行的端口,默认是 6379
    
    # 设置客户端连接时的超时时间,单位为秒
    timeout 0           # 当客户端在这段时间内没有发出任何指令,那么就关闭该连接。0 代表关闭此设置
    
    tcp-keepalive 0
    
    # 当 Redis 在后台运行的时候,Redis 默认会把 pid 文件放在 /var/run/redis.pid
    # 你也可以配置到其他地址。当运行多个 Redis 服务时,需要指定不同的 pid 文件和端口
    pidfile /var/run/redis.pid
    
    # 指定日志记录级别。Redis 总共支持四个级别:debug、verbose、notice、warning,默认为 notice
    # debug 记录很多信息,用于开发和测试。varbose 有用的信息,不像 debug 会记录那么多。
    # notice 就是普通的 verbose ,常用于生产环境。warning 只有非常重要或者严重的信息会记录到日志
    loglevel notice
    
    logfile stdout     # 默认值为 stdout ,标准输出,若后台模式会输出到 /dev/null
    
    # 代表 Redis 默认有 16 个数据库,默认使用第 0 个数据库。
    # 如果需要切换,那就进入到客户端,使用命令:select n (n 代表第 n + 1 个数据库,n 最大为 15 )
    databases 16
    
    # daemonize no 默认情况下,redis不是在后台运行的,如果需要在后台运行,把该项的值更改为yes
    daemonize yes
    
    save 900 1
    save 300 10
    save 60  10000
    
    stop-writes-on-bgsave-error yes
    
    # 在启动 redis 时是否显示 logo
    always-show-logo yes
    
    rdbcompression yes
    rdbchecksum yes
    dbfilename dump.rdb
    dir ./
    slave-serve-stale-data yes
    slave-read-only yes
    repl-disable-tcp-nodelay no
    slave-priority 100
    appendonly no
    appendfsync everysec
    no-appendfsync-on-rewrite no
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
    
    lua-time-limit 5000
    slowlog-log-slower-than 10000
    slowlog-max-len 128
    hash-max-ziplist-entries 512
    hash-max-ziplist-value 64
    list-max-ziplist-entries 512
    list-max-ziplist-value 64
    set-max-intset-entries 512
    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64
    activerehashing yes
    client-output-buffer-limit normal 0 0 0
    client-output-buffer-limit slave 256mb 64mb 60
    client-output-buffer-limit pubsub 32mb 8mb 60
    hz 10
    aof-rewrite-incremental-fsync yes
    

    第二章:Redis 相关操作

    TIPS:

    Redis 中文网教程: Redis 教程
    Redis 的官方文档: Redis 文档

    一、Redis 的数据结构

    redis 存储的是 key-value 格式 的数据。其中 key 都是字符串 ,而 value 却有 5 种不同的数据结构 ,如下图:

    二、Redis 的通用命令

    通用命令 的相关操作以及截图如下:

    keys *              # 查询所有的键
    type key            # 获取键对应的 value 的类型
    
    del key             # 删除指定的 key
    flushdb             # 清空当前数据库
    flushall            # 清空所有数据库
    clear               # 清空屏幕
    expire key n        # 表示 key 在 n 秒后会过期。例如:expire name 10 表示 name 这个键在 10 秒后会过期
    
    dbsize              # 查看当前数据库 key 的数量
    select 8            # 切换到第 9 个数据库,n 最大值为 15
    exists key          # 判断某个键是否存在。例如:exists name 表示判断 name 这个键是否存在
    

    三、数据类型之字符串

    字符串类型 的常用命令相关操作以及截图如下:

    + 存储: set key value                   举例:127.0.0.1:6379> set age 23
    + 追加: append key value                举例:127.0.0.1:6379> append age 24
    + 获取: get key                         举例:127.0.0.1:6379> get age
                                            
    - 删除: del key                         举例:127.0.0.1:6379> del age
                                            
    + 长度: strlen key                      举例:127.0.0.1:6379> strlen age
    + 截取: getrange key start end          举例:127.0.0.1:6379> getrange age 0 -1
    + 替换: setrange key index value        举例:127.0.0.1:6379> setrange age 0 G
    

    字符串类型的 高级操作 ,这里只做简单介绍,更多详情介绍请 参阅官网 。高级命令如下:

    # setnx 命令: Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值。
    127.0.0.1:6379> SETNX KEY_NAME VALUE
    
    # mset 命令: Mset 命令用于同时设置一个或多个 key-value 对
    127.0.0.1:6379> MSET key1 value1 key2 value2 .. keyN valueN 
    
    # setex 命令: Setex 为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。
    127.0.0.1:6379> SETEX KEY_NAME TIMEOUT VALUE
    
    # incr 命令: Incr 命令将 key 中储存的数字值增一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,
    # 然后再执行 INCR 操作。注意 key 的值必须是 integer 类型的,就是整型
    127.0.0.1:6379> INCR KEY_NAME
    
    # incrby 命令: 对 key 的值自动加 n,类似于 i += n
    127.0.0.1:6379> INCRBY KEY_NAME INCR_AMOUNT
    
    # decr 命令: Decr 命令将 key 中储存的数字值减一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,
    # 然后再执行 DECR 操作。注意 key 的值必须是 integer 类型的,就是整型
    127.0.0.1:6379> DECR KEY_NAME 
    
    # decrby 命令: 将 key 所储存的值减去指定的减量值。意思就是对 key 的值自动加 n,类似于 i += n 。
    127.0.0.1:6379> DECRBY KEY_NAME DECREMENT_AMOUNT
    
    # set 命令存储 json 特殊用法
    127.0.0.1:6379> set user:1 {name:zhangsan,age:23}
    
    # getset 命令: Getset 命令用于设置指定 key 的值,并返回 key 旧的值。
    127.0.0.1:6379> GETSET KEY_NAME VALUE
    

    四、数据类型之哈希

    哈希类型 的相关操作以及截图如下 【更多高级操作请 参阅官网 】:

    # 存储数据 ==> 举例:127.0.0.1:6379> hset myhash username guo
    hset key field value
    
    # 获取数据 ==> 举例:127.0.0.1:6379> hget myhash username
    hget key field
    
    # 删除数据 ==> 举例:127.0.0.1:6379> hdel myhash username
    hdel key field
    
    # Redis Hgetall 命令用于返回哈希表中,所有的字段和值
    # 获取全部数据 ==> 举例:127.0.0.1:6379> hgetall myhash
    hgetall key
    

    五、数据类型之列表

    列表类型 的相关操作以及截图如下 【更多高级操作请 参阅官网 】:

    列表类型示意图

    +++ 列表类型 list :可以添加一个元素到列表的头部(左边)或者尾部(右边)。注意:列表类型里面的元素允许重复
    
    + 向左添加: lpush key value             举例:127.0.0.1:6379> lpush mylist a
    + 向右添加: rpush key value             举例:127.0.0.1:6379> rpush mylist c
    + 范围获取: lrange key start end        举例:127.0.0.1:6379> lrange mylist 0 -1
    + 指定获取: lindex key index            举例:127.0.0.1:6379> lindex mylist 1
    + 列表长度: llen key                    举例:127.0.0.1:6379> llen mylist
    + 列表修剪: ltrim key start stop        举例:127.0.0.1:6379> ltrim mylist 0 1
    
    - 向左删除: lpop key                    举例:127.0.0.1:6379> lpop mylist
    - 向右删除: rpop key                    举例:127.0.0.1:6379> rpop mylist
    - 移除元素: lrem key count value        举例:127.0.0.1:6379> lrem mylist 2 Java
    

    六、数据类型之集合

    集合类型 的相关操作以及截图如下 【更多高级操作请 参阅官网 】:

    +++ 集合类型 set  注意:集合类型里面的元素不允许重复且不保证顺序
    
    + 添加: sadd key value              举例:127.0.0.1:6379> sadd myset a
    + 获取: smembers key                举例:127.0.0.1:6379> smembers myset
    + 交集: sinter key1 key2 ...keyn    举例:127.0.0.1:6379> sinter myset myset2
    + 并集: sunion key1 key2 ...keyn    举例:127.0.0.1:6379> sunion myset myset2
    
    - 删除: srem key value              举例:127.0.0.1:6379> srem myset a
    - 差集: sdiff key1 key2 ...keyn     举例:127.0.0.1:6379> sdiff myset myset2
    

    七、数据类型之有序集合

    有序集合类型 的相关操作以及截图如下 【更多高级操作请 参阅官网 】:

    # 有序集合类型【sortedset】中不允许重复元素,且元素有顺序
    # 其中每个元素都会关联一个 double 类型的分数,Redis 正是通过分数来为集合中的成员进行从小到大的排序
    
    # 存储数据 ==> 举例:127.0.0.1:6379> zadd mysort 60 Jack
    zadd key score value
    
    # 获取数据 ==> 举例:127.0.0.1:6379> zrange mysort 0 -1 或者 zrange mysort 0 -1 withscores
    zrange key start end [withscores]
    
    # 删除数据 ==> 举例:127.0.0.1:6379> zrem mysort Jack
    zrem key value
    

    第三章:Redis 的持久化机制

    一、持久化概念介绍

    什么是持久化呢? 因为 Redis 是一个 内存数据库,当 Redis 服务器重启或者电脑重启,那么数据就会丢失。 这个时候我们就要进行持久化操作,将 Redis 内存中的数据持久化保存到硬盘的文件中,这个操作就叫做 持久化 。Redis 持久化机制有两种: RDB 机制AOF 机制 。具体详情介绍如下:

    二、持久化机制之RDB

    RDB 机制: 这是 Redis 持久化的默认方式,不需要进行配置,默认就使用这种机制。 这种机会在一定的间隔时间中,检测 key 的变化情况,然后持久化数据。接下来我们实际操作一下,看一下这种机制如何实现。


    第一步: 编辑 Redis 安装目录下的 redis.windwos.conf 配置文件,找到如下内容,然后修改一下配置,把 save 60 10000 注释掉,修改为 save 10 5 。这里的修改只是用于测试,测试完成之后改回原来的数据。修改如下:

    # after 900 sec (15 min) if at least 1 key changed
    # 中文意思是:15 分钟内,如果有 1 个 key 改变,那么就进行持久化
    
    # after 300 sec (5 min) if at least 10 keys changed
    # 中文意思是:5 分钟内,如果有 10 个 key 改变,那么就进行持久化
    
    # after 60 sec if at least 10000 keys changed
    # 中文意思是:1 分钟内,如果有 10000 个 key 改变,那么就进行持久化
    
    save 900 1
    save 300 10
    # save 60 10000      # 将这一行注释掉,使用如下配置进行替换
    
    # 10 秒内,如果有 5 个 key 改变,那么就进行持久化,即会在 Redis 安装目录生成一个以 rdb 为后缀的文件
    save 10 5
    

    第二步: 以指定配置文件名称的方式重新启动 Redis 服务器, 启动过程如下图:

    第三步: 测试 RDB 机制,看是否生成以 rdb 为后缀的持久化文件。 过程如下图:

    第四步: 以指定配置文件名称的方式重启 Redis 服务器,看里面是否还有数据。 如下图:

    温馨小提示: 记得把修改了的配置文件修改回去嗷!!!

    三、持久化机制之AOF

    接下来介绍一下 AOF 机制: 一种以日志记录的方式,可以记录每一条命令的操作。可以在每一次命令操作完成之后就持久化数据。 那么现在就来操作一波吧!


    第一步: 编辑 redis.windwos.conf 配置文件,找到 appendonly no【关闭 aof,在 392 行】,然后将其修改为 appendonly yes【开启 aof】。修改好后保存。 以下配置了解一下,不需要修改:

    # 以下三行配置在 redis.windwos.conf 配置文件中的第 420 行
    # 对应的功能都默认配置好了,我们只需要了解一下,无需去修改
    
    # appendfsync always        # 每一次操作都进行持久化
    appendfsync everysec        # 每隔一秒进行一次持久化
    # appendfsync no            # 不进行持久化
    

    第二步: 以指定配置文件名称的方式重新启动 Redis 服务器,启动过程如下图:

    第三步: 测试 AOF 机制,看是否生成以 aof 为后缀的持久化文件。过程如下图:

    第四步: 以指定配置文件名称的方式重启 Redis 服务器,看里面是否还有数据。如下图:

    两种持久化机制的不足之处:

    RDB 机制: 数据可能无法完全保存,存在一些数据的丢失。
    AOF 机制: 对性能影响比较严重,耗内存。
    推荐阅读: Redis 进阶教程【二】
    推荐阅读: Redis 高级教程【三】

    Redis
    • 文章作者:GuoShiZhan
    • 创建时间:2021-08-02 13:47:23
    • 更新时间:2021-08-11 15:11:54
    • 版权声明:本文为博主原创文章,未经博主允许不得转载!
    请 在 评 论 区 留 言 哦 ~~~
    1024