redis组内分享
redis基本用法

redis基本用法Redis是一种高性能的键值存储数据库,它支持多种数据结构,包括字符串、哈希表、列表、集合和有序集合。
以下是Redis的基本用法:1. 安装Redis在Linux系统上,可以使用命令行安装Redis:sudo apt-get updatesudo apt-get install redis-server2. 启动Redis启动Redis服务器可以使用以下命令:redis-server3. 连接到Redis可以使用以下命令连接到正在运行的Redis服务器:redis-cli4. 存储和获取数据存储数据可以使用SET命令:SET key value获取数据可以使用GET命令:GET key5. 删除数据可以使用DEL命令删除一个或多个键值对:DEL key1 key2 ...6. 数据类型Redis支持五种主要的数据类型:字符串、哈希表、列表、集合和有序集合。
7. 字符串操作字符串是最简单的数据类型。
可以使用SET和GET命令存储和获取字符串。
其他常用的字符串操作包括APPEND(追加字符串)、INCR (增加数字)、DECR(减少数字)等。
8. 哈希表操作哈希表是一种键值对集合。
可以使用HSET和HGET命令存储和获取哈希表中的元素。
其他常用的哈希表操作包括HDEL(删除元素)、HLEN(获取元素数量)等。
9. 列表操作列表是一系列有序的元素。
可以使用LPUSH和RPUSH命令向列表中添加元素,使用LPOP和RPOP命令从列表中取出元素。
其他常用的列表操作包括LLEN(获取列表长度)、LRANGE(获取指定范围内的元素)等。
10. 集合操作集合是一组无序的唯一元素。
可以使用SADD和SMEMBERS命令向集合中添加元素,使用SREM命令删除元素。
其他常用的集合操作包括SCARD(获取集合大小)、SINTER(获取多个集合的交集)等。
11. 有序集合操作有序集合是一组有序的唯一元素。
分享一个Redis帮助类

分享⼀个Redis帮助类最近在项⽬中使⽤了redis来存储已经下载过的URL,项⽬中⽤的是来操作Redis,⼀开始的版本⽤的是最新的,后来发现已经商业化了,⾮商业版本每个⼩时只能操作6000次Redis,后来把换成了V3版本。
在项⽬中⽤到了redis的Hash集合,但是封装的使⽤起来不⽅便,于是就⾃⼰封装了⼀个dll,利⽤的的pool来动态创建IRedisClient实例,创建了⼀个抽象类RedisOperatorBase封装了⼀些基本⽅法。
⽐较简单,相信⼤家⼀看代码就会。
代码Github下载地址:下⾯贴上最简单的⽤法:⾸先配置⽂件配置节点:<configSections><section name="RedisTools" type="RedisTools.RedisConfig, RedisTools"/></configSections><RedisTools WriteServerList="127.0.0.1:6379" ReadServerList="freep456187@127.0.0.1:6379" MaxWritePoolSize="60" MaxReadPoolSize="60" AutoStart="true" LocalCacheTime="180" RecordeLog="false"/> </configuration>使⽤⽅法:///<summary>///应⽤程序的主⼊⼝点。
///</summary>static void Main(string[] args){var hashOperator = new HashOperator();hashOperator.Set("test", "name", "⼤壮他哥");Console.WriteLine(hashOperator.Get<string>("test", "name"));Console.ReadKey();}如果⼤家要扩展⼀个帮助类,只需要继承RedisOperatorBase就可以了。
redis共享session原理

redis共享session原理Redis是一款开源的高性能键值数据库,它支持在内存中存储数据,具有快速读写的特点。
在分布式系统中,为了提高系统的可伸缩性和可靠性,常常需要将Session数据进行共享。
本文将介绍如何使用Redis实现Session数据的共享,并解释其原理。
一、什么是Session在Web开发中,Session是一种记录用户状态的机制。
当用户第一次访问一个网站时,服务器会为其分配一个唯一的Session ID,并将该ID存储在用户的浏览器中。
随后,用户的每一次请求都会携带这个Session ID,服务器通过它来识别用户,进而获取和更新用户的状态数据。
二、为什么需要共享Session在传统的应用架构中,每个Web服务器都会拥有自己的Session数据存储空间。
然而,随着应用规模的扩大,单个服务器的性能可能无法满足需求,因此引入了负载均衡器来分发请求。
但是,由于每个服务器都有各自独立的Session数据,导致用户在不同的服务器之间切换时,其Session状态无法保持一致。
为了解决这个问题,可以将Session数据集中存储在一个共享的地方,比如Redis中。
这样,不论用户请求被转发到哪个服务器,都能够共享相同的Session数据,从而实现状态的一致性。
三、使用Redis共享Session的步骤1. 安装并启动Redis服务器。
2. 配置Web应用程序,使其将Session数据存储到Redis中。
一般情况下,需要修改应用的配置文件,指定Redis的连接信息和存储方式。
3. 在用户请求到达Web服务器后,服务器会解析请求中携带的Session ID。
如果Session ID有效,则通过Redis查询该Session对应的数据。
如果Session ID无效,则创建一个新的Session,并将其ID返回给用户。
4. 在用户的每一次请求中,服务器都会更新Session数据,并将更新后的数据存储到Redis中。
redis高级用法

redis高级用法Redis是一个高性能的key-value存储系统,广泛应用于缓存、队列、分布式锁等场景。
除了基本的get、set、del等操作,Redis还提供了许多高级用法,可以进一步发挥其性能和功能优势。
本文将介绍Redis的一些高级用法,包括事务、发布订阅、Lua脚本、管道、分布式锁等。
1. 事务:Redis支持事务操作,可以一次执行多个命令,保证操作的原子性。
使用MULTI命令开始一个事务,将要执行的命令添加到事务队列中,然后使用EXEC命令提交事务。
如果在EXEC命令执行前,有另一个客户端对一些key进行了修改,那么事务会被放弃。
使用WATCH命令可以在EXEC命令执行前监视一些key,如果被监视的key被修改,事务也会被放弃。
2. 发布订阅:Redis提供了发布订阅功能,可以实现消息的广播。
使用PUBLISH命令发布消息,使用SUBSCRIBE命令订阅消息。
发布者发布消息后,所有订阅者都能收到该消息。
一个客户端既可以作为发布者,也可以作为订阅者。
通过订阅与发布模式,可以实现消息队列、实时消息推送等功能。
3. Lua脚本:Redis支持使用Lua脚本扩展其功能。
Lua脚本既可以在客户端执行,也可以在服务端执行。
客户端执行脚本使用EVAL命令,服务端执行脚本使用EVALSHA命令。
执行脚本时,Redis会将整个脚本传给服务器,并一次性执行。
Lua脚本可以使得操作更加灵活,可以执行复杂的计算、逻辑判断等操作。
4. 管道:Redis的管道(pipeline)功能允许客户端一次性发送多个命令,服务器收到后一次性返回结果。
这样可以减少客户端和服务器之间的网络延迟时间。
使用管道可以极大地提高Redis操作的性能。
Redis 提供了两种类型的管道,普通管道和事务管道。
普通管道使用MULTI和EXEC命令定义一组命令,然后使用管道命令一次性发送。
事务管道使用MULTI、WATCH和EXEC命令定义一组事务命令,然后使用管道命令一次性发送。
spring-session-data-redis解决session共享的问题

spring-session-data-redis解决session共享的问题分布式系统要做到⽤户友好,需要对⽤户的session进⾏存储,存储的⽅式有以下⼏种:1. 本地缓存2. 数据库3. ⽂件4. 缓存服务器可以看⼀些不同⽅案的优缺点1.本地机器或者本地缓存。
优点:速度快缺点:服务宕机后重启⽤户信息丢失,⽤户不优好2.数据库。
优点:技术栈简单缺点:速度慢3.⽂件。
优点:技术栈简单,速度适中缺点:⽆灾备或者灾备⽅案成本⾼4.缓存服务器。
⼀般是内存服务器,优点:速度快可以和原有技术栈契合,有现成的解决⽅案。
缺点:不明显如果使⽤java语⾔,并且缓存服务器为redis,可以使⽤开源的spring session项⽬来解决。
spring session项⽬现有三个⾃项⽬,分别是spring-session-data-redis 使⽤redis⽅式spring-session-hazelcast 使⽤hazelcast⽅式spring-session-jdbc 使⽤jdbc⽅式在这⾥我建议⼤家使⽤redis⽅式,它提供了注解式和编程式不同的⽅法。
具体如何使⽤,⽹上有很多实例,我就不赘述。
我想和⼤家⼀起深⼊内部看⼀下,spring-session项⽬的github地址为:https:///spring-projects/spring-session.git我们只看spring-session-data-redis,实现⾮常简单。
它总共只有12个类核⼼类只有⼀个RedisOperationsSessionRepository这个类内部定义了session的实现RedisSession/*** A custom implementation of {@link Session} that uses a {@link MapSession} as the* basis for its mapping. It keeps track of any attributes that have changed. When* {@link org.springframework.session.data.redis.RedisOperationsSessionRepository.RedisSession#saveDelta()}* is invoked all the attributes that have been changed will be persisted.** @author Rob Winch* @since 1.0*/final class RedisSession implements Session {private final MapSession cached;private Instant originalLastAccessTime;private Map<String, Object> delta = new HashMap<>();private boolean isNew;private String originalPrincipalName;private String originalSessionId;注意:delta 是增量 cached是存量我们来看这个RedisSession的创建销毁及修改RedisSession内部存储如下(⽰例)* <pre>* HMSET spring:session:sessions:33fdd1b6-b496-4b33-9f7d-df96679d32fe creationTime 1404360000000 maxInactiveInterval 1800 lastAccessedTime 1404360000000 sessionAttr:attrName someAttrValue sessionAttr2:attrName someAttrV * EXPIRE spring:session:sessions:33fdd1b6-b496-4b33-9f7d-df96679d32fe 2100* APPEND spring:session:sessions:expires:33fdd1b6-b496-4b33-9f7d-df96679d32fe ""* EXPIRE spring:session:sessions:expires:33fdd1b6-b496-4b33-9f7d-df96679d32fe 1800* SADD spring:session:expirations:1439245080000 expires:33fdd1b6-b496-4b33-9f7d-df96679d32fe* EXPIRE spring:session:expirations1439245080000 2100* </pre>RedisSession的数据结构是Hash* <p>* Each session is stored in Redis as a* <a href="http://redis.io/topics/data-types#hashes">Hash</a>. Each session is set and* updated using the <a href="http://redis.io/commands/hmset">HMSET command</a>. An* example of how each session is stored can be seen below.* </p>RedisSession的失效* <h3>Expiration</h3>** <p>* An expiration is associated to each session using the* <a href="http://redis.io/commands/expire">EXPIRE command</a> based upon the* {@link org.springframework.session.data.redis.RedisOperationsSessionRepository.RedisSession#getMaxInactiveInterval()} * . For example:* </p>RedisSession的更新有⼀个⽐较重要的⽅法:/*** Saves any attributes that have been changed and updates the expiration of this* session.*/private void saveDelta() {String sessionId = getId();saveChangeSessionId(sessionId);if (this.delta.isEmpty()) {return;}getSessionBoundHashOperations(sessionId).putAll(this.delta);String principalSessionKey = getSessionAttrNameKey(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME);String securityPrincipalSessionKey = getSessionAttrNameKey(SPRING_SECURITY_CONTEXT);if (this.delta.containsKey(principalSessionKey)|| this.delta.containsKey(securityPrincipalSessionKey)) {if (this.originalPrincipalName != null) {String originalPrincipalRedisKey = getPrincipalKey(this.originalPrincipalName);RedisOperationsSessionRepository.this.sessionRedisOperations.boundSetOps(originalPrincipalRedisKey).remove(sessionId);}String principal = PRINCIPAL_NAME_RESOLVER.resolvePrincipal(this);this.originalPrincipalName = principal;if (principal != null) {String principalRedisKey = getPrincipalKey(principal);RedisOperationsSessionRepository.this.sessionRedisOperations.boundSetOps(principalRedisKey).add(sessionId);}}this.delta = new HashMap<>(this.delta.size());Long originalExpiration = (this.originalLastAccessTime != null)this.originalLastAccessTime.plus(getMaxInactiveInterval()).toEpochMilli(): null;RedisOperationsSessionRepository.this.expirationPolicy.onExpirationUpdated(originalExpiration, this);}⼩结:1.session是键值对形式的,对应redis的数据结构hash2.session的存储形式使⽤redis⾮常⽅便。
redis读写锁原理

redis读写锁原理Redis并没有内置的读写锁,但是可以通过使用Redis的事务和watch命令来实现类似读写锁的功能。
下面我会从多个角度来解释这个问题。
首先,让我们了解一下Redis的事务和watch命令。
Redis事务是一组命令的集合,可以通过MULTI和EXEC命令来执行。
在事务执行期间,其他客户端发送的命令不会被插入到事务执行的命令序列中,而是会被放到一个队列中等待执行。
这确保了事务的原子性。
另外,Redis的watch命令可以用来监视一个或多个键,如果在事务执行期间被监视的键被其他客户端修改,事务将被放弃。
现在,让我们来看如何利用事务和watch命令来实现读写锁的功能。
假设我们有一个键用来表示资源,我们可以使用watch命令来监视这个键。
在读操作时,我们可以使用MULTI命令开启一个事务,然后在事务中执行对资源的读取操作。
在写操作时,我们也可以使用MULTI命令开启一个事务,然后在事务中执行对资源的写入操作。
在执行事务之前,我们需要使用watch命令监视资源的键,这样如果在事务执行期间资源被其他客户端修改,事务就会被放弃。
这样就实现了类似读写锁的功能,确保了在写操作时不会被其他客户端的读操作打断,也确保了在读操作时不会被其他客户端的写操作打断。
另外,还有一种常见的实现方式是使用SETNX命令(SET if Not eXists)来模拟写锁,即在写操作时先使用SETNX来尝试获取写锁,如果成功则执行写操作,如果失败则等待一段时间后重试或者放弃。
而对于读操作,则可以直接执行而无需获取锁。
总的来说,虽然Redis并没有内置的读写锁,但是可以通过事务和watch命令或者SETNX命令来实现类似读写锁的功能。
这样就可以保证对共享资源的并发访问时的一致性和安全性。
希望这些解释能够帮助你理解Redis读写锁的原理。
redisclient常用命令
redisclient常用命令Redis是一款高性能的键值存储数据库,常用于缓存、消息队列等场景。
在使用Redis时,我们可以通过Redis客户端发送各种命令与Redis进行交互。
本文将介绍RedisClient常用的命令,包括字符串操作、哈希操作、列表操作、集合操作和有序集合操作等。
一、字符串操作1. SET key value:设置指定key的值为value。
2. GET key:获取指定key的值。
3. DEL key:删除指定key。
二、哈希操作1. HSET key field value:在指定key的哈希表中,设置字段field 的值为value。
2. HGET key field:获取指定key的哈希表中字段field的值。
3. HGETALL key:获取指定key的哈希表中所有字段和值。
三、列表操作1. LPUSH key value1 [value2]:将一个或多个值插入列表的头部。
2. RPUSH key value1 [value2]:将一个或多个值插入列表的尾部。
3. LPOP key:移除并返回列表的头部元素。
4. RPOP key:移除并返回列表的尾部元素。
5. LRANGE key start stop:获取列表中指定范围内的元素。
四、集合操作1. SADD key member1 [member2]:向集合中添加一个或多个成员。
2. SMEMBERS key:获取集合中的所有成员。
3. SISMEMBER key member:判断成员是否是集合中的成员。
4. SREM key member1 [member2]:从集合中移除一个或多个成员。
五、有序集合操作1. ZADD key score1 member1 [score2 member2]:向有序集合中添加一个或多个成员,同时指定分数。
2. ZRANGE key start stop [WITHSCORES]:按照索引范围获取有序集合中的成员。
redis数组range用法
redis数组range用法Redis是一种快速,高性能的键值存储系统,它支持各种数据结构,包括字符串、哈希表、列表、集合和有序集合。
在Redis中,列表是一种特殊的数据结构,它可以用来存储有序的字符串元素,而且可以在列表的两端进行元素的插入和删除操作。
Redis中的列表是通过双向链表实现的,所以在列表两端进行元素插入和删除操作的时间复杂度都是O(1)。
在Redis中,可以使用LPUSH和RPUSH命令将一个或多个元素插入到列表的两端,使用LPOP和RPOP命令从列表的两端弹出元素。
此外,Redis还提供了LRANGE命令用于获取列表中指定范围的元素。
LRANGE命令的用法如下:LRANGE key start stop其中,key是列表的键名,start是列表的起始下标,stop是列表的结束下标(包含在内)。
LRANGE命令会返回列表中指定范围内的元素,下标从0开始计算。
如果start大于等于列表的长度,或者start大于stop,LRANGE命令将返回一个空列表。
如果stop大于等于列表的长度,LRANGE命令将返回从start到列表末尾的所有元素。
以下是一些相关的参考内容,可以帮助理解和使用Redis的LRANGE命令:1. Redis官方文档:Redis官方文档提供了关于Redis各种命令的详细说明和使用示例,包括LRANGE命令。
可以通过搜索"Redis documentation"来找到官方文档。
2. Redis的Github仓库:Redis的Github仓库中存储了Redis的源代码和各种文档资源,可以在仓库中找到关于使用LRANGE命令的示例代码和相关的讨论。
3. Redis命令参考手册:Redis命令参考手册是一个收录了Redis各种命令的在线文档,提供了详细的命令说明和使用示例。
可以通过搜索"Redis command reference"来找到这个手册。
Redis缓存的连接池配置
Redis缓存的连接池配置Redis是一个开源的内存数据结构存储系统,被广泛用于缓存和分布式数据共享。
为了更有效地使用Redis作为缓存系统,我们需要配置连接池以确保与Redis服务器的连接的有效性和性能。
连接池是一组已经建立的连接对象的集合,它们可以被重复使用,以减少建立和销毁连接的开销。
在使用Redis作为缓存的同时,连接池的合理配置能够显著提高系统的性能和可靠性。
**连接池的基本配置**在Redis的配置文件redis.conf中,我们可以找到连接池相关的配置项。
以下是一些常用的连接池配置项及其说明:1. **maxclients**:该配置项控制Redis最大的客户端连接数。
可以根据系统的负载情况和预计的客户端访问量进行调整。
默认值为10000,在高并发的情况下可能需要增加此值。
2. **tcp-backlog**:该配置项控制Redis服务器监听套接字的未完成连接队列的长度。
未完成连接队列是已经收到客户端连接请求,但还没有完成握手的连接。
根据系统的负载情况和预计的连接请求量进行调整。
默认值为511,可以根据实际情况适当增加。
3. **timeout**:该配置项设定了连接池的超时时间(单位为秒)。
当一个客户端连接idle超过该时间时,连接池会主动关闭该连接。
默认值为0,表示不超时。
根据业务需求和系统资源情况进行配置。
4. **tcp-keepalive**:该配置项设置是否开启TCP keepalive功能。
TCP keepalive用于检测连接的有效性,如果连接空闲时间过长,可能由于网络故障等原因导致连接断开。
通过设置该配置项为一个非零值,可以启用TCP keepalive功能,并指定检测的时间间隔。
默认值为0,表示不开启。
5. **tcp-keepalive-interval**:该配置项指定了TCP keepalive探测的间隔时间(单位为秒)。
只有在tcp-keepalive开启的情况下才有效。
redistemplate opsforset members
redistemplate opsforset members什么是操作集合成员(OPSFORSET MEMBERS)?操作集合成员(OPSFORSET MEMBERS)是指利用特定的操作来处理集合(set)中的元素。
集合是一种无序且不允许重复的数据结构,而操作集合成员则提供了一些常用的方法来对集合中的元素进行增删改查等操作。
在本文中,我们将一步一步地回答对操作集合成员的问题,从而更好地理解和运用这些操作。
1. 为什么要使用操作集合成员(OPSFORSET MEMBERS)?操作集合成员(OPSFORSET MEMBERS)提供了一种有效管理集合中元素的方式。
在实际开发中,我们经常需要对一组数据进行操作,如去重、合并、查找等。
集合数据结构提供了高效的存储和查询性能,而操作集合成员则进一步增加了对集合的灵活操作能力。
因此,使用操作集合成员可以简化代码逻辑,提高程序的运行效率。
2. 操作集合成员的常用方法有哪些?操作集合成员提供了一系列的方法来对集合的成员进行操作。
常用的方法包括:- 添加成员:向集合中添加一个或多个成员。
- 删除成员:从集合中删除一个或多个成员。
- 随机获取成员:从集合中随机获取一个或多个成员。
- 查找成员:根据条件来查找集合中的成员。
- 统计成员数量:获取集合中成员的数量。
- 集合间操作:对多个集合进行合并、交集、差集等操作。
通过这些方法,我们可以对集合进行灵活地增删改查操作,满足不同场景下的需求。
3. 如何向集合中添加成员?添加成员是操作集合成员的基本操作之一。
可以使用以下方法向集合中添加成员:- SADD key member1 [member2 ...]:向指定集合key 中添加一个或多个成员。
已经存在于集合中的成员将被忽略。
例如,我们可以通过以下命令向名为"fruits" 的集合中添加苹果、香蕉和橙子这三个成员:SADD fruits apple banana orange4. 如何从集合中删除成员?删除成员是操作集合成员的另一个重要操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
rdb和aof结构分析
Redis主从复制
• redis为了充分发挥自己的性能,在生产上 经常使用一台master主机和一台slave或者几 台slave机器来做读写分离,而这个里面的 机制就是用了redis服务器间的复制。 对应 两台服务器,可以直接用slaveof这个命令来 设置主从,但是这个仅仅是测试用,一般 是在服务器里面设置,修改redis.conf,配置 slaveof master的ip master的port,再设置只 读属性,建立两台机器的主从次序。
redis分实例方案
• 参见博客:http://socoo123.github.io/ • 主要修改的配置文件:
Hash(哈希)
• Redis hash 是一个键值对集合。 • Redis hash是一个string类型的field和value的映射表,hash特别适合用 于存储对象。
Redis配置文件解析
• 请参见redis安装目录的redis.conf;
• 网络链接:/kreo/p/4423362.html
• 部分重同步的实现方式:
1. 记录主服务器的复制偏移量和从服务器的复制偏 移量。 2. 命令传播的时候还把主服务器命令写到的复制积 压缓冲区。 3. 记录二者服务器的运行ID,如果一致就部分重同 步,如果不一致则完整复制。
PSYNC详细步骤 1. 2. 3. 4. 5. 6. 7. 设置主服务器地址和端口。 建立套接字连接(设置slaveof参数)。 发送ping命令(检查)。 身份验证。 发送端口信息。 同步。 命令传播。
老版复制
• redis在老版复制功能用了同步(sync)和命令传 播(command propagate)两个操作:
1. 2. 同步操作将从服务器的数据库状态更新到主服务器所处的数据库状态。 命令传播操作则用于在主服务器的数据库状态被修改后,主从服务器的数据库状 态不一致时,让他们保持一致。
• SYNC命令解析:
新版复制
• redis2.8开始之后,使用了PSYNC来代替SYNC,主要处 理断线重连的问题。PSYNC有完整重同步和部分重同 步,其中完整重同步和SYNC几乎一致。而部分重同步 专门处理断线后复制的情况,从服务器在断线后重连 到主服务器时,主服务器将这之间的写命令发送给从 服务器,这样数据库最后更新一致,节能环保高效。
• Redis参考教程地址:/
Redis 优势
• 性能极高 – Redis能读的速度是110000次/s,写的 速度是81000次/s 。 • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据 类型操作。 • 原子 – Redis的所有操作都是原子性的,同时 Redis还支持对几个操作全并后的原子性执行。 • 丰富的特性 – Redis还支持 publish/subscribe, 通 知, key 过期等等特性。
• 链接文件。
Redis的持久化
• redis目前两种方式来进行持久化:
1. RDB的持久化 2. AOF的持久化
RDB的持久化
•
•
•
这两段的内容是指促发redis进行rdb存储的方式和存储的名称,当满足 其中的任何一个条件的时候,redis就会执行save命令,将内存数据库里 面的信息持久化到磁盘上面去,命名为dump.rdb。 rdb可以显式的执行,在redis命令行里面,执行save或者bgsave即可执 行rdb的存储,不同的是save是堵塞现有请求,而bgsave是后台fork一份 主进程进行保存,配置中的save执行的bgsave命令。 redis怎样来触发配置里面的save条件呢?在redis服务器上面,维持了 一个dirty计数器和lastsave的属性,dirty计数器记录上一次save或者 bgsave之后,redis数据库有了多少次更改(插入、更新、删除等操作), 而lastsave属性是上一次服务器save或者bgsave执行的时间戳,redis还 有一个serverCron函数,每100毫秒就检查下服务器的状态,如果满足 save配置里面的条件,则除非basave请求,进行持久化的存储。
– redis-cli –p 6379
• redis-benchmark:Redis性能测试工具,测试 Redis在你的系统及你的配置下的读写性能。 • redis-stat:Redis状态检测工具,可以检测 Redis当前状态参数及延迟状况。
Redis 数据类型
• • • • • string(字符串) hash(哈希) list(列表) set(集合) zset(sorted set:有序集合)。
1. 2. 3. 4. 5. 6. 从服务器向主服务器发送sync命令。 收到sync命令的主服务器执行BGSAVE命令,后台生成一个rdb文件,使用缓冲区 记录到现在开始执行的所有写命令。 主服务器发送rdb文件给从服务器,从服务器接收并载入,将数据库状态更新至 主服务器执行bgsave命令时的数据库状态。 主服务器将记录在缓冲区里的写命令发送给从服务器,从服务器执行写命令,使 数据库状态更新与主服务器状态一致。 命令传播解析: 当同步之后,主服务器状态又发生改变的时候,同时发送一条命 令让从服务器状态更新,最终保持一致。 老版的复制是在从服务器断线重连后的sync效率很低,因为它默认从头到尾整体 复制,当数据量比较大的时候,会非常耗资源。
AOF持久化
• 第一段代表开启aof持久化,生成名称为 appendonly.aof的文件,第二部分代表每秒钟执行一 次aof持久。aof还原数据理解起来很简单,就是把数 据按命令写进去而已。 因为我们经常操作的可能都 是同一条key,所以会存在aof出现很多重复数据的情 况,导致无谓的体积增大,aof提供了一个 bgrewriteaof命令,将原来的数据去掉重复值。
Redis知识分享
By 钟杨
Redis简介
• Redis 是完全开源免费的,遵守BSD协议,是一个高 性能的key-value数据库。 • Redis 与其他 key - value 缓存产品有以下三个特点:
1. Redis支持数据的持久化,可以将内存中的数据保持在磁 盘中,重启的时候可以再次加载进行使用。 2. Redis不仅仅支持简单的key-value类型的数据,同时还提 供list,set,zset,hash等数据结构的存储。 3. Redis支持数据的备份,即master-slave模式的数据备份。
Redis常见命令
• 参考W3C school之类的地址: • /redis/redistutorial.html
启动服务相关命令
• redis-server:Redis服务器的启动程序。
– redis-server redis.config
• redis-cli:Redis命令行操作工具。当然,你也 可以用telnet根据其纯文本协议来操作。
String(字符串)
• string是redis最基本的类型,你可以理解成与Memcached一模一样的类 型,一个key对应一个value。 • string类型是二进制安全的。意思是redis的string可以包含任何数据。 比如jpg图片或者序列化的对象 。 • string类型是Redis最基本的数据类型,一个键最大能存储512MB。