Redis(REmote Dictionary Server远程字典服务器)概述
① Redis是单线程应用程序,占用较少的内存。在性能上Redis是单线程模型,而Memcached支持多线程,所以在多核服务器上后者的性能更高一些。如果需要用到高级的数据类型或是持久化等功能,Redis是Memcached很好的替代品当拥有大量不经常使用的数据且无须立即存取时,Redis不是最佳的方案。基于SQL的关系型数据库或文档存储型的NoSQL技术,例如CounchDB或者MongoDB,可能是更好的选择。
② 运行32位还是64位版本的Redis将决定Redis键大小的实际限制。对于32位版本来说,任何长于32位的键名需要更多的字节空间,因此增加了Redis的内存使用。使用64位版本的Redis允许更长的键长度,但对于短小的键来说,也会分配完整的64位空间, 从而导致额外的空间浪费
③ 作为缓存系统,Reids可以限定数据占用的最大内存空间,在数据达到一定空间限制后可以按照一定的规则自动淘汰不需要的键。Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易的实现一个高性能的优先级队列。同时,Redis还支持“发布/订阅”的消息模式,可以基于此构建聊天室等系统
多数据库
每个数据库对外都是以一个从0开始的递增数字命名,客户端与Redis建立连接后会自动选择数据库,可以通过【redis>SELECT 数字】来选择数据库
Redis数据库不支持自定义数据库的名字,也不支持为每个数据库设置不同的访问密码,多个数据库之间不是完全隔离的,比如FLUSHALL命令可以清空一个Redis实例中所有数据库中的数据。有序集合类型
有序集合与列表的相同之处:
①都是有序的;
②都可以获得某一范围的元素。不同之处:
①列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间的数据速度会较慢,所以它更加适合实现如“新鲜事”或“日志”这样很少访问中间数据的应用
②有序集合类型是使用散列表和跳跃表实现的,所以即使读取位于中间部分的数据速度也很快
③列表中不能简单地调整某个元素地位置,但是有序集合可以(通过更改这个元素的分数)
④有序集合要比列表类型更耗费内存事务
redis > MULTI #开始事务
redis > EXEC #结束事务
错误处理:
如果是语法错误,输入EXEC命令后Redis会直接返回错误,连正确的命令也不会执行
如果是运行错误,除了出错的命令以外的命令都会被执行,同时Redis没有回滚功能,因此需要开发者格外注意WATCH命令:
可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行。监控一直持续到EXEC命令(事务中的命令是在EXEC之后才执行的,所以在MULTI命令之后可以修改WATCH监控的键值)
【由于WATCH命令的作用只是当被监控的键值被修改后阻止之后一个事务的执行,而不能保证其他客户端不修改这一键值,所以我们需要在EXEC执行失败之后重新执行整个函数】
执行EXEC命令后会取消对所有键的监控,如果不想执行事务中的命令也可以使用UNWATCH命令来取消监控生存时间
Redis中可以使用EXPIRE命令设置一个键的生存时间,到时间后Redis会自动删除它
EXPIRE key seconds
seconds表示键的生存时间,单位是秒
想知道一个键还有多久被删除,使用TTL命令:TTL key
取消键的生存时间设置(即恢复成永久的),可以使用PERSIST命令:PERSIST key
除了PERSIST命令之外,使用SET或GETSET命令为键赋值,也会同时清楚键的生存时间
【如果使用WATCH命令监测了一个拥有生存时间的键,该键时间到期自动删除并不会被WATCH命令认为该键被改变】
实际开发过程中很难为缓存键设置合理的生存时间,为此可以限制Redis能够使用的最大内存,并让Redis按照一定规则淘汰不需要的缓存键:修改配置文件的maxmemory参数,超过这个限制后Redis会依据分区
① 在Redis中有三种不同的分区方案:
1). 客户端分区:分区逻辑包含在客户端代码中,它基于算法或存储的额外信息或者兼而有之,用来选择正确的分区或者Redis节点。
2). 辅助代理分区:Redis客户端连接到代理中间件,由它将客户端的请求路由到正确的Redis节点,Twemproxy即是基于该方案的实现。
3). 查询路由:任一客户端查询集群中的随机节点将会被路由到包含键的正确节点上,这是Redis目前的实现方式② 范围分区:
需要管理代码和数据结构来追踪哪些键被分配到哪个特定的实例上。范围分区的核心是依据传入的键是否落入特定的范围内,并将该键指派给该范围所对应的实例上。
范围分区会带来额外的成本,包括用于追踪分区的Redis bitstring 数据结构,以及定制开发的客户端代码。这些客户端代码用于管理将键分配到分区及从运行中的Redis集群中获取和更新键③ 列表分区
与范围分区类似,列表分区为分区指定一个列表值,如果Redis键拥有列表值中的一个,那么就将该键分配到那个分区。列表分区不需要键是连续的,但还是少不了要添加客户端分区代码来管理小型集群④ 哈希分区
对Redis键采用哈希算法,并对结果进行取模操作(%)计算出键具体存放的位置或节点。⑤ 复合分区
Redis集群使用一种称作一致性哈希的复合分区形式,组合看哈希分区和列表分区的特征来计算键的归属实例。
Redis_基础
最新推荐文章于 2025-08-19 21:43:37 发布