现实项目中通常需要若干台Redis服务器的支持: 结构上,单个 Redis 服务器会发生单点故障,而且一台服务器需要承受所有的请求负载.这就需要为数据生成多个副本并分配在不同的服务器上: 容量上,单个 Redis 服务器的内存非常容易成为存储瓶颈,所以需要进行数据分片. 同时拥有多个 Redis 服务器后就会面临如何管理集群的问题,包括如何增加节点.故障恢复等操作. 一:复制(replication) 为了避免单点故障,通常的做法是将数据库复制多个副本以部署在不同的服务器上,这样即使有一台服务器…
即使使用哨兵,此时的 Redis 集群的每个数据库依然存有集群中的所有数据,从而导致集群的总数据存储量受限于所有节点中,内存最小的数据库节点,形成木桶效应. 对 Redis 进行水平扩容,在旧版Redis 中通常使用客户端分片来解决这个问题,即启动多个 Redis 数据库节点,由客户端决定每个键交由哪个数据库节点存储,下次客户端读取该键时直接到该节点读取. 这种实现将整个数据分布存储在N个数据库节点中,每个节点只存放总数据量的 1/N.但对于需要扩容的场景来说,在客户端分片后,如果想增加更多的节…
一:安全 1:可信的环境 Redis以简洁为美.在安全层面Redis也没有做太多的工作.Redis的安全设计是在"Redis运行在可信环境"这个前提下做出的.在生产环境运行时不能允许外界直接连接到 Redis 服务器上,而应该通过应用程序进行中转,运行在可信的环境中是保证Redis安全的最重要方法. Redis的默认配置会接受来自任何地址发送来的请求,要更改这一设置,可以修改配置文件中的bind参数,如只允许若干IP连接Redis,可如下修改: bind 192.168.1.100 1…
一:事务 1:概述 Redis中的事务(transaction)是一组命令的集合.事务同命令一样都是Redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行. 事务的原理是是先将属于一个事务的所有命令都发送给Redis,然后再让Redis依次执行这些命令.比如: > multi OK > sadd aset QUEUED > sadd aset QUEUED > exec ) (integer) ) (integer) 上面的代码演示了事务的使用方式.首先使用multi命…
一:热身 获得符合规则的健名列表:keys  pattern pattern支持glob风格的通配符,具体规则如下表: Redis命令不区分大小写.keys命令需要遍历Redis中的所有健,当键的数量较多时会影响性能,不建议在生产环境中使用. 判断一个键是否存在:exists  key 如果键存在则返回整数类型1,否则返回0. 删除键:del  key [key ...] 返回值是删除键的个数,del命令的参数不支持通配符. 获取键值的数据类型:type  key 返回值可能是string(字符…
一:简介 Redis是一个开源的高性能key-value数据库.Redis是Remote DIctionary Server(远程字典服务器)的缩写,它以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容.Redis字典中的value支持的数据类型有:字符串,散列,列表,集合,有序集合. Redis数据库中的所有数据都存储在内存中,内存的读写速度远快于硬盘,因此Redis在性能上对比其他基于硬盘存储的数据库有非常明显的优势.但是将数据存储在内存中也有问题,程序退出后内存中的数据会丢失…
Redis的强劲性能很大程度上是由于将所有数据都存储在了内存中,然而当Redis重启后,所有存储在内存中的数据就会丢失.在一些情况下,希望Redis能将数据从内存中以某种形式同步到硬盘中,使得重启后可以根据硬盘中的记录恢复数据.这一过程就是持久化. Redis支持两种方式的持久化,一种是RDB方式,另一种是AOF方式.前者会根据指定的规则将内存中的数据存储在硬盘上,而后者在每次执行命令后将命令本身记录下来.两种持久化方式可以单独使用其中一种,但更多情况下是将二者结合使用. 一:RDB方式 RDB…
Redis是一个基于内存的数据库,所有的数据都存储在内存中.所以如何优化存储,减少内存空间占用是一个非常重要的话题.精简键名和键值是最直观的减少内存占用的方式,如将键名very.important.person:20改成VIP:20. 但有时仅凭精简键名和键值所减少的空间并不足以满足需求,这时就需要根据Redis内部编码规则来节省更多的空间. Redis为每种数据类型都提供了两种内部编码方式,以散列类型为例,散列类型是通过散列表实现的,这样就可以实现O(1)时间复杂度的查找.赋值操作,然而当键中…
写在前面 学习<redis入门指南>笔记,结合实践,只记录重要,明确,属于新知的相关内容. 一.复制 1.在复制中,数据库分为两类,一类主数据库,一类从数据库,主库用来读写,从库用来读,主库可以拥有多个从库,但从库只能拥有一个主库. 2.使用复制非常简单,只需要在从库的启动参数或运行时命令或配置文件中加入“ slaveof 主库地址 从库地址 ”即可,主库无需配置:可通过INFO replication查看主从的复制信息. 3.从库默认为只读,可通过修改配置文件参数slave-read-onl…
写在前面 学习<redis入门指南>笔记,结合实践,只记录重要,明确,属于新知的相关内容. 配置集群 1.配置集群,集群解决了单点故障以及单台机器内存上限的问题,使用集群时,只需要将配置文件中的参数cluster-enabled打开即可,集群中至少有三个主库才可以运行,当启动若干个redis-server后,此时每个节点都是独立的,想要初始化集群,redis源码中提供了一个使用ruby语言编写的工具,redis-trib.rb来辅助初始化集群. 2.使用redis-trib.rb初始化集群,只…