Redis基础

Entropy Tree Lv4

Redis基础

概念

redis是一款高性能的NoSQL系列的非关系型数据库,全称Remote Dictionary Server远程字典服务器,是基于C语言开发的一个开源的高性能键值对数据库

NoSQL,全称Not-Only SQL,泛指非关系型的数据库,专门用于应对基于海量用户和海量数据下的数据处理问,不同于MySQL这类关系型数据库,NoSQL系列的非关系型数据库减少了磁盘读写次数、去除了数据间的关联性弥补关系型数据库在磁盘读写性能、复杂的数据关联性难于扩展的不足,专门用于应对大量用户高并发的问题

但非关系型数据库与关系型数据库在开发中一般会配合使用,非关系型数据库能实现大量数据的高效率访问,关系型数据库能实现复杂的数据查询以及保障安全性能的事务机制。单一的非关系数据库则无法实现复杂查询、安全保障,单一的关系型数据库也无法实现高效访问。因此联合使用非关系数据库和关系型数据库,相互弥补缺点,才能提供最好的用户体验。

开始使用

下载安装

redis官网 以及中文官网 主要提供的是Linux发行版下的redis版本,用于投入开发使用。本文章以windows系统下的redis版本做为学习使用,在GitHub上的Releases · microsoftarchive/redis 下载zip压缩包找到内部的release目录下含有redis主要的exe文件的压缩包后解压即可(这里是以2.8.9版本为例)

关于redis的图形化管理工具下载 (最新版本需要收费使用)

重要文件

redis压缩包解压后目录下的重要文件主要是以下文件:

  • redis.windows.conf:配置文件
  • redis-cli.exe:redis客户端
  • redis-server.exe:redis服务器端
基本操作

请确保redis服务器端先启动,否则redis客户端在启动后将会无法连接至redis服务器端

redis数据类型:string、hash、list、set、sorted_set/zset

注意:在未持久化redis中的数据时,关闭redis服务器端会导致在redis客户端存储的数据全部丢失,因此请在确保redis服务器端一直运行的前提下,测试下面的命令操作

  1. 字符串类型:string

    主要用于存储单个数据,是最简单也是最常用的数据存储类型

    一个存储空间存储一个数据

    存储的数据如果是整数类型,则可进行数字操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    # 存储命令
    # 格式: set key value
    # 存储一个键为name, 值为tom的字符串数据
    set name tom
    # 存储一个键为age, 值为26的字符串数据
    set age 26

    # 获取命令
    # 格式: get key
    # 获取name键对应的值
    get name
    # 获取age键对应的值
    get age

    # 删除命令
    # 格式: del key
    # 删除name键对应的值
    del name
    #删除age键对应的值
    del age

    # 重新获取值, 确认是否已经删除
    get name
    get age

    # 数字操作命令

    # 自增处理incr key, 当key不存在时会自动创建, 默认自增值1
    incr num #num键若不存在, 则自动创建
    # 自增指定数据incrby key increment
    incrby num 20 #指定num键的值自增20

    # 自减处理decr key, 同样的若key不存在会自动创建, 默认自减值1
    decr num
    # 自减指定数据decrby key decrement
    decrby num 30
  2. 哈希类型:hash

    主要用于分组存储有一定关联性的数据,比如java对象中的一系列成员变量数据

    一个存储空间存储多个键值对数据

    底层使用哈希表结构实现数据存储

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # 存储命令
    # 格式: hset key field value
    # 在myhash键中存储一个name字段, 值为jerry的数据
    hset myhash name jerry
    # 在myhash键中存储一个password字段, 值为pass的数据
    hset myhash password pass

    # 获取命令
    # 格式一: hget key field 获取指定的field所对应的值
    # 获取myhash键中name字段的值
    hget myhash name
    # 格式二: hgetall key 获取指定key下的所有field和value
    # 获取myhash键下的所有键值对数据
    hgetall myhash

    # 删除命令
    # 格式: hdel key field
    # 删除myhash键下的name字段及其对应的值
    hdel myhash name
  3. 列表类型:list

    主要用于存储多个数据,并对数据先后进入存储空间的顺序进行区分

    一个存储空间存储多个数据,且区分数据存储的先后顺序

    底层使用双向链表结构实现数据存储

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    # 存储命令
    # 格式一: lpush key value 在列表左边(头部)添加数据
    # 格式二: rpush key value 在列表右边(尾部)添加数据
    # 先任意添加一个测试的初始数据
    lpush mylist origin
    # 在mylist键列表头部添加一个数据
    lpush mylist head
    # 在mylist键列表尾部添加一个数据
    rpush mylist tail

    # 获取命令
    # lrange key start end 根据start和end的范围获取
    # list数据下标从0开始, 若使用负数, 则表示从列表尾部倒数第几个数据
    # 获取mylist下标0-2的数据
    lrange mylist 0 2
    lrange mylist 0 -1 #-1表示列表倒数第一个数据, 即正数最后一个数据

    # 删除命令
    # 格式一: lpop key 删除列表最左边的数据
    # 格式二: rpop key 删除列表最右边的数据
    # 删除mylist键列表头部的一个数据
    lpop mylist
    # 删除mylist键列表尾部的一个数据
    rpop mylist
  4. 集合类型:set

    主要用于存储大量的数据,提供更高的数据查询效率

    一个存储空间能够存储大量数据,且具有高效的内部存储机制

    底层与hash存储结构相同,并且不允许存储重复的值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 存储命令
    # 格式: sadd key value
    # 在myset键存储一个值为a的数据
    sadd myset a #第二次重复执行, 不会再新增数据
    sadd myset b

    # 获取命令
    # 格式: smembers key
    # 获取myset键中的所有数据
    smembers myset

    # 删除命令
    # 格式: srem key value
    # 删除myset键中值为a的数据
    srem myset a
  5. 有序集合类型:sorted_set

    不允许存储重复数据,并且存储的数据是有顺序的,每个数据会关联一个double类型的分数作为排序的依据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # 存储命令
    # 格式: zadd key score value
    # 在mysort键存储一个分数为3, 值为pascal的数据
    zadd mysort 3 pascal
    # 在mysort键存储一个分数为1, 值为visual的数据
    zadd mysort 1 visual

    # 获取命令
    # 格式: zrange key start end 范围获取, 可参考list列表类型的获取命令来理解
    # 获取mysort键下的所有数据
    zrange mysort 0 -1

    # 删除命令
    # 格式: zrem key value
    # 删除mysort键下值为visual的数据
    zrem mysort visual

    通用命令操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 查询所有的键
    keys *

    # 获取指定键对应的数据类型
    # 获取mysort键对应的数据类型
    type mysort

    # 删除指定的键及其数据
    # 删除myhash键下的所有键值对数据
    del myhash

持久化

RDB方式

redis作为一个内存数据库,当redis服务器重启后,数据就会丢失。为了能够在redis服务器重启后能够快速恢复缓存的数据,就需要使用持久化技术

  • redis持久化机制:每隔一定时间检测key的变化情况,根据配置决定是否进行持久化。持久化的数据就存储在dump.rdb文件中。

  • 持久化配置过程:打开redis.windows.conf文件,找到# Save the DB on disk所在的位置,在#注释的下方可以看到save 900 1的字样,这些原始的字样就是默认的持久化机制。通过修改这些字样就能设置持久化机制。

  • 关于持久化配置的简单说明:

    save 900 1

    after 900 sec (15 min) if at least 1 key changed
    经过15分钟,如果至少有一个key发生变化,那么就进行一次持久化

    save 300 10

    after 300 sec (5 min) if at least 10 keys changed
    经过5分钟,如果至少有10个key发生变化,那么就进行一次持久化

    save 60 10000

    after 60 sec (1 min) if at least 10000 keys changed
    经过1分钟,如果至少有10000个key发生变化,那么就进行一次持久化
  • 持久化机制测试:

    配置之前请先确保关闭redis服务器,以防配置无法生效

    1. 修改配置文件在指定位置添加字样save 10 5,10秒后有5个key发生变化,则持久化

    2. 在redis根目录下打开cmd,通过redis-server.exe redis.windows.conf命令启动redis服务器,否则持久化机制还是使用默认方式,如果觉得麻烦可以看补充

    3. 打开redis客户端

      1
      2
      3
      4
      5
      6
      7
      # 测试数据, 修改5个key
      set name 1
      set name 2
      set name 3
      set name 4
      set name 5
      # 之后根据save 10 5的配置, 会在redis的根目录下生成dump.rdb文件
    4. 关闭redis服务器和客户端,再重启服务器和客户端重新查询数据,测试数据是否实现持久化

AOF方式

AOF是一种日志记录,用于记录redis每一条命令执行的历史操作,可在每一次命令操作后持久化数据

AOF配置过程:打开redis.windows.conf文件,找到appendonly no字样修改noyes开启AOF支持。再找到#appendfsync开头的字样,去掉前面的#启动持久化机制

AOF持久化机制简单说明:appendfsync always每一次操作进行一次持久化,appendfsync everysec每隔一秒进行一次持久化,appendfsync no不进行持久化

注意:在redis根目录下用cmd执行redis-server.exe redis.windows.conf命令启动服务器,否则配置可能不生效

补充

关于redis-server.exe启动时默认加载配置文件

右击文件创建快捷方式,右击快捷方式设置属性,在目标的后面添加空格和配置文件名,配置完后的示例D:\redis-2.8.9\redis-server.exe redis.windows.conf,前面的exe文件路径根据本地实际情况配置,默认是已有的,然后点击应用。之后使用该快捷方式启动服务器就能自动加载配置文件

关于RedisQFork_8412.dat文件

这是redis的内存映射文件。当redis启动时会自动创建,redis关闭后会自动消失。不过这个文件会随数据量的增长而增长,没有限制能够增长到几十G的大小,如果硬盘空间无法容纳这几十G的大小,就无法启动redis服务。可以通过修改配置文件中的maxheap字样后的参数实现(单位B),如设置最大为4G,则填写4294967296(4GB换算成B)

  • 标题: Redis基础
  • 作者: Entropy Tree
  • 创建于 : 2022-09-14 21:24:00
  • 更新于 : 2023-04-01 07:55:52
  • 链接: https://www.entropy-tree.top/2022/09/14/Redis-Base/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
此页目录
Redis基础