关系型数据库(mysql)的缺点是:
海量用户、高并发
总结:访问人数巨增的情况下,容易崩服务器,造成访问异常
优点:免费
解决思路:Nosql
降低磁盘IO次数,越低越好 —— 内存存储
去除数据间关系,越简单越好 —— 不存储关系,仅存储数据
mysql两表之间是相互关系的 如图:
它们最终的数据是存在硬盘的文件上面
nosql系列:redis
数据库之间没有关系
数据存在内存上面
什么时候使用:热门数据、不经常改变的数据
因为有缓存,所以有些数据访问第一次有点慢,第二次就快很多
而这个缓存就是Redis
如果数据在redis查不到,就说明是第一次查询,就走直接查向数据库
Redis 简介
Nosql
NoSQL:即 Not-Only SQL( 泛指非关系型的数据库),作为关系型数据库的补充。 作用:应对基于海量用户和海量数据前提下的数据处理问题。
特征: 可扩容,可伸缩
大数据量下高性能
灵活的数据模型
高可用
常见 Nosql 数据库:
Redis
HBase
MongoDB
1. 商品基本信息 MySQL
名称
价格
厂商
2.商品附加信息 MongoDB
描述
详情
评论
3.图片信息 分布式文件系统
FastDFS集群
4.搜索关键字
ES、
Lucene、
solr
5.热点信息 Redis、memcache、tair
高频
波段性
所有的数据都是分开存放的,不然mysql受不了
Redis
概念:Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。
特征:
1.数据间没有必然的关联关系
2.内部采用单线程机制进行工作
3.高性能。官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是81000次/s。
4.多数据类型支持
字符串类型
列表类型
Hash类型
集合类型
有序集合类型
5.支持持久化,可以进行数据灾难恢复
Redis下载与安装
分两宗版本:
Linux版(适用于企业开发)
Windows版本(适合零基础开发)Tags · microsoftarchive/redis · GitHub
win-3.2.100版本下载
下载打开后查看文件
redis.windows-service.conf
redis.windows.conf
配置文件
Redis on Windows Release Notes.docx
Redis on Windows.docx
Windows Service Documentation.docx
redis文档
redis-server.exe //服务端(服务器) 主要用
redis-cli.exe //客户端 主要用
redis-check-aof.exe //文件修复的和持久化的
redis-benchmark.exe //性能测试
可执行文件(后缀带exe),双击即可使用
先启动服务,再启动客户
端口号:6379
pid:随机生成
命令行模式工具使用思考
功能新命令
清除屏幕信息 clear
帮助信息查询
退出指令 quit
添加信息(修改):set key value 如:set name lxyk
获取信息:get name 拿到 ”lxyk”
如果没有这个key就会返回一个空(nil)
帮助: help (命令忘了会提示)
删除信息: del key
添加/修改多个数据:mset key1 value1 key2 value2
获取多个数据:mget key1 key2
获取数据字符个数(字符串长度):strlen key
追加信息到原始信息后部(如果原始信息存在就追加,否者新建):append key value
数据储存类型介绍
sting Sting (类似)
hash HashMap
list LinkedList
set HashSet
sorted_set TreeSet
数据存储格式
myhash:就是键值对中存键值对,其他的都是链表
redis 自身是一个 Map,其中所有的数据都是采用 key : value 的形式存储 数据类型指的是存储的数据的类型,也就是 value 部分的类型,key 部分永远都是字符串
hash类型
新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息 需要的存储结构:一个存储空间保存多个键值对数据 hash类型:底层使用哈希表结构实现数据存储
hash 类型数据的基本操作
添加/修改数据:
hset key field value //多了一个field
如:hset users name gry
获取数据:
hget key field //如:hget users name
同时拿到 :hgetall key //hgetall users
删除:
hdel key field1
获取哈希表中是否存在指定的字段
hexists key field
list 类型数据基本操作
数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分 需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序 list类型:保存多个数据,底层使用双向链表存储结构实现
底层就是双向链表 数据结构
顺序表:相当于数组
双向链表的结构就是一去一回
list 类型数据基本操作
添加/修改数据
lpush key value1 [value2] ……
rpush key value1 [value2] ……
分为左进出和右进出
如:左进出
lpush list3 a
lpush list3 b
lpush list3 c
查询(获取数据)的时候可以根据下标去查:(-1:代表最后一个)
lrange list3 0 -1
右进出
rpush list4 a
rpush list4 b
rpush list4 c
查询(获取数据):
lrange list4 0 -1
获取并移除数据:
lpop list3
(如:list其中有三个数据,输入一次key删除第一个坐标)
set
新的存储需求:存储大量的数据,在查询方面提供更高的效率
需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询
set类型:与hash存储结构完全相同,并且值是不允许重复的
set 类型数据的基本操作
添加数据
sadd key member1 [member2]
获取全部数据
smembers key
删除数据
srem key member1 [member2]
Key调用操作
key常用指令
key 基本操作
删除指定key
del key
获取所有的key
keys *
获取key的类型
type key
也可以删除多个
Jedis简介
编程语言与redis
Jedis用于Java语言连接redis服务,并提供对应的操作API
客户端连接redis
操作步骤:
1.导入jar包
搜索jedis
2.创建连接
Jedis jedis = new Jedis("127.0.0.1",6379);
3.数据操作
jedis.set("name","lxyk");
jedis.set("age","18");
System.out.println(jedis.get("name")); //不在这里获取也会操作成功,但java的控制台不显示
System.out.println(jedis.get("age"));
4.关闭连接
jedis.close();
注意:服务器和用户窗口不能关