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 ...
随机推荐
- 深入刨析tomcat 之---第10篇 how tomcat works 第13章,Response 发送错误信息 sendError
writedby 张艳涛 在浏览器中发送一个错误应用url 那么tomcat是如何发送错误的呢? 基本上是发送http 的response协议,分为两部分一部分是response设置头信息, 那么先分 ...
- 新一代垃圾回收器ZGC的探索与实践
ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器,它的设计目标包括: 停顿时间不超过10ms: 停顿时间不会随着堆的大小,或者活跃对象的大小而增加: ...
- IOS自动化测试环境搭建(Python & Java)
一.前言 IOS的App自动化测试与Android的一样,也可以用appium来进行.但是IOS自动化依赖苹果的osx系统.Xcode构建等,且封闭的系统需要苹果开发者账号才可以驱动真机.A ...
- vue 子目录配置,负载均衡 nginx
1. 我使用的是,腾讯云做负载均衡. 负载均衡配置: https://www.xxxx.com/vue 域名指向的服务器地址:10.10.10.10:80/vue 2. nginx 配置: ser ...
- MySQL5.6忘记root密码
第一步 修改 /etc/my.conf 文件 添加 skip-grant-tables 到 [mysqld] 下面就可以 这个参数的意思是设置为无需密码验证的登录 登录之后,可以添加用户,可以修改密码 ...
- MySQL-03-基础管理
用户和权限管理 用户管理 作用:登录,管理数据库逻辑对象 定义:用户名@'白名单' 白名单支持的方式 wordpress@'10.0.0.%' wordpress@'%' wordpress@'10. ...
- 【XSS-labs】level 16-20
Level 16 查看源码:发现 空格 / 和script都被转义了. 用img标签的onerror事件(在加载外部文档或图片出错后触发),空格用%0a绕过, payload如下: <img% ...
- GET请求与POST请求详解
一.GET请求 常用于获取服务器数据.常见的发起GET请求的方式有:url.href.src.form. 二.GET请求的格式 例子:index.php?userName=harry&pass ...
- nvcatmysql安装注册流程以及远程登陆配置步骤
前言:网络上下载工具良莠不齐,找到合适的比较困难.因为nvcat回收了网络上的大部分注册码,这个nvcatformysql下载到可以破解的费了点时间,最后经过配置成功远程登陆到mysql,在此记录一下 ...
- 基于kail的docker下安装sqli-labs
后面的关卡涉及到转码问题,比如空格,在Windows中会受到限制,比如24关的文件重命名问题,所以在这记录下在docker下安装sqli-labs,在linux下运行就不会受到限制. 参考链接:htt ...