redis官网.
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
下载、解压、编译Redis
$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar xzf redis-5.0.5.tar.gz
$ cd redis-5.0.5
$ make
$ src/redis-server
介绍:
redis-cli 是Redis命令行界面,这是一个简单的程序,可以将命令直接发送到Redis,并直接从终端读取服务器发送的回复。
两种主要模式
它有两种主要模式:交互式模式,其中存在一个REPL(读取评估打印循环),用户可以在其中键入命令并获得答复;另一种模式是将命令作为的参数发送redis-cli,执行并打印在标准输出上。
优势:
1、在交互模式下,redis-cli具有基本的行编辑功能,以提供良好的键入体验。
2、您可以使用一些选项来启动程序,以使其进入特殊模式,这样redis-cli绝对可以完成更复杂的任务,例如模拟从服务器并打印从主服务器接收的复制流,检查Redis服务器的延迟并显示统计数据,甚至显示延迟样本和频率以及其他许多东西的ASCII频谱图。
安装redis就自带的功能,您可以使用内置的客户端与Redis进行交互:
$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
Redis命令十分丰富,包括的命令组有Cluster、Connection、Geo、Hashes、HyperLogLog、Keys、Lists、Pub/Sub、Scripting、Server、Sets、Sorted Sets、Strings、Transactions一共14个redis命令组两百多个redis命令,Redis中文命令大全。
链接: Redis中文命令大全查询界面.
redis集群主要应用于分布式架构中
本文简单介绍redis集群,深入了解请阅读Redis 集群规范.
本教程试图提供最终用户一个简单的关于集群和一致性特征的描述
本教程使用于Redis3.0(包括3.0)以上版本
Redis集群介绍
1、Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。
2、Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.
3、Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Redis 集群的优势:
自动分割数据到不同的节点上。
整个集群的部分节点失败或者不可达的情况下能够继续处理命令。
Redis 集群的数据分片
1、Redis 集群没有使用一致性hash, 而是引入了 哈希槽的概念.
2、Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384
Redis 集群的主从复制模型
为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,每个节点都会有N-1个复制品.
Redis 一致性保证
Redis 并不能保证数据的强一致性. 这意味这在实际中集群在特定的条件下可能会丢失写操作.
第一个原因是因为集群是用了异步复制. 写操作过程:
客户端向主节点B写入一条命令.
主节点B向客户端回复命令状态.
主节点将写操作复制给他得从节点 B1, B2 和 B3.
由于集群至少需要6个节点(3主3从模式),这里使用7000 7001 7002 7003 7004 7005六个端口
1、创建集群文件夹,这里的文件夹是在步骤三、redis安装中解压的路径redis-5.0.5下创建:
cd redis-5.0.5
mkdir cluster-test
cd cluster-test
mkdir 7000 7001 7002 7003 7004 7005
2、拷贝redis-server可执行文件到集群文件夹下
cd cluster-test
cp /root/redis-5.0.5/src/redis-server ./
3、下面示例一个节点(7000)的配置及启动。其他节点修改port为对应节点的端口号就行,操作一样
构造不同节点的配置文件:
cd 7000
cp /root/redis-5.0.5/redis.conf ./
vi redis.conf #修改port 为7000(下面是一个最少选项的集群的配置文件)
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
备注:文件中的 cluster-enabled 选项用于开实例的集群模式, 而 cluster-conf-file 选项则设定了保存节点配置文件的路径, 默认值为 nodes.conf.节点配置文件无须人为修改, 它由 Redis 集群在启动时创建, 并在有需要时自动进行更新。
4、运行 Redis 实例
../redis-server ./redis.conf
5、可以检查一下是否启动成功:
ps -el | grep redis
现在我们已经有了六个正在运行中的 Redis 实例, 接下来我们需要使用这些实例来创建集群, 并为每个节点编写配置文件。
通过使用 Redis 集群命令行工具 redis-cli , 编写节点配置文件的工作可以非常容易地完成: redis-cli 位于 Redis 源码的 src 文件夹中, 这个程序通过向实例发送特殊命令来完成创建新集群, 检查集群, 或者对集群进行重新分片(reshared)等工作。
cd /root/redis-5.0.5/src/redis-server/src
./redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
这表示集群中的 16384 个槽都有至少一个主节点在处理, 集群运作正常。
cd /root/redis-5.0.5/src/redis-server/src
./redis-cli -c -p 7000