一 NoSQL
NoSQL 是 Not Only SQL 的缩写,意即"不仅仅是 SQL"的意思,泛指非关系型的数据库。强调 Key-Value Stores 和文档数据库的优点。
NoSQL 产品是传统关系型数据库的功能阉割版本,通过减少用不到或很少用的功能,来大幅度提高产品性能
- 不遵循 SQL 标准。 (添加 insert 修改 update )
- 不支持 ACID。
- 远超于 SQL 的性能。
过去,关系型数据库(SQL Server、Oracle、MySQL)是数据持久化的唯一选择,但随着发展,关系型数据库存在以下问题。
问题 1:不能满足高性能查询需求
问题 2:应用程序规模的变大
三 NoSQL 的使用
- 对数据高并发的读写
- 海量数据的读写
- 对数据高可扩展性的
秒杀活动
NoSQL 不适用场景
- 需要事务支持
- 基于 sql 的结构化查询存储,处理复杂的关系,需要关系查询。
用不着 sql 的和用了 sql 也不行的情况,考虑用 NoSql
四【熟悉】常见的 NoSQL 及区别
1,常见的 NoSQL 数据库
2,区别
1,Memcached
- 很早出现的 NoSql 数据库
- 数据都在内存中,一般不持久化
- 支持简单的 key-value 模式,支持类型单一
- 一般是作为缓存数据库辅助持久化的数据库(MySQL)
2,Redis
- 几乎覆盖了 Memcached 的绝大部分功能
- 数据都在内存中,支持持久化,主要用作备份恢复
- 除了支持简单的 key-value 模式,还支持多种数据结构的存储,比如 list、set、hash、zset 等。
- 一般是作为缓存数据库辅助持久化的数据库
3,MongoDB
- 高性能、开源、模式自由(schema free)的文档型数据库
- 数据都在内存中, 如果内存不足,把不常用的数据保存到硬盘
- 虽然是 key-value 模式,但是对 value(尤其是 json)提供了丰富的查询功能
- 支持二进制数据及大型对象
- 可以根据数据的特点替代 RDBMS,成为独立的数据库。或者配合 RDBMS,存储特定的数
五【熟悉】Redis 简介
1,Redis 简介
- Redis 是一个开源的 key-value 存储系统。
-
端口 6379
3,Redis 数据结构的多样性
4,Redis 的应用场景
1、数据缓存(提高访问性能)
查询概率》》 增删改的概率
将一些数据在短时间之内不会发生变化,而且它们还要被频繁访问,为了提高用户的请求速度和降低网站的负载,降低数据库的读写次数,就把这些数据放到缓存中。
2、会话缓存
session cache,主要适用于 session 共享 (string 类型)
3、排行榜/计数器
(NGINX+lua+redis 计数器进行 IP 自动封禁)(zset)
4、消息队列
(构建实时消息系统,聊天,群聊) (list)
5· 粉丝 (set)
- 用于存储对象 (hash)
面试题
string :会话信息
list:消息
set:粉丝 共同好友
zset :排行榜
hash: 存储对象
六【掌握】Redis 的安装及启动停止
1.下载 redis的压缩包
yum -y install wget
a.安装的时候先安装 redis 所依赖的环境
yum -y install gcc-c++
2.开始解压 redis
tar -zxvf redis-5.0.14.tar.gz
3.进入redis 文件夹
cd redis-5.0.14
4.编译:
make
5.安装:
make PREFIX=/usr/redis install
6.启动redis
找到redis-server
cd /usr/redis/bin
./redis-server
使用客户端连接redis
- 修改redis.conf 文件
bind 0.0.0.0 所有的都可以连接
protected-mode no 关闭保护模式
Requirepass yyl 设置密码
- 配置开机启动:
vim /lib/systend/dydtem/redis.service
- 连接
操作redis
使用redis-cli 连接redis
七.Key
默认 16 个数据库,类似数组下标从 0 开始,初始默认使用 0 号库
dbsize 查看当前数据库的 key 的数量
flushdb 清空当前库
flushall 通杀全部库
keys * 获取当前库中的所有key
select 0 选择第一个库
move key 1 将当前的数据库 key 移动到某个数据库,目标库有,则不能移动
randomkey 从当前数据库中随机返回
type key 类型
del key 删除 key
exists key 判断是否存在 key
expire key 10 为给定的key设置过期时间 单位是秒
pexpire key 1000 给定的key设置过期时间 单位:毫秒
persist key 删除key的过期时间
ttl key 查看还有多少秒过期,-1 表示永不过期,-2 表示已过期
八 常见的数据类型
string类型
1简介
String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M
2常用命令
设值取值
set key value
get key
- *NX:当数据库中key不存在时,可以将key-value添加数据库
- *XX:当数据库中key存在时,可以将key-value添加数据库,与NX参数互斥
- *EX:key的超时秒数
- *PX:key的超时毫秒数
批量操作
- mset key1 key2 批量设置key
- msetnx <key1><value1><key2><value2> ..... 同时设置一个或多个 key-value 对,当且 仅当所有给定 key 都不存在 如果有一个存在就会不成功。
- 注意:有一个失败则都失败
- mget key1 key2 批量获取
- setrange <key><起始位置index><value> #从 index 开始替换 value
- getrange <key><起始位置><结束位置>
- getrange name 0 -1 #字符串分段 0 -1 是全部 0 -2 ==n-1
- append <key><value> #将给定的<value> 追加到原值的末尾
- strlen <key> #获得值的长度
递增递减
- incr <key> 将 key 中储存的数字值增1 只能对数字值操作,如果为空,新增值为1
- 示例:incr age
- decr <key> 将 key 中储存的数字值减1 只能对数字值操作,如果为空,新增值为-1
- 示例:decr age #递减
- incrby / decrby <key><步长>将 key 中储存的数字值增减。自定义步长。
- 示例: incrby age 10 递增
- 示例: decrby age 10 递减