Redis 是一种非关系型数据库(NoSql),泛指不以表形式存储数据的数据库
为什么会有非关系型数据库的存在呢?
这就需要说道关系型数据库了(以表的形式来存储数据,数据之间的关系通过键来维护。mysql,oracle其中的代表)
而关系型数据库在如今出现的问题
1.以表形式保存数据,数据之间有约束关系。
2互联网高速的发展,导致的三高问题:a高并发:海量的并发请求 b高性能:从海量数据中查询或者操作某一条数据
c: 高扩展:多个数据库节点,数据迁移(涉及到集群,负载均衡)
所以说就有了redis的诞生
redis是以key-value的形式来保存数据的,把数据保存在内容当中。把redis作为缓存 库,可以有效的提高web应用的
访问效率。端口号默认6379 可以百度下 merz 个性的程序猿
5种数据类型 String,list,set,hash,sortedset 最常用就是String
list 用在需要队列的情景下。 例如发送短信之类的
hash 存储用户登陆之后的一些信息。
set 顾名思义了不重复的
sortedset 有需要不重复而排序的情景。 排行榜。哈哈
Redis特性
一个jedis默认最多可提供16个数据库:0~15,我们默认操作的是0号库。可以通过更改配置文件redis.conf,改database的值来改变数据库的数量
1. 切换库的命令:select 3---切换到3号库
2. 移库:把一个数据从0号库移动到3号库:move key 3
3. 退出:quit
4. 查询一个库中的key的数量:dbsize
5. 刷新当前库(清空当前库):flushdb
6. 刷新所有库(清空所有库):flushall
消息订阅与发布
订阅消息:subscribe channel
批量订阅消息:psubscribe channel*
发布消息:publish channel message
事务
redis里的事务是伪事务。在redis数据库里,开启事务之后,执行了所有命令是放在了一个队列里。等到事务提交的时候,取出队列里的命令挨个执行。如果其中某个命令出现异常,pass掉继续执行其它的。
开启事务:multi
提交事务:exec execute
回滚事务:discard 抛弃队列里待执行的所有命令
Redis持久化(了解)
redis的持久化有两种方式:RDB和AOF。其中RDB是默认开启的,而AOF是需要手动配置来开启的。
RDB模式—快照模式
性能比较好,但是有可能会丢数据
Redis数据库会定时自动把数据库里的所有数据备份,生成“快照文件”,生成的文件默认叫dump.rdb,在redis的安装目录里。
RDB模式持久化时机:
save900 1 如果900秒内数据操作了一次,保存一次快照
save300 10 如果300秒内操作了10次,保存一次快照
save60 10000 如果60秒内容操作了10000次,保存一次快照
AOF模式—append only file
性能略低,丢失数据可能性更低
每次对redis有数据变更时,redis会把执行的命令保存在一个文件里。当redis服务器重启时,会自动读取文件,重构数据库。需要手动开启:修改redis.conf里的appendonly的值为yes,会自动生成文件appendonly.aof。
AOF模式持久化时机:
appendfsync always: 只要数据有变更,就存储一次。
appendfsync everysec:第秒保存一次
appendfsync no:不保存
Redis在web应用里的使用场景
在web应用里,通常是把redis作为缓存数据库来使用。把一些查询非常频繁,但是又不经常变更的数据,放到redis里缓存起来。再需要查询这些数据时,就可以从redis里快速获取到,而不再需要操作关系型数据库来获取
注意事项:
如果数据有变更的话,需要清除缓存。才能保持缓存里的数据和数据库的数据是一致的。