redis数据库

1. redis简介

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

  • redis的应用方面:缓存 排行榜 统计播放人数,在线量 消息队列 Session服务器等

  • redis不太适合数据量较大的和访问频率太低的应用需求;

    redis的数据类型:

  1. String字符串 该string可以包含任何数据,是redis最基本的数据类型
  2. Hash哈希类型,是一个键值对集合,是string类型field和value的映射表
  3. List列表,简单的字符串列表
  4. Set集合(集合是通过哈希实现的)
  5. sorted Set 有序集合(例如排行榜)

Redis 是一个内存数据库,与传统的MySQL,Oracle等关系型数据库直接将内容保存到硬盘中相比,内存数据库的读写效率比传统数据库要快的多(内存的读写效率远远大于硬盘的读写效率)。但是保存在内存中也随之带来了一个缺点,一旦断电或者宕机,那么内存数据库中的数据将会全部丢失。

目标: 持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。
Redis 提供了两种持久化方式:RDB(默认) 和AOF

  1. RDB:RDB是Redis用来进行持久化的一种方式,是把当前内存中的数据集快照写入磁盘,也就是 Snapshot 快照(数据库中所有键值对数据)。恢复时是将快照文件直接读到内存里。RDB 持久化存在一个缺点是一定时间内做一次备份,如果redis意外down掉的话,就会丢失最后一次快照后的所有修改(数据有丢失)。(RDB存储的是数据)
    redis数据库
  2. 持久化方式 AOF 则是通过保存Redis服务器所执行的写命令来记录数据库状态。
    (AOF存的是操作的命令)
    并且可以通过BGREWRITEAOF指令压缩和优化;
    redis数据库

2. redis的安装

redis官网:http://redis.io/download
redis数据库
解压并编译:
redis数据库
redis数据库
redis数据库

3. redis的架构模式

  • 单机版
    1. 内存容量有限
    2. 处理能力有限
    3. 无法高可用(高可用:高度可用性)
      redis数据库
  • 主从复制
    Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品,其中被复制的服务器为主服务器(master),而通过复制创建出来的服务器复制品则为从服务器(slave)。 只要主从服务器之间的网络连接正常,主从服务器两者会具有相同的数据,主服务器就会一直将发生在自己身上的数据更新同步 给从服务器,从而一直保证主从服务器的数据相同。
    1. 无法保证高可用
    2. 没有解决 master 写的压力
      redis数据库
      note:主从服务器两者的数据相同,从服务器缓解了主服务器读的压力;

4. redis和python

在pycharm的终端pip install redis
对于字符串的操作:

  1. get
  2. mget
  3. set
  4. mset(设置多项键值对,传入的是字典)
  5. incr
  6. incrby
  7. decr
  8. decrby
  9. strlen

redis数据库
redis数据库
note:这里不是用decode()方法返回的是字节串,通过decode方法还原成字符;

  • 编码:encode 将字符按照规则翻译成二进制,存储在计算机中
  • 解码:decode 就是将字节转换成字符;

若要使用缓冲方式,提高效率:
redis数据库
返回一个有序的列表:
redis数据库

对于列表的操作:

  1. lpush
  2. rpush
  3. lpop
  4. rpop
  5. blpop(b表示阻塞等待;)

项目案例:

  • 短信验证码发送限制和redis(限制某一时间段访问次数)

redis数据库
redis数据库
redis数据库
redis数据库

  • ip访问频率限制
    redis数据库
    redis数据库
    redis数据库
  • redis消息队列和生产者消费者模型(list应用场景)

redis数据库
redis数据库
redis数据库
redis数据库
redis消息队列支持不同主机之间的信息交流:(应用场景如抢红包/秒杀商品)
这时候需要修改redis的配置信息(修改的时候切换到root用户)

先关闭redis服务
redis数据库
修改配配置文件
redis数据库
绑定任意主机
redis数据库
解除保护模式,是否让redis在后端运行
redis数据库