非关系型数据库Redis

时光怂恿深爱的人放手 提交于 2019-12-27 07:40:20

1.nosql

NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,它泛指非关系型的数据库。
关系型数据库:以关系(由行和列组成的二维表)模型为核心数据库. 有表的储存系统

RDBMS: mysql,oracle,SQLserver等
1.1分类

在这里插入图片描述

2.Redis(非关系型数据库)

(1)Redis 是一个高性能的 开源的、C语言写的Nosql(非关系型数据库),数据保存可以存储在内存中或者磁盘中。

(2)Redis 是以key-value形式存储,和传统的关系型数据库不一样。不一定遵循传统数据库的一些基本要求,比如说,不遵循sql标准,事务,表结构等等,redis严格上不是一种数据库,应该是一种数据结构化存储方法的集合。–数组 list set map …
数据结构:数组,list,set,map等
redis提供了一下操作方法,我们使用这些方法就可以对存入字符串,组织成各种类型数据库结构(string,list,set,map等).

小结:
(1) redis开源 高性能nosql数据库,数据可以存储在内存或磁盘上面
(2) Redis 主要key-value结构形式存储,redis底层支持各种类型的数据存储结构
包括 list set map string等

2.1特点(优势)
1.数据保存在内存,存取速度快,并发能力强
2.它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、 zset(sorted set --有序集合)和hash(哈希类型)。
3.redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库(如MySQL)起到很好的补充作用。
4.它提供了Java,C/C++,C#,PHP,JavaScript等客户端,使用很方便。
5.Redis支持集群(主从同步)。数据可以主服务器向任意数量从的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。
6.支持持久化,可以将数据保存在硬盘的文件中
7.支持订阅/发布(subscribe/publish)功能 QQ群

总结:

  1. 数据存储:存放在内存,还支持持久化.-存取速度快,并发能力强,数据安全性高
  2. 支持value类型
  3. 支持多个语言客户端
  4. 还支持集群(支持高并发,海量数据)

2.2 Mysql、Memcached和Redis的比较
在这里插入图片描述2.3 使用场景
2.3.1缓存
经常查询数据,放到读速度很快的空间(内存),以便下次访问减少时间。减轻数据库压力,减少访问时间.而redis就是存放在内存中的。
Hibernte(JPA) 二级缓存 – ehcache框架
2.3.2 计数器
网站通常需要统计注册用户数,网站总浏览次数等等
新浪微博转发数、点赞数
2.3.3 实时防攻击系统
暴力破解:使用工具不间断尝试各种密码进行登录。防:ip—>num,到达10次以后自动锁定IP,30分钟后解锁
2.3.4. 设定有效期的应用
设定一个数据,到一定的时间失效。 自动解锁,购物券
2.3.5. 自动去重应用
Uniq 操作,获取某段时间所有数据排重值 这个使用 Redis 的 set 数据结构最合适了,只需要不断地将数据往 set 中扔就行了,set 意为 集合,所以会自动排重。
2.3.6. 队列
构建队列系统 使用 list 可以构建队列系统,使用 sorted set 甚至可以构建有优先级的队列系统。
秒杀:可以把名额放到内存队列(redis),内存就能处理高并发访问。
2.3.7. 消息订阅系统
Pub/Sub 构建实时消息系统 Redis 的 Pub/Sub 系统可以构建实时的消息系统,比如很多用 Pub/Sub 构建的实时聊天系统 的例子。

3 使用redis–安装(掌握)

(1)安装

​ 直接解压文件夹

4 Redis的操作(重点练习掌握)

(1)基本操作 --string — 查阅api 百度

​ 对字符串操作

​ set key value

​ get key

​ mset /mget

​ incr 增加1个

​ decr 减少1次

​ incrBy key num ; 增加num个

		  	decrBy key num ; 减少num个

(2)对key的操作

​ keys * ; 查看所有的key

​ expire key seconds ; 对key设置过期时间

​ ttl key : 查看key 剩余时间

​ del key :删除key

​ flushall 清库 (0-15个)

​ flushdb 清当前库

​ select index ; 选择库

(3)对list操作

​ lpush(rpush) key value1/value2… 往list添加值

​ lpop(rpop) key 弹出一个值

​ lrange key start stop 搜索查询 lrange students 0 -1

​ lrem key count value 移出

​ lindex key index 查看索引对应的值

​ ltrim key start stop (对集合进行修剪)

(4)set操作

​ sadd key members 添加值

​ srem key member 删除值

​ smembers key 查看可以对应的值

(5)hash操作

​ hset key name value --设置key value

​ hget key name --通过key获取值

​ hmset key name1 key1 name2 key2 --批量设置

​ hmget key name1 name2 --批量获取

​ hkeys --获取所有的key

​ hvals --获取所有的value

​ hgetall --获取所有的key和value

以后使用比较多的结构:

​ string /list /map(hash)/set —常用

5 事务操作

弱事务: 如果只有一个成功就可以保存(没什么用) – 日志

强事务: 同生共死

6 设置密码

(1)在配置文件 的方式设置密码

​ redis.windows.conf --添加 requirepass 123456

(2)在启动的时候 redis-server.exe redis.windows.conf

(3)auth 123456

7通过java操作redis

​ 连接redis服务: new Jedist(ip,host,timeout)

​ 连接池操作redis: new JedisPool(config,ip,host,timeout,password)

(1)对字符串操作

​ 和上面命令操作一样的

​ (2)list操作

​ 存储 取值

​ (3)set操作

​ 存储 取值

​ (4)hash操作

​ 存储 取值

​ (5)排序 事务 --练习

8 redis 持久化

持久(持久层 dao层 mapper层): 就把数据保存到磁盘 这个过程就叫持久化

redis支持内存和磁盘存储

redis磁盘存储提供两种方案:

​ rdb方式 :

​ save 1 1 最快的保存方法 1s中 发生一次变化 – 如果保存数据 1s内完成 – 数据丢失 丢失1s数据

​ aof方式:

​ 开启appendOnly yes

​ 在操作的时候,把数据写到日志文件,在启动的时候,恢复日志文件 -->日志方式

9 redis的淘汰策略(理解) --搭建架构/服务(架构师)

lru : 最近最少使用 – 常用 (统计次数)

ttl : 将要过期中淘汰 --也可以 (统计时间)

random: 随机数据 --这个数据就没有那么重要 (随机)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!