1.概念
redis首先是一个nosql
也就是说是不需要些sql语句的,其工作的原理,就是在内存里面做一个持久化,在内存中的数据,会有一个持久化到内存中的行为,这里会受到约束,这里的约束是可以自己写的
2.redis的一些特性
①数据持久化,这里redis其实就是一个独立的数据库,有client的server,用client来操作server,进行数据库的读写
②要知道redis是一个菲关系型的数据库,所以他的储存数据的方式是key-value,这里支持的数据类型有很多,string hash list set zset等,目前是学到了hash
③一个redis可以有16个数据库,这句话是什么意思呢,就是类似mysql的表,mysql可以有很多个独立的表,这里mysql可以有16个不同的数据库,在不同的数据库就可以有不同的命名key值了
④高性能,redis的性能非常高,虽然是单线程,具备原子性,多个操作也支持事务
3.redis安装
解释一下,在这里,老师用一个远程linux工具,用代码安装了redis,然后进行了一系列的操作设置,但是最终肯定是跟Navicat一样,还是使用图形化界面来对redis进行操作,所以在这里,这一系列的命令,了解即可...主要要掌握,如何用java来操作redis,如何用图形化来操作,实际应用的时候,如何去写
4.redis的一些列操作
bind主机等,规定哪些客户端可以访问redis,这个肯定是要有的,然后可以设置客户端访问时的密码,然后设置是否成为一个守护进程,也就是说是不是像windows服务一样,没有窗口,一直存在linux进程中.
然后可以对log进行一些列的操作,到时候实际工作中,肯定是需要大量的log来进行分析的
还有save<seconds> <changes>这种设置一些关于内存数据持久化的设置
slaveof <masterip> <masterport>,关于主从数据库,读写分离,负载均衡等,这个还是要上demo自己写,等到redis搞完,下个月就开始自己找代码写了,然后开始搞几个项目,以备不时之需
5.daemonize
这里可以设置redis是否以守护进程的方式来访问的:
1-->daemonize:yes:redis采用的是单进程多线程的模式。当redis.conf中选项daemonize设置成yes时,代表开启守护进程模式。在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程。
2-->daemonize:no: 当daemonize选项设置成no时,当前界面将进入redis的命令行界面,exit强制退出或者关闭连接工具(putty,xshell等)都会导致redis进程退出。
其实就是,一个是设置成一个程序,另一个有点类似windwos的server
之前打开mysql的时候也是这样的,每次打开电脑,就有一个mysql的服务在跑着
6.若干设置-some settings
默认端口
在这里指定的redis默认端口为6379
timeout
这里是客户端连接redis默认多少秒以后断开连接
loglevel verbose
redis的日志记录级别
logfile stdout
日志记录方式
redis多数据库连接数量-->设置可以允许有多少个数据库可以连接redis
database 16
指定在多长时间内,有多少次更新操作,就将数据库同步到数据文件
save<seconds> <changes>
这里的意思就是,在一定的条件下,进行一个内存数据持久化的操作
指定持久化的时候,数据是否压缩
rdbcompression yes
dbfilename.dump.rdb
指定本地数据库文件名,默认为dump.rdb
指定数据库存放路径
dir ./
主从-->
当本服务器设置为slave服务器时,设置master服务的IP地址以及端口,在redis启动的时候,它会自动从mater进行数据同步
slaveof <masterip> <masterport>
master服务器密码
当master服务器设置了密码的时候,这里是写配置的密码
masterauth <master-password>
设置本redis的数据库密码
requirepass foobared
客户端连接本redis数据库需要密码,默认是关闭,这里肯定要设阿
maxclients
设置同一时间,连接的最大客户端数量
指定redis的最大内存限制
这里需要注意的一点是-->
这里给redis设置了一个最大内存,如果redis的内存中达到了最大值,redis会尝试清除已到期,或即将到期的key
如果处理完以后,内存还是很满,那么将无法进行写入操作,只能读取.
在这里注意一下,默认的redis的内存是256M,但是这里有点像之前的jvm配置内存,分别为s0区,永久区,配置最大内存阿等一系列内存分配
链接redis的客户端
redis-cli -h IP地址 -p 端口 -a 密码
-------------tips:这里讲的7788的其实都没啥用,了解一下后马上就给忘记了-------------------------
7.RDB&AOF
这两种明显AOF更加合理,但是没有完美的解决方案,只有尽可能的完美
8.内存溢出
内存溢出的话,redis会宕机
在这里提供了2种解决方法
为数据设置超时时间, 在进行key定义的时候,给你加一个超时时间字段
lru算法
通过这种算法,把不用的数据删除
这里有几种删除模式
其实这里的redis-vm有一点类似java的vm...
一样是可以选择策略,或者说选择回收机制...驱逐键,删除key等
9.自定义配置redis
主要有3个地方:
1.守护进程
2.bind客户端ip
3.设置客户端访问密码
10.redis的关闭
当正常关闭的时候,redis也会做持久化
如果用kill,那就是非正常方式关闭redis,这样就不会做持久化
11.使用redis 的很多键命令
这里有一个:
EXPIRE key seconds
为某一key设置过期时间
还有TTL key,查询一个key的剩余生存时间
------在这里插一句话-----如果请求者请求的数据,在redis中时过期的,这个时候,不要让redis的数据清除,而是应该等在异步从数据库查到数据以后再更新redis的值,如果直接在redis中把数据清除了,那么有可能很多数据在同一时间请求mysql,导致数据库雪崩------
12.选择数据库
redis可以用select来选择数据库,不同的数据库,里面的key自然不一样
一个redis可以连16个数据库按照0-15的索引,其实这里的数据库的作用就等于mysql的“表”,非关系型数据库,数据库=表
13.redis命名规范
非关系型数据库redis,如果要使数据之间有关联,要遵守以下命名规范
所以,key最好使用同一命名方式
到时候肯定还是需要学习redis的命名规范的
14.redis5种数据类型
string hash list set zset
关于数据结构,hash什么的。。。红黑树什么的,基础不好就是这样子,啥都学不到
15.二进制安全(作为一个垃圾程序员,无暇管这些)
如果数据在传输过程中可以被篡改或者拦截等,那就说这个数据是非二进制安全的
在redis的数据传输过程中,都是二进制的...不涉及编码解码,所以是安全的
16.覆盖
这里注意,有一个 普通string
这个string的key跟一个hash的filed重名
那么这个时候操作就会有问题,意思就是
在整个redis域里面,在一个数据库里面
不能用重名的不同类型的key的操作...
17.redis的操作
用hash来做类似关系型数据库的存储,有两种方式
①把用户ID作为key,而value是一个序列化的对象
②用户的对象有多少对key-value,那么存多少对key-value,那么这里完整的key就是:用户ID + 对应的属性名
但是这里是n对key-value,用户ID这个字段,一个对象里面有多少对数据,那么就有多少个ID,这个字段在内存中被大量浪费了
18.redis键命令
其实就相当于redis语言吧,这里了解一下,主要看如何用java操作redis
小结-->
到时候用到redis的再来好好研究一下如何使用,用redis做分布式缓存毕竟是非常需要的