redis数据库
1. redis简介
NoSQL,全名为Not Only SQL,指的是非关系型的数据库
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API并提供多种语言的 API的非关系型数据库。
-
redis的应用方面:缓存 排行榜 统计播放人数,在线量 消息队列 Session服务器等
-
redis不太适合数据量较大的和访问频率太低的应用需求;
redis的数据类型:
- String字符串 该string可以包含任何数据,是redis最基本的数据类型
- Hash哈希类型,是一个键值对集合,是string类型field和value的映射表
- List列表,简单的字符串列表
- Set集合(集合是通过哈希实现的)
- sorted Set 有序集合(例如排行榜)
Redis 是一个内存数据库,与传统的MySQL,Oracle等关系型数据库直接将内容保存到硬盘中相比,内存数据库的读写效率比传统数据库要快的多(内存的读写效率远远大于硬盘的读写效率)。但是保存在内存中也随之带来了一个缺点,一旦断电或者宕机,那么内存数据库中的数据将会全部丢失。
目标: 持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。
Redis 提供了两种持久化方式:RDB(默认) 和AOF
- RDB:RDB是Redis用来进行持久化的一种方式,是把当前内存中的数据集快照写入磁盘,也就是 Snapshot 快照(数据库中所有键值对数据)。恢复时是将快照文件直接读到内存里。RDB 持久化存在一个缺点是一定时间内做一次备份,如果redis意外down掉的话,就会丢失最后一次快照后的所有修改(数据有丢失)。(RDB存储的是数据)
- 持久化方式 AOF 则是通过保存Redis服务器所执行的写命令来记录数据库状态。
(AOF存的是操作的命令)
并且可以通过BGREWRITEAOF指令压缩和优化;
2. redis的安装
redis官网:http://redis.io/download
解压并编译:
3. redis的架构模式
- 单机版
- 内存容量有限
- 处理能力有限
- 无法高可用(高可用:高度可用性)
- 主从复制
Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品,其中被复制的服务器为主服务器(master),而通过复制创建出来的服务器复制品则为从服务器(slave)。 只要主从服务器之间的网络连接正常,主从服务器两者会具有相同的数据,主服务器就会一直将发生在自己身上的数据更新同步 给从服务器,从而一直保证主从服务器的数据相同。- 无法保证高可用
- 没有解决 master 写的压力
note:主从服务器两者的数据相同,从服务器缓解了主服务器读的压力;
4. redis和python
在pycharm的终端pip install redis
对于字符串的操作:
- get
- mget
- set
- mset(设置多项键值对,传入的是字典)
- incr
- incrby
- decr
- decrby
- strlen
note:这里不是用decode()方法返回的是字节串,通过decode方法还原成字符;
- 编码:encode 将字符按照规则翻译成二进制,存储在计算机中
- 解码:decode 就是将字节转换成字符;
若要使用缓冲方式,提高效率:
返回一个有序的列表:
对于列表的操作:
- lpush
- rpush
- lpop
- rpop
- blpop(b表示阻塞等待;)
项目案例:
- 短信验证码发送限制和redis(限制某一时间段访问次数)
- ip访问频率限制
- redis消息队列和生产者消费者模型(list应用场景)
redis消息队列支持不同主机之间的信息交流:(应用场景如抢红包/秒杀商品)
这时候需要修改redis的配置信息(修改的时候切换到root用户)
先关闭redis服务
修改配配置文件
绑定任意主机
解除保护模式,是否让redis在后端运行