Redis笔记(一)
redis:
1.什么是缓存?
mybatis一级缓存和二级缓存
mybatis的一级缓存存在哪?
SqlSession,就不会再走数据库
什么情况下一级缓存会失效?
当被更新,删除的时候sqlsession结束,也就是最终一级缓存失效
二级缓存存在哪?
mapper中的命名空间中(namespace),namespace在内存中(tomcat服务器的内存中)
当tomcat服务器重启/停止就会失效
无论是一级缓存还是二级缓存都不会永远持久化数据在硬盘中
mybatis缓存使用率就会很低,而且使用范围很窄(只能使用到对数据库的增删改查)
当拥有10亿条数据的时候
user表中10亿条数据
select * from user
mybatis无法做到大批量数据的查询,查询都无法做到,数据也绝对不会进入到缓存中
2.什么数据会被存入到缓存中?
2.1.经常用到的数据
2.2.不会经常修改的数据
身份证号,性别,名字,省市区,国家名称,组织机构...
把经常用到并且不会经常发生修改的数据存入到数据库某张表中叫做字典表
商品名称,商品类目....
3.什么是redis
称之为缓存,是一个数据库,非关系型数据库
关系型数据库:
mysql
oracle
表和表之间产生关联,数据和数据之间也可以产生关联,称之为关系型数据库
非关系型数据库:
NOSQL
没有sql的数据库,数据和数据之间是独立存在的,没有关系,也没有表的概念
Redis:键值对对应的数据库(数据格式以key和value对应,json,redis中存的就是json格式的数据)
{key:value, key:value}
key:[{key, value}, {key, value}]
面试题:
redis中的数据类型都有什么?
5种
key的类型永远是String
value的类型是可以改变
String(使用最多的就是String类型)
Hash
List
新版本支持Set:是无序,并且数据唯一(不会重复)(数据不能重复)
zSet:是有序,并且数据唯一(数据的标识唯一(索引是唯一的)),数据可以重复
老版本依然是Map
(homework:把所有的类型全部查一遍,弄明白,周一随机问)
MongoDB:文档型数据库
HBase:列数据库
所有的NOSQL数据库都在内存中做计算,数据会永久的保存在硬盘中
当redis启动后,redis会自动向硬盘中加载数据,把这些数据加载到内存中,等待客户端进行查询数据,客户端其实是从内存中把数据获取到,所以效率会非常快!应用场景一般情况下只能应用缓存!
redis是以集群的形式存在,在官方文档中说明,如果需要配置redis缓存库,最少需要六台(三主三从)
4.redis的缺点:
4.1.redis必须以集群的形式的存在(6台),占用的资源就非常多!
4.2.主从之间需要数据的同步
master-->10万条数据
follower-->10万条数据
硬盘占用也非常大
4.3.redis是在内存中所运算(10万条数据缓存信息),就会占用非常大的内存
4.4.因为最终因为redis加载机制问题,硬盘和内存需要进行交互,会占用非常大的CPU
5.linux配置redis集群
需要6台服务器(三主三从)
今天使用一台服务器模拟六台
根据端口号的不同进行模拟
5.1.从官网下载redis5.0.5
5.2.使用xftp工具上传linux服务器上
5.3.解压redis的压缩包
tar -zxvf xxxx
5.4.编译redis
进入redis的目录
make && make install
redis不是用Java写的,redis是用C语言写的
看到以下信息说明编译成功
INSTALL install
INSTALL install
INSTALL install
INSTALL install
INSTALL install
make[1]: Leaving directory `/home/apps/redis-5.0.5/src'
5.5.在redis的目录中创建redis_cluster文件夹
mkdir redis_cluster
5.6.在redis_cluster中分别创建端口号的文件夹(6380-6385,redis的默认端口号为6379)
mkdir 6380...6385
5.7.在6380中创建文件redis.conf
touch redis.conf
添加以下内容:
#端口号
port 6380
#默认ip为127.0.0.1,需要改为其他节点机器可访问的ip,否则创建集群时无法访问对应的端口,无法创建集群
bind 192.168.127.139
#redis后台运行
daemonize yes
#pidfile文件对应6380,6381,6382...
pidfile /var/run/redis_6380.pid
#开启集群,把注释#去掉
cluster-enabled yes
#集群的配置,配置文件首次启动自动生成 6380,6381,6382
cluster-config-file nodes_6380.conf
#请求超时,默认15秒,可自行设置
cluster-node-timeout 10100
#aof日志开启,有需要就开启,它会每次写操作都记录一条日志
appendonly yes
需要进行修改:
port 6380
bind 本机的ip地址
pidfile /var/run/redis_6380.pid(根据端口号修改)
cluster-config-file nodes_6380.conf(根据端口号修改)
5.8.分别向6381-6385copy一份
cp -r redis.conf ../6381
5.9.分别根据5.7这一步的配置进行修改
5.10.启动redis的集群
一定要在src目录下启动,在其他的地方无法启动
./redis-server ../redis_cluster/6380/redis.conf
./redis-server ../redis_cluster/6381/redis.conf
./redis-server ../redis_cluster/6382/redis.conf
./redis-server ../redis_cluster/6383/redis.conf
./redis-server ../redis_cluster/6384/redis.conf
./redis-server ../redis_cluster/6385/redis.conf
看到以下信息说明启动成功:
7964:C 23 Aug 2019 09:51:54.935 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
7964:C 23 Aug 2019 09:51:54.935 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=7964, just started
7964:C 23 Aug 2019 09:51:54.935 # Configuration loaded
5.11.检测redis集群是否启动成功
ps -ef | grep redis
看到以下信息说明启动成功:
root 7940 1 0 09:51 ? 00:00:00 ./redis-server 192.168.23.145:6380 [cluster]
root 7945 1 0 09:51 ? 00:00:00 ./redis-server 192.168.23.145:6381 [cluster]
root 7950 1 0 09:51 ? 00:00:00 ./redis-server 192.168.23.145:6382 [cluster]
root 7955 1 0 09:51 ? 00:00:00 ./redis-server 192.168.23.145:6383 [cluster]
root 7960 1 0 09:51 ? 00:00:00 ./redis-server 192.168.23.145:6384 [cluster]
root 7965 1 0 09:51 ? 00:00:00 ./redis-server 192.168.23.145:6385 [cluster]
5.12.创建redis的缓存库
因为redis最终是以数据库的形式的存在,原理和mysql一样,集群创建成功只能说明安装redis成功了,但是最终redis中并没有自带的缓存库,需要自己手动创建
!!!!还需要在redis的src中进行
!!!当第一次运行的话,才需要创建数据库,以后的每一次运行都不再需要了,直接启动集群即可!!!
redis-cli --cluster create 192.168.23.138:6380 192.168.23.138:6381 192.168.23.138:6382 192.168.23.138:6383 192.168.23.138:6384 192.168.23.138:6385 --cluster-replicas 1
!!!!需要自己手动输入yes,如果超时了还没有输入,则会自动退出,需要再次创建!!!!!!
看到以下信息说明创建redis缓存库成功:
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
5.13.进入redis的缓存中
也必须要在src目录下进行
./redis-cli -h 192.168.23.138 -c -p 6380
5.14.停止redis
也必须要在src目录下进行
./redis-cli -h 192.168.23.145 -p 6380 shutdown
./redis-cli -h 192.168.23.145 -p 6381 shutdown
./redis-cli -h 192.168.23.145 -p 6382 shutdown
./redis-cli -h 192.168.23.145 -p 6383 shutdown
./redis-cli -h 192.168.23.145 -p 6384 shutdown
./redis-cli -h 192.168.23.145 -p 6385 shutdown
5.15.全部关闭
pkill redis(不推荐使用!!!)
6.强调
在redis中是没有修改操作的
只有增删查
如果需要修改的话,需要进行覆盖
新增:
set key(String) value(任意改变(5种))-->返回值是"OK"
查询:
get key(String) --> value(存入的类型)
删除:
del key(String) -->返回值是Integer(受影响的行数)
设置缓存的失效时间:
expire key(String) seconds(秒,Long/Integer)-->返回值是Integer(受影响的行数)
Redis笔记(一)的更多相关文章
- 【Redis笔记(四)】 Redis数据结构 - list链表
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/50573605 经过前面的介绍,我们学习了Redis中string字符串.hash ...
- redis笔记之一
NoSQL简介 全称是Not Only SQL,泛指菲关系型数据库,它是通过键值对存储数据并且将数据存储在内存中.而像mysql,sql server这些通过关系表存数据的就叫关系型数据库 为什么需要 ...
- Redis 笔记 01:入门篇
Redis 笔记 01:入门篇 ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
- redis笔记总结之redis介绍
一.Redis介绍: redis的发展历史简单的理解为因为使用类似MySql这类关系型数据库不方便进而开发的开源的.轻量级的.非关系型的,直到现在一直不断完善的一款NoSql数据库.具体的介绍大家可以 ...
- Redis笔记(1)数据结构与对象
1.前言 此系列博客记录redis设计与实现一书的笔记,提取书本中的知识点,省略相关说明,方便查阅. 2.基本数据结构 2.1 简单动态字符串SDS(simple dynamic string) 结构 ...
- 2020ubuntu1804server编译安装redis笔记(一)及报make test错误解决办法
redis的大名我想大家都不陌生,今天在ubuntu server上进行编译安装,虽然apt也可以安装,但作为内存数据库,redis又是c开发的,编译安装,对机器的适应和性能更好. 安装笔记如下 第1 ...
- 2020ubuntu1804server编译安装redis笔记(三)启动服务和使用redis
第一篇笔记记录了ubuntu1804server编译安装redis5,接下来要配置redis5了 网址:https://www.cnblogs.com/qumogu/p/12435694.html 第 ...
- redis笔记补充
redis补充 这篇文章是redis入门笔记的补充. 1.info命令 用来显示服务的信息. info命令可以跟下面的选项: server: 关于 Redis 服务器的一些信息 clients: 客户 ...
- redis笔记
redis字符串 : 存储基本的一个键值对. redis哈希 : Redis的哈希值是字符串字段和字符串值之间的映射,所以他们是表示对象的完美数据类型. 一个哈希表可以存在多个键值对,可对键值进行增删 ...
- Redis笔记,安装和常用命令
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/96.html?1455870708 一.redis简单介绍 redis是N ...
随机推荐
- PAT乙级:1076 Wifi密码 (15分)
PAT乙级:1076 Wifi密码 (15分) 题干 下面是微博上流传的一张照片:"各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题 ...
- 解析ArrayList的底层实现(上)
private static final long serialVersionUID = 8683452581122892189L;//唯一序列号ID private static final int ...
- Vue 2升级 Vue 3初探小细节
前言 嗯,偶尔看看学习Vue 3技能啦,此前用过Vue 2做过一点东西,Vue 3已面世一段时间,于是乎,我来看看所遇到的问题是否在Vue 3中得到解决,首先,我们来讲讲一个例子在Vue 2中的实现, ...
- 【原创】case、casez和casex谁是谁
在Verilog中case语句经常用于多分支表决的结构,case后的表达式会与各分支表达式"全等"那么对应的分支会被执行.其基本结构如下: case(expression) exp ...
- 如何用js得到当前页面的url信息方法
设置或获取对象指定的文件名或路径. alert(window.location.pathname) 设置或获取整个 URL 为字符串. alert(window.location.href); 设置或 ...
- 几百行代码写个Mybatis,原理搞的透透的!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 Mybatis 最核心的原理也是它最便于使用的体现,为什么这说? 因为我们在使用 M ...
- GoldenEye-v1靶机
仅供个人娱乐 靶机信息 下载地址:https://pan.baidu.com/s/1dzs_qx-YwYHk-vanbUeIxQ 一.主机扫描 二.信息收集 三.漏洞的查找和利用 boris I ...
- 打开JAVA之门:idea的安装及JAVA环境的创建
打开JAVA之门:idea的安装及JAVA环境的创建 1.idea的下载安装 首先打开 ->->->(IntelliJ IDEA: The Capable & Ergonom ...
- 自学linux——15.云主机的购买流程及域名的购买备案解析
项目上线流程 一.服务器选配购买 项目上线的服务器必须是外网服务器 1.服务器购买情况 真实服务器(成本过高,购买内部自用) 云服务器(上线首选):阿里云,腾讯云,华为云 2.购买阿里云服务器:htt ...
- springboot自定义ObjectMapper序列化、配置序列化对LocalDateTime的支持
背景 问题1:项目中使用默认自带的jackson进行前后端交互,实现数据对象的序列化和反序列化,默认的ObjectMapper采用小驼峰的格式,但是调用其他业务的http接口时,ObjectMappe ...