- 浏览: 50794 次
- 性别:
- 来自: 南京
文章分类
最新评论
1.redis
学习redis的标准,要能在新环境中设计搭建redis缓存系统
2.memcached
3.MongoDB
1.redis
redis是内存数据库,有别于关系型数据库,redis是key-value键值对形式的数据库。操作redis命令就相对sql。相比于memcached,Redis是单线程运行。redis是c语言写的(什么时候能有个中国人,写个全世界级的开源软件)。
redis存的数据类型有5种:字符串、哈希、链表、集合、有序集合
操作数据命令
字符串(string):
set,get
哈希(hash):
hset,hget
链表(List):
lpush,lpop
集合(sets):
sadd,sremove
有序集合(sorted sets):
zadd,zrem
1.1 下载安装redis
下载
https://github.com/ServiceStack/redis-windows/blob/master/downloads/redis64-3.0.501.zip
解压后配置
redis.windows.conf文件
#启动redis服务器
1.2 redis使用-客户端
#启动redis客户端
#安装windows服务
下次重启电脑后,可直接执行客户端命令
redis-cli.exe
常用命令:
#查看服务器信息
>info
#查看服务器连接情况(返回pong说明连接正常)
>ping
#清空数据库
>flushdb
#keys值数量
>dbsize
#基本数据操作
>set name test
>get name
>del name
>exists name
>type name
>keys * // 查询满足特定格式的key
>rename name name1 //重名了key值
1.3 redis master-slave设计
将redis安装文件复制成多份(根据要设计的redisslave个数决定),修改配置文件redis.windows.conf
#slave1
port 6380
bind 127.0.0.1
requirepass 111180
slaveof 127.0.0.1 6379
masterauth 111111
slave-read-only yes
#slave2
port 6381
bind 127.0.0.1
requirepass 111181
slaveof 127.0.0.1 6379
masterauth 111111
slave-read-only yes
设置完后启动redis,可通过
>redis-cli.exe -p 6380
访问slave的redis
redis分布式集群需要ruby环境
redis分布式集群-java,设置新建2个独立的master实例,jedis中实现分布式
1.4 redis使用-java
redisjar包:
java调用redis服务,主要有自连,事务,管道,分布式或者其中2者的组合。用户可根据不同场景使用不同方法
由上面测试可知,第一种自连与第二种事务,很明显事务快很多,那是不是多用事务。其实不然,如果只是插入一条数据,自连就明显比事务快。
1.5 redis使用-spring
1.6 redis使用-企业级设计
参考网站:
https://redis.io/
win7x64下的redis安装与使用
http://www.cnblogs.com/koal/p/5484916.html
redis常用命令
http://blog.csdn.net/tangsilai/article/details/7477961
Redis使用详细教程
http://www.cnblogs.com/wangyuyu/p/3786236.html
学习redis的标准,要能在新环境中设计搭建redis缓存系统
2.memcached
3.MongoDB
1.redis
redis是内存数据库,有别于关系型数据库,redis是key-value键值对形式的数据库。操作redis命令就相对sql。相比于memcached,Redis是单线程运行。redis是c语言写的(什么时候能有个中国人,写个全世界级的开源软件)。
redis存的数据类型有5种:字符串、哈希、链表、集合、有序集合
操作数据命令
字符串(string):
set,get
哈希(hash):
hset,hget
链表(List):
lpush,lpop
集合(sets):
sadd,sremove
有序集合(sorted sets):
zadd,zrem
1.1 下载安装redis
下载
https://github.com/ServiceStack/redis-windows/blob/master/downloads/redis64-3.0.501.zip
解压后配置
redis.windows.conf文件
#配置redis内存大小 #maxmemory <bytes> maxmemory 1024000000 #配置密码 # requirepass foobared requirepass 111111
#启动redis服务器
D:\service\redis64-3.0.501>redis-server.exe redis.windows.conf
1.2 redis使用-客户端
#启动redis客户端
D:\service\redis64-3.0.501>redis-cli.exe -p 6379 127.0.0.1:6379> set name byron (error) NOAUTH Authentication required. 127.0.0.1:6379> auth 111111 OK 127.0.0.1:6379> set name byron OK 127.0.0.1:6379> get name "byron" 127.0.0.1:6379>
#安装windows服务
D:\service\redis64-3.0.501>redis-server --service-install redis.windows.conf --l oglevel verbose [3288] 09 Jun 22:48:00.926 # Granting read/write access to 'NT AUTHORITY\Network Service' on: "D:\service\redis64-3.0.501" "D:\service\redis64-3.0.501\" [3288] 09 Jun 22:48:00.927 # Redis successfully installed as a service. D:\service\redis64-3.0.501>
下次重启电脑后,可直接执行客户端命令
redis-cli.exe
常用命令:
#查看服务器信息
>info
#查看服务器连接情况(返回pong说明连接正常)
>ping
#清空数据库
>flushdb
#keys值数量
>dbsize
#基本数据操作
>set name test
>get name
>del name
>exists name
>type name
>keys * // 查询满足特定格式的key
>rename name name1 //重名了key值
1.3 redis master-slave设计
将redis安装文件复制成多份(根据要设计的redisslave个数决定),修改配置文件redis.windows.conf
#slave1
port 6380
bind 127.0.0.1
requirepass 111180
slaveof 127.0.0.1 6379
masterauth 111111
slave-read-only yes
#slave2
port 6381
bind 127.0.0.1
requirepass 111181
slaveof 127.0.0.1 6379
masterauth 111111
slave-read-only yes
设置完后启动redis,可通过
>redis-cli.exe -p 6380
访问slave的redis
redis分布式集群需要ruby环境
redis分布式集群-java,设置新建2个独立的master实例,jedis中实现分布式
1.4 redis使用-java
redisjar包:
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
java调用redis服务,主要有自连,事务,管道,分布式或者其中2者的组合。用户可根据不同场景使用不同方法
package com.byron.redis.client; import java.util.Arrays; import java.util.List; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.JedisShardInfo; import redis.clients.jedis.Pipeline; import redis.clients.jedis.ShardedJedis; import redis.clients.jedis.ShardedJedisPipeline; import redis.clients.jedis.ShardedJedisPool; import redis.clients.jedis.Transaction; public class RedisClient { /** * 普通调用 */ public void test1Normal() { Jedis jedis = new Jedis("localhost"); jedis.auth("111111"); long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { String result = jedis.set("n" + i, "n" + i); } long end = System.currentTimeMillis(); System.out.println("Simple SET: " + ((end - start)/1000.0) + " seconds"); jedis.disconnect(); } /** * 事务调用 */ public void test2Trans() { Jedis jedis = new Jedis("localhost"); jedis.auth("111111"); long start = System.currentTimeMillis(); Transaction tx = jedis.multi(); for (int i = 0; i < 100000; i++) { tx.set("t" + i, "t" + i); } List<Object> results = tx.exec(); long end = System.currentTimeMillis(); System.out.println("Transaction SET: " + ((end - start)/1000.0) + " seconds"); jedis.disconnect(); } /** * 管道调用 */ public void test3Pipelined() { Jedis jedis = new Jedis("localhost"); jedis.auth("111111"); Pipeline pipeline = jedis.pipelined(); long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { pipeline.set("p" + i, "p" + i); } List<Object> results = pipeline.syncAndReturnAll(); long end = System.currentTimeMillis(); System.out.println("Pipelined SET: " + ((end - start)/1000.0) + " seconds"); jedis.disconnect(); } /** * 管道事务调用 */ public void test4combPipelineTrans() { Jedis jedis = new Jedis("localhost"); jedis.auth("111111"); long start = System.currentTimeMillis(); Pipeline pipeline = jedis.pipelined(); pipeline.multi(); for (int i = 0; i < 100000; i++) { pipeline.set("" + i, "" + i); } pipeline.exec(); List<Object> results = pipeline.syncAndReturnAll(); long end = System.currentTimeMillis(); System.out.println("Pipelined transaction: " + ((end - start)/1000.0) + " seconds"); jedis.disconnect(); } /** * 分布式调用 */ public void test5shardNormal() { JedisShardInfo shard1 = new JedisShardInfo("localhost",6379); shard1.setPassword("111111"); JedisShardInfo shard2 = new JedisShardInfo("localhost",6378); shard2.setPassword("111178"); List<JedisShardInfo> shards = Arrays.asList(shard1, shard2); ShardedJedis sharding = new ShardedJedis(shards); long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { String result = sharding.set("sn" + i, "n" + i); } long end = System.currentTimeMillis(); System.out.println("Simple@Sharing SET: " + ((end - start)/1000.0) + " seconds"); sharding.disconnect(); } /** * 分布式管道调用 */ public void test6shardpipelined() { JedisShardInfo shard1 = new JedisShardInfo("localhost",6379); shard1.setPassword("111111"); JedisShardInfo shard2 = new JedisShardInfo("localhost",6378); shard2.setPassword("111178"); List<JedisShardInfo> shards = Arrays.asList(shard1, shard2); ShardedJedis sharding = new ShardedJedis(shards); ShardedJedisPipeline pipeline = sharding.pipelined(); long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { pipeline.set("sp" + i, "p" + i); } List<Object> results = pipeline.syncAndReturnAll(); long end = System.currentTimeMillis(); System.out.println("Pipelined@Sharing SET: " + ((end - start)/1000.0) + " seconds"); sharding.disconnect(); } public void test7shardSimplePool() { JedisShardInfo shard1 = new JedisShardInfo("localhost",6379); shard1.setPassword("111111"); JedisShardInfo shard2 = new JedisShardInfo("localhost",6378); shard2.setPassword("111178"); List<JedisShardInfo> shards = Arrays.asList(shard1, shard2); ShardedJedisPool pool = new ShardedJedisPool(new JedisPoolConfig(), shards); ShardedJedis one = pool.getResource(); long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { String result = one.set("spn" + i, "n" + i); } long end = System.currentTimeMillis(); pool.returnResource(one); System.out.println("Simple@Pool SET: " + ((end - start)/1000.0) + " seconds"); pool.destroy(); } /** * 分布式连接池异步调用 */ public void test8shardPipelinedPool() { JedisShardInfo shard1 = new JedisShardInfo("localhost",6379); shard1.setPassword("111111"); JedisShardInfo shard2 = new JedisShardInfo("localhost",6378); shard2.setPassword("111178"); List<JedisShardInfo> shards = Arrays.asList(shard1, shard2); ShardedJedisPool pool = new ShardedJedisPool(new JedisPoolConfig(), shards); ShardedJedis one = pool.getResource(); ShardedJedisPipeline pipeline = one.pipelined(); long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { pipeline.set("sppn" + i, "n" + i); } List<Object> results = pipeline.syncAndReturnAll(); long end = System.currentTimeMillis(); pool.returnResource(one); System.out.println("Pipelined@Pool SET: " + ((end - start)/1000.0) + " seconds"); pool.destroy(); } public static void main(String[] args) { RedisClient client = new RedisClient(); // client.test1Normal(); // Simple SET: 9.562 seconds // client.test2Trans(); // Transaction SET: 0.757 seconds // client.test3Pipelined(); // Pipelined SET: 0.687 seconds // client.test4combPipelineTrans(); // Pipelined transaction: 0.787 seconds // client.test5shardNormal(); // Simple@Sharing SET: 10.988 seconds // client.test6shardpipelined(); // Pipelined@Sharing SET: 0.964 seconds // client.test7shardSimplePool(); // Simple@Pool SET: 11.567 seconds // client.test8shardPipelinedPool(); // Pipelined@Pool SET: 0.985 seconds } }
由上面测试可知,第一种自连与第二种事务,很明显事务快很多,那是不是多用事务。其实不然,如果只是插入一条数据,自连就明显比事务快。
1.5 redis使用-spring
1.6 redis使用-企业级设计
参考网站:
https://redis.io/
win7x64下的redis安装与使用
http://www.cnblogs.com/koal/p/5484916.html
redis常用命令
http://blog.csdn.net/tangsilai/article/details/7477961
Redis使用详细教程
http://www.cnblogs.com/wangyuyu/p/3786236.html
相关推荐
【描述】中提到的"所需的tomcat-redis-session-manager所有的jar包下载"意味着我们需要了解如何配置和使用这个第三方库,以便在Tomcat8环境中存储和检索用户的session数据到Redis缓存系统。测试环境使用的是JDK1.8,...
Tomcat-Redis-Session-Manager是一个开源项目,它允许Tomcat服务器将用户的session数据存储到Redis缓存系统中,而不是默认存储在本地内存或文件系统。这一设计显著提升了session管理的性能和可扩展性,尤其是在集群...
这个库的目的是将用户的会话信息存储在Redis这样的分布式内存数据库中,而不是传统的基于内存的Session管理,这样可以解决因服务器重启或负载均衡导致的Session丢失问题。 **Redis作为Session存储的优势** 1. **高...
这时,我们需要将session数据存储在集中式的缓存系统中,例如Redis。`tomcat-redis-session-manager`就是这样一款解决方案,它将Tomcat的session管理与Redis相结合,实现了跨服务器的session共享。 首先,让我们...
5. **备份与恢复**:创建Redis数据库的备份,并在需要时进行恢复操作,确保数据安全。 6. **多会话管理**:同时管理多个Redis服务器,方便对比和操作不同的数据库。 7. **监视性能**:查看Redis服务器的性能指标,如...
Redis则作为一个高性能的键值存储系统,常用于缓存和会话管理。在本项目中,Redis可以存储用户的会话信息,减少对数据库的访问,提升系统响应速度。同时,Redis还可以作为消息队列,处理异步任务,进一步提高系统的...
- **全功能支持**:`django-redis`完全兼容Django的缓存和session框架,提供与内置缓存后端相同的接口。 - **序列化**:支持多种序列化策略,如JSON、pickle等,用于将Python对象转化为可存储在Redis中的格式。 - **...
这个组件使得Web应用程序可以利用Redis分布式缓存系统来存储和管理用户的会话数据,从而实现高可用性和可扩展性。 描述中提到的 "commons-pool-1.6.jar" 是Apache Commons Pool库的1.6版本,这是一个对象池服务,...
3. **Redis**: Redis是一个内存中的数据结构存储系统,常用于做高速缓存和数据库。在这个场景中,Redis作为会话存储,负责在多个Tomcat实例之间共享用户的Session信息,确保用户在切换服务器时仍能保持登录状态。 4...
`django-redis` 实现了 Django 缓存框架的接口,使得开发者可以方便地将 Redis 作为缓存存储,存储视图、模板片段、查询结果等,有效减少数据库的负载。 其次,`django-redis` 还提供了会话后端的支持。在 Django ...
Redis则是一个高性能的键值数据库,常被用作缓存和会话存储。 描述中的“spring5+hibernate5+Spring-session-data-redis2+Spring-data-redis2整合”进一步扩展了集成环境,引入了Hibernate 5作为ORM(对象关系映射...
在Web应用中,Redis可以存储会话数据,减轻数据库的压力,提高响应速度。此外,Redis还支持发布/订阅消息模式,可以作为实时消息传递的平台,实现如通知、推送等服务。 项目中的"master"可能指的是Git仓库的主分支...
2. **Redis作为分布式缓存**:Redis是一个高性能的键值存储系统,支持多种数据结构(如字符串、哈希、列表、集合、有序集合等),适用于存储会话这类临时但频繁访问的数据。其特点是速度快,支持网络复制和持久化,...
标题中的"omcat-redis-session-manager"是一个专为Apache Tomcat设计的组件,它使得Tomcat服务器能够将用户的会话(session)数据存储在Redis内存数据库中,而非默认的基于内存或者硬盘的会话管理方式。这个解决方案...
Redis是一个高性能的键值数据库,广泛应用于缓存、消息队列和其他实时数据存储场景。PHP-REDIS扩展使得开发人员能够轻松地在PHP应用程序中利用Redis的强大功能。 1. **扩展兼容性** PHP-REDIS扩展专为PHP设计,...
这个压缩包包含了用于管理Tomcat会话的Redis会话管理器,它允许我们将Web应用的会话数据存储在Redis数据库中,而非默认的基于内存的会话管理。这样可以提高可扩展性和数据持久性,尤其适用于分布式部署或高并发的...
- `jedis-2.7.2.jar`:这是Java对Redis的客户端库,提供了与Redis服务器通信的API,使得Tomcat可以与Redis交互存储和检索Session数据。 - `commons-pool2-2.3.jar`:Apache Commons Pool 2,是一个对象池库,用于...
2. 然后,将“tomcat-redis-session-manager.jar”文件添加到Tomcat的lib目录下,这是提供Redis会话管理功能的Java库。 3. 在Tomcat的server.xml配置文件中,你需要修改`<Manager>`元素,替换为`...
Redis是流行的数据缓存系统,常用于处理高并发下的数据访问。在分布式环境中,保持用户会话(Session)的一致性是一项挑战。Tomcat作为广泛使用的Java应用服务器,提供了多种方式来实现Session共享,其中一种就是...
Redis是一种高性能的键值数据库,广泛应用于缓存、消息队列、数据存储等多个场景。而`Another-Redis-Desktop-Manager`是一款专为Redis设计的图形化管理工具,它提供了一个直观、易用的界面,帮助用户更方便地进行...