Bingo学习--redis
1.NoSQL数据库简介
1.nosql数据库概念
nosql = not only sql, 不仅仅是sql, 泛指非关系型数据库, nosql不依赖业务逻辑方式存储, 而以简单的key-value模式存储, 因为大大的增加了数据库的扩展能力
并不遵循sql标准
不支持acid
远超于sql的性能
2.nosql应用场景
对数据高并发的读写
海量数据的读写
对数据高可扩展性的
3.nosql不适用场景
需要事物支持
基于sql的结构化查询存储, 处理复杂的关系, 需要及时查询
(用不着sql或者用了sql也不行的情况, 请考虑用nosql)
4.Memcached
很早出现的nosql数据库
数据都存在内存中, 一般不持久化
支持简单的key-value模式, 支持模式单一(只支持字符串)
一般是作为缓存数据库辅助持久化的数据库库
5.Redis
几乎覆盖了Memcached的绝大部分功能
数据都存在内存中, 支持持久化, 主要用作数据备份恢复
出了支持简单的key-value模式, 还支持多种数据库结构的存储, 比如list, set, hash, zset等
一般是作为缓存数据库辅助持久化的数据库
6.MongoDB
高性能, 开源, 模式自由(schema free)的文档型数据库
数据都在内存中, 如果内存不足, 把不常用的数据保存到硬盘
虽然是key-value模式, 但是对value(尤其是json)提供了丰富的查询功能
支持二进制数据及大型对象
可以根据数据的特点代替RDBMS(关系型数据库管理系统), 成为独立的数据库, 或者配合RDBMS, 存储特定的数据
2.Redis6概述和安装
Redis是一个开源的key-value存储系统
Redis支持多种数据结构存储, string-字符串, list-链表, set-集合, zset-有序集合, hash-哈希类型
Redis的数据类型都支持 push/pop, add/remove 及取交集并集和差集, 以及更丰富的操作, 而且这些操作都是原子性的
Redis支持各种不同方式的排序
Redis为了保证效率, 数据都是缓存在内存中
Redis会周期性的把更新的数写入磁盘或者把修改操作写入追加的记录文件
Redis实现了master-slave(主从)同步
1.配合关系型数据库做高速缓存
高频次、热门访问的数据, 降低数据库IO
分布式架构, 做session共享
2.centos安装redis
1)下载地址: https://redis.io
2)上传redis安装包到linux
3)安装C语言编译环境
yum install centos-release-scl scl-utils-build
yum install -y devtoolset-8-toolchain
scl enable devtoolset-8 bash
PS: 上面3个命令依次执行, 或者直接安装gcc: yum install -y gcc
测试gcc版本: gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
4)解压
tar -zxvf redis-6.2.7.tar.gz
5)编译为C文件
cd redis-6.2.7
make
6)安装
make install
7)查看默认安装目录
cd /usr/local/bin/
ll
-rwxr-xr-x. 1 root root 4830112 Sep 3 19:57 redis-benchmark
lrwxrwxrwx. 1 root root 12 Sep 3 19:57 redis-check-aof -> redis-server
lrwxrwxrwx. 1 root root 12 Sep 3 19:57 redis-check-rdb -> redis-server
-rwxr-xr-x. 1 root root 5004224 Sep 3 19:57 redis-cli
lrwxrwxrwx. 1 root root 12 Sep 3 19:57 redis-sentinel -> redis-server
-rwxr-xr-x. 1 root root 9535952 Sep 3 19:57 redis-server
redis-benchmark: 性能测试工具
redis-check-aof: 修复有问题的AOF文件
redis-check-dump: 修复有问题的dump.rdb文件
redis-sentinel: redis集群使用
redis-server: redis服务启动命令
redis-cli: redis客户端, 操作入口
8)启动redis-前台启动
redis-server
9)启动redis-后台启动
修改redis.conf文件 /usr/local/src/redis/redis-6.2.7/redis.conf
cp redis.conf /usr/local/etc/ #复制配置文件到另一个目录
vim /usr/local/etc/redis.conf 修改为 daemonize yes #允许后台启动
redis-server /usr/local/etc/redis.conf #根据配置文件启动
查看redis运行情况
[root@localhost redis-6.2.7]# ps -ef | grep redis
root 6620 1 0 20:22 ? 00:00:00 redis-server 127.0.0.1:6379
root 6632 1921 0 20:23 pts/0 00:00:00 grep --color=auto redis
10)通过客户端链接redis
[root@localhost redis-6.2.7]# redis-cli
127.0.0.1:6379>
#查看联通状态
127.0.0.1:6379> ping
PONG
#关闭--通过客户端
127.0.0.1:6379> shutdown
not connected>
关闭--通过杀死redis进程
[root@localhost redis-6.2.7]# ps -ef|grep redis
root 6678 1 0 20:29 ? 00:00:00 redis-server 127.0.0.1:6379
root 6686 1921 0 20:29 pts/0 00:00:00 grep --color=auto redis
[root@localhost redis-6.2.7]# kill -9 6678
3.常用五大数据类型(操作命令查看地址: http://www.redis.cn/commands.html)
1.redis知识相关介绍
1)端口6379从何而来, Alessia Merz(女演员), Merz拼音九键位置是6379
2)默认16个数据库, 下标从0开始, 初始默认使用0号数据库
使用 select <dbid> 来切换数据库, 例如: select 8
127.0.0.1:6379> select 15
OK
3)统一密码管理, 所有库同样密码
4)查看当前库key的数量
127.0.0.1:6379[15]> dbsize
(integer) 0
5)清空库
flushdb: 清空当前库
flushall: 清空所有库
6)Redis使用单线程+多路IO复用技术
多路复用的指使用一个线程来检查多个文件描述的就绪状态, 如果有一个文件描述就绪则返回, 否则阻塞直到超时
得到就绪状态后进行真正的操作可以在一个线程里执行, 也可以启动线程执行(比如线程池)
举例: 黄牛买票: 1,2,3人找黄牛买票去不同的地方, 黄牛问火车站售票员, 这三个行程是否邮票, 有则通知对应人员去窗口购票, 没有则购票人等消息
多路复用: 黄牛一个人去窗口, 一个人问了三张车票信息
2.Redis键(key)
1)keys * 查看当前数据库所有key (匹配: keys *1)
2)exists key 判断某个key是否存在, 存在返回1, 不存在返回0
3)type key 查看key是什么类型
4)del key 删除指定key的数据
5)unlink key 根据value选择非阻塞删除
仅将keys从keyspace元数据中删除, 真正的删除会在后续异步操作
6)expire key 10 10秒钟: 为key设置过期时间
7)ttl key 查看还有多少秒过期, -1 永不过期, -2 已过期
3.String类型
1)简介
String是redis最基本的类型
string类型是二进制安全的, 意味着redis的string可以包含任何数据, 如jpg图片或者序列化对象
一个redis字符串value最大值是512M
2)常用命令
set <key> <value>
set key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL] [NX|XX] [GET]
EX seconds : key的超时秒数
PX milliseconds : key的超时毫秒数, 与EX互斥
NX : 当数据库中key不存在时添加
XX : 当数据库中key存在时添加, 与XX互斥
get <key> 查询key对应的值
append <key> <value> 将给定的value追加到原值末尾
strlen <key> 获取key对应value的长度
setnx <key> <value> 只有在key不存在时设置key对应的值
incr <key>
将key对应的数字值增1
只能对数字值操作, 如果为空, 新增值为1
127.0.0.1:6379> incr k2 #k2不存在
(integer) 1
127.0.0.1:6379> get k2
"1"
decr <key>
将key对应的数字值减1
只能对数字值操作, 如果为空, 新增值为-1
incrby / decrby <key> <步长> 将key对应的数字值增加 / 减去指定步长
incrby / decrby 操作保持原子性(redis中特有的名词)
原子性: 不会被线程调度机制所打断的操作
mset <key1> <value1> <key2> <value2>... 同时设置一个或多个值
mget <key1> <key2> <key3>... 同时取多个key对应的值
msetnx <key1> <value1> <key2> <value2>... 同时设置一个或多个值, 当且仅当所有给定的key都不存在时执行成功
getrange <key> <startIndex> <endIndex> 获取key对应的字符串进行截取
setrange <key> <index> <value> 获取key对应的字符串, 替换指定下标字符串为对应值
setex <key> <seconds> <value> 保存数据时设置过期时间
getset <key> <value> 设置新值的同时获取旧值
3)数据结构
String的数据结构为简单动态字符串(Simple Dynamic String, 缩写SDS), 是可以修改的字符串, 内部结构实现上类似于java的ArrayList, 采用与分配冗余空间的方式来减少内存的频繁分配
当字符串长度小于1M时, 扩容都是加倍现有空间, 如果超过1M, 扩容时只会多扩1M空间, 字符串最大占用空间为512M
4.Redis6配置文件详解
5.Redis6的发布和订阅
6.Redis6新数据类型
7.Jedis操作Redis6
8.Redis6与SpringBoot整合
9.Redis6的事物操作
10.Redis持久化之RDB
11.Redis6持久化之AOF
12.Redis6的主从复制
13.Redis6集群
14.Redis6应用问题解决
15.Redis6新功能