Redis全程学习笔记(附带学习的视频教程)
学习的视频地址 https://www.bilibili.com/video/BV1S54y1R7SB?p=13&t=75 狂神说大佬
Nosql概述(读和写)
1一般数据库无法进行分析和处理,APP->DAL ->Mysql
1.数据量太大 ,一个机器放不下
2.数据索引(B+ Tree),一个机器存不下
3.访问量(读写混合),一个服务器受不了
2.缓存+Mysql+垂直切分(读写分离)
优化数据结构和索引 ->文件缓存(IO)->Memcached(缓存技术)
使用缓存来减轻压力
3.分库分表+水平拆分+MySQL集群
4.现在:
数据多样化,
为什么要用NoSQL
用户个人信息 社交网络 地理位置 用户自己产生的数据 用户日志增加
NoSQL=not only SQL
泛指非关系数据库
1.方便扩展(数据间没有关系)
2.大数据高性能(Redis每秒写8万次,读取11万次)
3.数据类型是多样性(不需要事先设计数据库)
4.传统RDBMS和NoSQL
RDBMS
-结构化数据
-SQL
-数据和关系存在单独的表中
-基础事务
Nosql
-不仅仅是数据
-没有固定的查询语言
-键值对存储 列存储
-最终一致性
-CAP定理和BASE
-高性能 高可用 高扩展
大数据时代的3V:主要是描述问题的
海量Volume
多样Variety
实时Velocity
大数据时代的3高:主要是对程序的要求
高并发
高可扩
高性能
阿里巴巴演进分析
Nosql 四大类
KV 键值对
新浪 radis
美团:Redis+Tair
阿里,百度云:Radis+memecache
文档型数据库
MongoDB: 分布式文件存储数据库,处理大量文档
列存储数据库
HBase
Redis入门
Redis 远程字典服务(C语言书写)支持常用语言接口
1.内存存储,持久
2.效率高,高速缓存
3.发布订阅系统
4.地图信息分析
$ wget http://download.redis.io/releases/redis-4.0.11.tar.gz
$ tar xzf redis-2.8.17.tar.gz
$ cd redis-2.8.17
$ make
make完后 redis-4.0.11目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下:
下面启动redis服务.
$ cd src
$ ./redis-server
注意这种方式启动redis 使用的是默认配置。也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动。
$ cd src
$ ./redis-server redis.conf
redis-benchmark 测试性能
#测试并发连接 100个并发连接 100000 请求
redis-benchmark -h localhost -p 6379 -c 100 -n 100000
打开Redis-server,使用ping测试连接,然后新的终端测试命令
所有请求49毫秒内处理完成
Redis基础知识
默认16个数据库,select 切换数据库 DBSIZE 数据大小 keys* 查看所有的key
select 切换数据库
DBSIZE 数据大小
keys* 查看所有的key
flushdb 清空当前数据库
FLUSHALL 清空全部数据库
EXISTS 判断当前的Key值是否存在
redis-srever kconfig/redis.conig
Redis 单线程,由于机器内存和网络限制。
1.高线程服务器不一定是多线程
redis 数据放在内存中,没有上下文切换
Redis 5大基本数据类型
1.String(字符串)
type key 查看key的类型
set
mest: 同时设置多个值
2.List
方便实现数组的左加和右加 队列和栈
LPOP RPOP 数组移除
- SET
Hash(哈希)
Map集合
Zset(有序集合)
地理位置
Hyperloglog
什么是基数
两个集合中不重复的元素
BItmap
事务
Redis 单条命令保持原子型,但是事务不保证原子性
Redis 事务本质:一组命令的集合,一个事务中所有命令都会被序列化 按照顺序一次性,顺序性 排他性 执行命令
redis事务
开启事务(mukti)
命令入队
执行事务(exec)
代码出错 所有命令都不会被执行
运行时异常 会运行正确的代码
!
锁
1.悲观锁
什么时候都会出问题,无论什么时候都加锁
2.乐观锁
认为什么时候都不会出问题
Jedis
Redis 官方推荐连接开发工具
导入jar包 运行
import redis.clients.jedis.Jedis;
public class TestRedis {
public static void main(String[] args) {
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("连接成功");
//设置 redis 字符串数据
jedis.set("runoobkey", "www.runoob.com");
// 获取存储的数据并输出
System.out.println("redis 存储的字符串为: "+ jedis.get("runoobkey"));
}
}
Redis.conf
Redis 持久化 RDB
Redis 内存型数据库,
备份自动生成
Redis 持久化 AOF
订阅
主从复制之复制原理
哨兵模式
Redis缓存穿透与雪崩