Redis简介
基本概念
MySQL与Redis的区别
- MySQL:属于关系型数据库的一种,存储数据的时候使用的是表结构。
- Redis:属于非关系型数据库中的一种,存储数据的时候,使用键值对的形式。
什么是NoSQL?
在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是主页访问量瞬间较大的时候,单一使用数据库来保存数据的系统会因为面向磁盘,而存在严重的性能弊端,一瞬间成千上万的请求到来,需要系统在极短的时间内完成,这个时候往往不是数据库能够承受的,极其容易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题。
为了克服上述的问题,项目通常会引入NoSQL技术,这是一种基于内存的数据库,并且提供一定的持久化功能。
NoSQL,指的是。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。对NoSQL最普遍的解释是"非关联型的",强调Key-Value Stores和文档数据库的优点,而不是单纯的反对RDBMS。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
NoSQL的分类
- 基于键值对 key-value类型:Redis,memcached
- 列存储数据库 Column-oriented Graph:HBase
- 图形数据库 Graphs based:Neo4j
- 文档型数据库: MongoDB
- MongoDB是一个基于分布式文件存储的数据库,主要用来处理大量的文档
Redis是什么?
Redis取自Remote Dictionary Service中的字母拼写而来,Remote Dictionary Service中文意为远程字典服务器。
Redis 是一个开源(BSD许可)的,C语言编写的,高性能的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一。
相关网站:
- redis中文官网:http://www.redis.cn/
- redis英文官网:https://redis.io/
Redis的概念
远程字典服务器,使用C语言进行编程的,开源的。可以用作数据库、缓存和消息中间件。基于内存并且支持持久化。
redis中文官网:http://www.redis.com.cn/ redis英文官网:https://redis.io/
Redis的特性
Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。这与我们熟知的在一个关系数据库实例中可以创建多个数据库类似,所以可以将其中的每个字典都理解成一个独立的数据库。
每个数据库对外都是一个从0开始的递增数字命名,Redis默认支持(可以通过配置文件支持更多,无上限),可以通过配置databases来修改这一数字。
Redis与其他 key-value 缓存产品有以下三个特点:
- 支持持久化
- 支持丰富的数据类型, 包括:string、list、set、sort set、hash
- 支持数据的备份,也就是主从复制
Redis的优点
- 性能极高:每秒可以读11w次、每秒可以写8.1w次
- 丰富的数据类型:Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子:Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性:Redis还支持publish/subscribe, 通知, key过期等等特性。
安装Redis
https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/
redis官网上下载最新安装包到家目录
bashwget https://download.redis.io/redis-stable.tar.gz
解压压缩包,然后会在家目录下面生成一个对应文件夹
bashtar -xaf redis-stable.tar.gz
进入到解压后的目录redis-x.x.x,然后执行make
bashcd redis-stable # 编译需要安装pkg-config sudo apt install pkg-config make sudo make install
进入utils目录接着进入到install_server.sh文件,注释掉下面的内容(大约在77行,有8行,shell的注释是以#进行的注释)
bash76 #bail if this system is managed by systemd 77 #_pid_1_exe="$(readlink -f /proc/1/exe)" 78 #if [ "${_pid_1_exe##*/}" = systemd ] 79 #then 80 # echo "This systems seems to use systemd." 81 # echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!" 82 # exit 1 83 #fi 84 #unset _pid_1_exe
注释之后,保存退出并且执行下面命令
bash$ sudo ./install_server.sh Welcome to the redis service installer This script will help you easily set up a running redis server Please select the redis port for this instance: [6379] Selecting default: 6379 Please select the redis config file name [/etc/redis/6379.conf] Selected default - /etc/redis/6379.conf Please select the redis log file name [/var/log/redis_6379.log] Selected default - /var/log/redis_6379.log Please select the data directory for this instance [/var/lib/redis/6379] Selected default - /var/lib/redis/6379 Please select the redis executable path [/usr/local/bin/redis-server] Selected config: Port : 6379 Config file : /etc/redis/6379.conf Log file : /var/log/redis_6379.log Data dir : /var/lib/redis/6379 Executable : /usr/local/bin/redis-server Cli Executable : /usr/local/bin/redis-cli Is this ok? Then press ENTER to go on or Ctrl-C to abort. Copied /tmp/6379.conf => /etc/init.d/redis_6379 Installing service... Success! Starting Redis server... Installation successful! $
检查redis-cli安装成功后的命令行
bash$ redis-cli 127.0.0.1:6379> 127.0.0.1:6379> ping PONG 127.0.0.1:6379> exit $
基本命令
单进程模型来处理客户端的请求,对读写等事件的响应通过对epoll的包装来做到。
默认16个数据库,编号0-15,可以通过select + num切换数据库
# 数据库的切换select
select + index
# 查看当前数据库下的key值,问号表示占位符
keys * keys k?
# 把key从当前库移动到目标库
Move key [num]
# 判断key是否存在
Exists key
# 查看key的类型
Type key
# 删除某个key
del key
# 查看当前数据库的大小
dbsize
# 清空当前数据库
flushbd
# 清空所有的数据库
flushall
# 设置过期时间
expire key seconds
# 通过ttl查看剩余时间
ttl key #-1代表永不过期 -2代表已经过期
配置文件
1、配置文件的路径
/etc/redis下面有个6379.conf文件
2、关闭redis服务器
在redis客户端执行shutdown命令;
也可以使用kill -9杀死进程;
3、启动redis服务器
sudo redis-server /etc/redis/6379.conf
sudo redis-server + 配置文件的路径
Units
配置大小单位,定义了一些基本度量单位,只支持bytes,不支持bit,对大小写不敏感。
Network
bind 127.0.0.1 # 绑定的ip
protected-mode yes # 保护模式
port 6379 # 端口
General
daemonize yes # 以守护进程方式运行
loglevel notice # 日志级别
database 16 # 数据库数量
snapshoting
保存快照
save 900 1
# 在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
save 300 10
# 在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
save 60 10000
# 在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。
快照文件名
dbfilename dump.rdb
保存目录名
dir /var/lib/redis/6379
APPEND ONLY MODE
appendonly yes # 是否使用AOF持久化方式。默认不使用
appendfilename “appendonly6381.aof“ #持久化的AOF文件名
在Redis的配置文件中存在三种AOF同步方式,它们分别是:
appendfsync always #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略。
appendfsync no #从不同步。高效但是数据不会被持久化。