Redis 宝典

169 阅读4分钟

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里快速获取到,而不再需要操作关系型数据库来获取

注意事项:

      如果数据有变更的话,需要清除缓存。才能保持缓存里的数据和数据库的数据是一致的。

\

\