Redis

1. NoSQL 简介

1.1 NoSQL 的概念

NoSQL(Not Only SQL),意即"不仅仅是 SQL",是一项全新的数据库理念,泛指非关系型的数据库

1.2 NoSQL 的作用

NoSQL 用于超大规模数据的存储。

1.3 关系型和非关系型数据库比较

在这里插入图片描述

  • 关系型数据库的数据之间有关联关系,非关系型数据库的数据之间没有关联关系
  • 关系型数据库的数据存储在硬盘的文件上,非关系型数据库的数据存储在内存中(所以非关系型数据库的查询速度更快)
  • 关系型数据库存储的数据格式只支持基本数据类型,非关系型数据库的存储的数据格式可以是 key-value 形式、文档形式、图片形式等等

1.4 主流的 NoSQL 产品

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

2. Redis 的概念

Redis 是一款高性能的键值(Key-Value)存储的非关系型数据库。

3. Redis 的安装

  1. 进入网站

    https://github.com/MSOpenTech/redis/releases
    
  2. 下载文件

    Redis-x64-xxx.zip
    
  3. 直接解压到电脑就可以使用

  4. 目录结构

    • redis.windows.conf:配置文件
    • redis-cli.exe:redis 的客户端
    • redis-server.exe:redis 服务器端
  5. 简单使用

    1. 打开 redis 服务器端,不要关闭

    2. 打开 redis 的客户端,输入

      127.0.0.1:6379> set username zhangsan
      OK
      127.0.0.1:6379> get username
      "zhangsan"
      

4. Redis 的命令

4.1 Redis 的数据结构

redis 存储的是 key-value 格式的数据,其中 key 都是字符串类型,value 有 5 种不同的数据结构:

  • 字符串类型 String
  • 哈希类型 Hash:key-value 的集合
  • 列表类型 List:支持重复元素
  • 集合类型 Set :不允许重复元素
  • 有序集合类型 SortedSet:不允许重复元素,且元素有顺序排序

4.2 字符串类型 String

  1. 存储一个元素

    语法:

    set key value
    

    实例:

    127.0.0.1:6379> set username zhangsan
    OK
    
  2. 获取一个元素

    语法:

    get key
    

    实例:

    127.0.0.1:6379> get username
    "zhangsan"
    
  3. 删除一个元素

    语法:

    del key
    

    实例:

    127.0.0.1:6379> del username
    (integer) 1
    

4.3 哈希类型 Hash

  1. 存储一个元素

    语法:

    hset key field value
    

    实例:

    127.0.0.1:6379> hset myhash username zhangsan
    (integer) 1
    
  2. 获取一个元素

    语法:

    hget key field
    

    实例:

    127.0.0.1:6379> hget myhash username
    "zhangsan"
    
  3. 获取所有元素

    语法:

    hgetall key
    

    实例:

    127.0.0.1:6379> hgetall myhash
    1) "age"
    2) "18"
    
  4. 删除一个元素

    语法:

    hdel key field
    

    实例:

    127.0.0.1:6379> hdel myhash username
    (integer) 1
    

4.4 列表类型 List

在这里插入图片描述

  1. 将元素添加列表左边

    语法:

    lpush key value
    

    实例:

    127.0.0.1:6379> lpush mylist a
    (integer) 1
    127.0.0.1:6379> lpush mylist b
    (integer) 2
    
  2. 将元素添加列表右边

    语法:

    rpush key value
    

    实例:

    127.0.0.1:6379> rpush mylist c
    (integer) 1
    
  3. 获取指定区间元素

    说明:

    lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

    语法:

    lrange key start end
    

    实例:

    127.0.0.1:6379> lrange mylist 0 -1
    1) "b"
    2) "a"
    3) "c"
    
  4. 删除列表最左边的元素,并将元素返回

    语法:

    lpop key
    

    实例:

    127.0.0.1:6379> lpop mylist
    "b"
    
  5. 删除列表最右边的元素,并将元素返回

    语法:

    rpop key
    

    实例:

    127.0.0.1:6379> rpop mylist
    "c"
    

4.5 集合类型 Set

  1. 存储一个元素

    语法:

    sadd key value
    

    实例:

    127.0.0.1:6379> sadd myset a
    (integer) 1
    127.0.0.1:6379> sadd myset a
    (integer) 0
    

    注意:Set 不能添加重复元素

  2. 获取全部元素

    语法:

    smembers key
    

    实例:

    127.0.0.1:6379> smembers myset
    1) "b"
    2) "a"
    
  3. 删除某个元素

    语法:

    srem key value
    

    实例:

    127.0.0.1:6379> srem myset c
    (integer) 1
    

4.6 有序集合类型 SortedSet

  1. 存储一个元素

    语法:

    zadd key score value
    

    实例:

    127.0.0.1:6379> zadd mysortedset 60 a
    (integer) 1
    127.0.0.1:6379> zadd mysortedset 50 b
    (integer) 1
    127.0.0.1:6379> zadd mysortedset 80 c
    (integer) 1
    
  2. 获取指定区间元素

    语法:

    zrange key start end [withscores]
    

    实例:

    127.0.0.1:6379> zrange mysortedset 0 -1
    1) "b"
    2) "a"
    3) "c"
    127.0.0.1:6379> zrange mysortedset 0 -1 withscores
    1) "b"
    2) "50"
    3) "a"
    4) "60"
    5) "c"
    6) "80"
    
  3. 删除一个元素

    语法:

    zrem key value
    

    实例:

    127.0.0.1:6379> zrem mysortedset a
    (integer) 1
    

4.7 通用命令

  1. 查询所有的键

    keys * 
    
  2. 获取键对应的value的类型

    type key
    
  3. 删除指定的 key-value

    del key
    

5. Redis 的持久化

5.1 持久化的作用

Redis 是一个内存数据库,当 Redis 服务器重启后,数据会丢失。如果需要这些数据,可以将 Redis 内存中的数据持久化保存到硬盘的文件中。

5.2 Redis 持久化机制

  1. RDB:默认方式,不需要进行配置,默认就使用这种机制。
  2. AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据。

5.3 RDB 的使用

  1. 打开 redis.windwos.conf 文件,找到以下内容

    save 900 1
    save 300 10
    save 60 10000
    
  2. 将其修改为以下内容

    save 900 1
    save 300 10
    # 如果 10 秒内至少有 5 个键被改变,就持久化
    save 10 5
    
  3. 打开命令提示符,启动 Redis 服务器,并指定配置文件名称

    D:\Redis>redis-server.exe redis.windows.conf
    
  4. 启动 Redis 客户端,十秒内改变五个键

    127.0.0.1:6379> set name a
    OK
    127.0.0.1:6379> set name b
    OK
    127.0.0.1:6379> set name c
    OK
    127.0.0.1:6379> set name d
    OK
    127.0.0.1:6379> set name e
    OK
    
  5. redis 文件夹中多了一个 dump.rdb 文件

  6. 关闭 Redis 的客户端,服务端

  7. 重新开启 Redis 的客户端,服务端,获取数据成功

    127.0.0.1:6379> get name
    "e"
    

5.4 AOF 的使用

  1. 打开 redis.windwos.conf 文件,找到以下内容

    appendonly no
    
  2. 将其修改为以下内容(开启 AOF)

    appendonly yes
    
  3. redis.windwos.conf 文件还有关于 AOF 持久化的方式的配置

    # appendfsync always : 每一次操作都进行持久化
    appendfsync everysec : 每隔一秒进行一次持久化
    # appendfsync no	 : 不进行持久化
    
  4. 打开命令提示符,启动 Redis 服务端,并指定配置文件名称

    D:\Redis>redis-server.exe redis.windows.conf
    
  5. 启动 Redis 客户端,存储一个数据

    127.0.0.1:6379> set name a
    OK
    
  6. redis 文件夹中多了一 appendonly.aof 文件

  7. 关闭 Redis 的客户端,服务端

  8. 打开命令提示符,启动 Redis 服务端,并指定配置文件名称

    D:\Redis>redis-server.exe redis.windows.conf
    
  9. 启动 Redis 客户端,获取数据成功

    127.0.0.1:6379> get name
    "a"
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bm1998

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值