我爱编程

Redis学习笔记

2017-07-25  本文已影响0人  胖头鱼战士

概述

Redis是一个非关系型数据库,以键值对的方式来存储数据。
数据通过存储在内存中来获得高的读写性能,同时也可以存储到硬盘以实现持久化,既适合用作缓存,也适合用作数据存储。
非关系型数据库的本质,就是切掉一部分关系型数据库拥有的功能,而专注于高效的实现某些功能。
如在本笔记中发现错误,欢迎指正。

参考书籍

《Redis实战》,人民邮电出版社。

数据类型与命令

Redis可以存储键与5种不同数据结构类型之间的映射。
每种类型的指令均由该类型的首字母开头,然后用操作对应的英文单词表达。

STRING

可以是字符串、整数或者浮点数。

数操作命令

对数类型进行增减的命令。
INCR、DECR、INCRBY、DECRBY、INCRBYFLOAT。

子串和二进制位命令

对字符串类型进行字符或者位级别操作的指令。
APPEND、GETRANGE、SETRANGE、GETBIT、SETBIT、BITCOUNT、BITOP。

LIST

一个链表,链表每个节点都包含了一个字符串。

常用列表命令

推入、弹出、索引等命令。
RPUSH、LPUSH、RPOP、LPOP、LINDEX、LRANGE、LTRIM。

阻塞命令

阻塞命令可以阻塞执行命令的客户端,直到其他客户端给列表添加元素为止,常用于消息传递和任务队列。
BLPOP、BRPOP、BPOPLPUSH、BRPOPLPUSH。

SET

包含字符串的无序收集器,包含的每个字符串都是独一无二的。

常用集合命令

添加、删除、查询等命令。
SADD、SREM、SISMEMBER、SCARD、SMEMBERS、SRANDMEMBER、SPOP、SMOVE。

多集合操作命令

用于作集合的交集、差集、并集等命令。
SDIFF、SDIFFSTORE、SINTER、SINTERSTORE、SUNION、SUNIONSTORE。

HASH

包含键值对的无序散列表。

常用散列命令

添加、删除、查询等命令。
HMGET、HMSET、HDEL、HLEN。

高级散列命令

批量操作命令,以及一些字符串操作类似的散列命令。
HEXISTS、HKEYS、HVALS、HGETALL、HINCRBY、HINCRBYFLOAT。

ZEST

字符串成员与浮点数分值之间的有序映射,元素的排列顺序由分值的大小决定。当分值相同时,会按照字符串进行排序。

常用有序集合命令

添加、删除、查询、统计等命令。
ZADD、ZREM、ZCARD、ZINCRBY、ZCOUNT、ZRANK、ZSCORE、ZRANGE。

范围操作命令

逆序、子集、交集、并集等命令。
ZREVRANK、ZREVRANGE、ZRANGEBYSCORE、ZREVRANGEBYSCORE、ZREMRANGEBYRANK、ZREMRAMGEBYSCORE、ZINTERSTORE、ZUNIONSTORE。

发布与订阅

订阅者负责订阅频道,发送者负责向频道发送二进制字符串消息。
Redis的发布订阅模式有两个缺点:

常用命令

订阅与发布的命令。
SUBSCRIBE、UNSUBSCRIBE、PUBLISH、PSUBSCRIBE、PUNSUBSCRIBE。

其他通用指令

SORT

可以设置升降序,字符、数字、或者其他权重排序。

过期时间

设置、查看、取消键的过期时间,但是对于列表、集合、散列和有序集合,只能为整个键设置过期时间。
PERSIST、TTL、EXPIRE、EXPIREAT、PTTL、PEXPIRE、PEXPIREAT。

持久化

Redis提供两种不同形式的持久化方法,这两种方法可以不使用、单独使用或者同时使用:

复制

与关系型数据库类似,通过主从复制,客户端每次向主服务器
写入时,都会同步到从服务器,读请求可以向任意的从服务器发送。
Redis不支持主主复制。

配置

复制过程

对于主从链复制,如果从服务器X拥有从服务器Y,那么当X执行对快照文件的解释时,会断开与Y的连接,导致Y需要重新连接和同步。

故障处理

验证快照文件或者AOF文件

redis提供了两个命令行程序来检查快照文件和AOF文件的状态并在需要的情况下进行恢复:

更换redis服务器

更换主服务器

因为从服务器是无法执行写命令的,所以可以通过快照的方式发送数据,整个过程不会出现数据的不一致性。

升级从服务器

修改配置文件让从服务器升级成为主服务器。

事务

与关系型数据库的差异

redis的事务和传统的关系型数据库不同。

命令

redis事务由五个命令组成:

客户端流水线

锁分类

在共享数据库中,通过加锁可以让当前客户端对数据进行排他性访问。一般步骤为先获取锁,然后执行操作,最后释放锁。

悲观锁实现

信号量

通过redis命令有多种方式来实现信号量功能,属于redis应用场景,本篇不多介绍。

性能优化

短结构

分片结构

位图表示

Lua脚本编程

Redis从2.6版本开始引入使用Lua编程语言进行的服务器端脚本编程功能。

注意事项

上一篇下一篇

猜你喜欢

热点阅读