三大主流数据库之一 Redis数据库
Redis 是一个高性能的key-value 数据库。
1.Redis_NoSQL 和 Redis简介
1.1 目标
- 了解 NoSQL 概念
- 了解 Redis 概念
- 了解 Redis 的特点
1.2 NoSQL介绍
NoSQL:一类新出现的数据库(not only sql),它的特点:
不支持 SQL 语法
存储结构跟传统关系型数据库中的那种关系表完全不同,NoSQL中存储的数据都市 KV 形式
NoSQL 的世界中没有一种通用的语言,每种 NoSQL 数据库都有自己的 API 和语法,以及擅长的业务场景
NoSQL 中的产品种类相当多:
- Mongodb
- Redis
- Hbase hadoop
- Cassandra handoop
NoSQL 和 SQL 数据库的比较:
- 适用场景不同:SQL数据库适合用于关系特别复杂的数据查询场景,NoSQL反之
- “事务” 特性的支持:SQL 对事务的支持非常完善,而 NoSQL基本不支持事务
- 两者在不断地取长补短,呈现融合趋势
1.3 Redis简介
- Redis 是一个开源的使用 ANSI C 语言编写。支持网络,可基于内存亦可持久化的日志型 Key-Value数据库,并提供多种语言的 API 。从2010年3月15日起,Redis 的开发工作由 VMware 主持,从2013年5月开始,Redis 的开发由 Pivotal 赞助。
- Redis 是 NoSQL 技术阵营中的一员,它通过多种键值数据类型来适应不同场景下的存储需求,借助一些高层级的接口使用其可以胜任。如缓存,队列系统的不同角色。
1.4 Redis特性
- Redis 与其他 Key-Value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis 不仅仅支持简单的 Key-Value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。
- Redis 支持数据的备份,即 master-slave 模式的数据备份。
1.5 Redis优势
- 性能极高 —— Redis 能读的速度是 110000 次/S,写的速度是 81000次/S。
- 丰富的数据类型 —— Redis 支持二进制案例的 Strings,Lists,Hashes,Sets 及 Ordered Sets 数据类型操作。
- 原子 —— Redis 的所有操作都是原子性的,同时 Redis 还支持对几个操作全并后的原子性执行。
- 丰富的特性 —— Redis 还支持 publish/subscribe,通知,key 过期等等特性。
1.6 Redis应用场景
- 用来做缓存(echache/memcached) —— Redis的所有数据是放在内存中的(内存数据库)
- 可以在某些特定应用场景下替代传统数据库 —— 比如社交类的应用
- 在一些大型系统中,巧妙的实现一些特定的功能:session 共享,购物车
- 只要你有丰富的想象力,Redis 可以给你无限的惊喜
推荐阅读
2. Redis安装
2.1 目标
- 了解 Redis 环境搭建
2.2 下载
Redis 稳定版本是 3.2 版本
最新稳定版下载链接: 戳我
STEP1:下载
wget http://download.redis.io/releases/redis-3.2.8.tar.gz
- STEP2:解压
cd Download # 进入下载目录
tar --help # 查看解压命令,解释为:Extract all files from archive.tar.
tar -zxvf(我这里是 -xf) redis-3.2.8.tar.gz
- STEP3:复制,放到 usr/local 目录下
sudo mv ./redis-3.2.8 /usr/local/redis/
- STEP4:进入 Redis 目录
cd /usr/local/redis/
- STEP5:生成
sudo make
- STEP6:测试,这段时间运行时间会较长
sudo make test
- STEP7:安装,将 Redis 的命令安装到 /usr/local/bin/ 目录
sudo make install
- STEP8:安装完成后,我们进入目录 /usr/local/bin/ 中查看
cd /usr/local/bin
ls -all
redis-server redis服务器
redis-cli redis命令行客户端
redis-benchmark redis性能测试工具
redis-check-aof AOF文件修复工具
redis-check-rdb RDB文件检索工具
- STEP9:配置文件,移动到 /etc/ 目录下
- 配置文件目录为 /usr/local/redis/redis.conf
sudo cp /usr/local/redis/redis.conf /etc/redis/ # /etc 下无redis 目录,自行创建
3. Redis配置
3.1 目标
- 了解 Redis 的配置
3. 2 查看配置
- Redis 的配置信息在 /etc/redis/redis.conf 下
- 查看
sudo vi /etc/redis/redis.conf
3.3 核心配置选项
- 绑定IP:如果需要远程访问,可将此行注释,或绑定一个真实IP
bind 127.0.0.1
- 端口,默认为 6379
port 6379
- 是否以守护进程运行
- 如果以守护进程运行,则不会在命令行阻塞,类似与服务
- 如果以非守护进程运行,则当前终端被阻塞
- 设置为 yes 表示守护进程,设置为 no 表示非守护进程
- 推荐设置为 yes
daemonize yes
- 数据文件
dbfilename dump.rdb
- 数据文件存储路径
dir /var/lib/redis
- 日志文件
logfile /var/log/redis/redis-server.log
- 数据库,默认有16个
database 16
- 主从复制,类似与双机备份
slaveof
3.4 参考信息
4.Redis启动服务端和客户端
4.1 目标
- 了解 Redis 服务器端和客户端的命令
4.2 服务器端
- 服务器端的命令为 redis-server
- 可以使用 help 查看帮助文档
redis-server --help
- 推荐使用服务的方式管理 redis 服务
- 启动
sudo service redis start
- 停止
sudo service redis stop
重启 sudo service redis restart
个人习惯
跟着教程安装的,用下面的命令启动
ps -ef|grep redis # 查看redis服务器进程
sudo kill [redis服务器的PID] # 杀死redis服务器
sudo redis-server /etc/redis/redis.conf # 指定加载的配置文件
4.3 客户端
- 客户端的命令为 redis-cli
- 可以使用 help 查看帮助文档
redis-cli --help
- 连接redis
redis-cli
- 切换数据库
- 数据库没有名称,默认有16个,通过0-15来标识,连接 redis 默认选择第一个数据库
select n
5. 数据操作
5.1 学习目标
- 了解 Redis 存储数据结构
5.2 数据结构
Redis 是 Key-Value 的数据结构,每条数据都是一个键值对
键的类型是字符串
注意:键不能重复
值的类型分为五种:
- 字符串 string
- 哈希 hash
- 列表 list
- 集合 set
- 有序集合 zset
5.3 数据操作行为
- 保存
- 修改
- 获取
- 删除
5.3.1 string
学习目标
- 掌握 string 类型
string类型
- 字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如 JPEG 图像数据或 Json 对象描述信息等。在 Redis 中字符串类型的 Value 最多可以容纳的数据长度是:512M。
保存
如果设置的键不存在则为添加,如果设置的键已经存在则修改
- 设置键值
set key value
- 例1:设置键为 name 值为 itcast 的数据
set name itcast
- 设置键值及过期时间,以秒为单位
setex key seconds value
- 例2:设置键为 aa 值为 aa 过期时间为 3秒的数据
setex aa 3 aa
- 设置多个键值
mset key1 value1 key2 value2
- 例3:设置键为 ‘a1’ 值为 ‘python’,键为 ‘a2’ 值为 ‘java’,键为 ‘a3’ 值为 ‘c’
mset a1 python a2 java a3 c
- 追加值
append key value
- 例4:向键为 a1 中追加值 ‘haha’
append a1 haha
获取
- 获取:根据键获取值,如果不存在此键则返回nil
get key
- 例5:获取键 ‘name’ 的值
get name
- 根据多个键获取多个值
mget key1 key2....
- 例6:获取键 a1 a2 a3 的值
mget a1 a2 a2
5.3.2 键命令
学习目标
- 掌握键命令
键命令
- 查找键,参数支持正则表达式、
keys pattern
- 例1:查看所有键
keys *
- 例2:查看名称中包含 a 的键
keys a*
- 判断键是否存在,如果存在返回1,不存在返回0
exists key1
- 例3:判断键 a1 是否存在
exists a1
- 查看键对应的 value 的类型
type key
- 例4:查看键 a1 的值类型,为 redis 支持的五种类型中的一种
type a1
- 删除键对应的值
del key1 key2....
- 例5:删除键 a2 a3
del a2 a3
- 设置过期时间,以秒为单位
- 如果没有指定过期时间则一直存在,直到使用 DEL 移除
expire key seconds
- 例6:设置键 a1 的过期时间为3秒
expire a1 3
- 查看有效时间,以秒为单位
ttl key
- 例7:查看键 bb 的有效时间
ttl bb