`

数据存储与缓存1-redis-会话缓存-C

    博客分类:
  • data
 
阅读更多
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内存大小
#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包集合下载(tomcat8)

    【描述】中提到的"所需的tomcat-redis-session-manager所有的jar包下载"意味着我们需要了解如何配置和使用这个第三方库,以便在Tomcat8环境中存储和检索用户的session数据到Redis缓存系统。测试环境使用的是JDK1.8,...

    tomcat-redis-session-manager的jar包-包含Tomcat7和Tomcat8

    Tomcat-Redis-Session-Manager是一个开源项目,它允许Tomcat服务器将用户的session数据存储到Redis缓存系统中,而不是默认存储在本地内存或文件系统。这一设计显著提升了session管理的性能和可扩展性,尤其是在集群...

    tomcat-redis-session-manager jar包

    这个库的目的是将用户的会话信息存储在Redis这样的分布式内存数据库中,而不是传统的基于内存的Session管理,这样可以解决因服务器重启或负载均衡导致的Session丢失问题。 **Redis作为Session存储的优势** 1. **高...

    tomcat-redis-session-manager

    这时,我们需要将session数据存储在集中式的缓存系统中,例如Redis。`tomcat-redis-session-manager`就是这样一款解决方案,它将Tomcat的session管理与Redis相结合,实现了跨服务器的session共享。 首先,让我们...

    Another-Redis-Desktop-Manager.1.5.6

    5. **备份与恢复**:创建Redis数据库的备份,并在需要时进行恢复操作,确保数据安全。 6. **多会话管理**:同时管理多个Redis服务器,方便对比和操作不同的数据库。 7. **监视性能**:查看Redis服务器的性能指标,如...

    SpringMVC-Mybatis-Shiro-redis

    Redis则作为一个高性能的键值存储系统,常用于缓存和会话管理。在本项目中,Redis可以存储用户的会话信息,减少对数据库的访问,提升系统响应速度。同时,Redis还可以作为消息队列,处理异步任务,进一步提高系统的...

    django-redis-chs-readthedocs-io-zh_CN-latest.zip

    - **全功能支持**:`django-redis`完全兼容Django的缓存和session框架,提供与内置缓存后端相同的接口。 - **序列化**:支持多种序列化策略,如JSON、pickle等,用于将Python对象转化为可存储在Redis中的格式。 - **...

    tomcat-redis-session-manager-1.2-tomcat-6&7

    这个组件使得Web应用程序可以利用Redis分布式缓存系统来存储和管理用户的会话数据,从而实现高可用性和可扩展性。 描述中提到的 "commons-pool-1.6.jar" 是Apache Commons Pool库的1.6版本,这是一个对象池服务,...

    tomcat-redis-session-manager tomcat+nginx+redis集群所需jar

    3. **Redis**: Redis是一个内存中的数据结构存储系统,常用于做高速缓存和数据库。在这个场景中,Redis作为会话存储,负责在多个Tomcat实例之间共享用户的Session信息,确保用户在切换服务器时仍能保持登录状态。 4...

    django-redis组件

    `django-redis` 实现了 Django 缓存框架的接口,使得开发者可以方便地将 Redis 作为缓存存储,存储视图、模板片段、查询结果等,有效减少数据库的负载。 其次,`django-redis` 还提供了会话后端的支持。在 Django ...

    Spring-session2整合spring5+redis

    Redis则是一个高性能的键值数据库,常被用作缓存和会话存储。 描述中的“spring5+hibernate5+Spring-session-data-redis2+Spring-data-redis2整合”进一步扩展了集成环境,引入了Hibernate 5作为ORM(对象关系映射...

    SpringMVC-Mybatis-Shiro-redis-master

    在Web应用中,Redis可以存储会话数据,减轻数据库的压力,提高响应速度。此外,Redis还支持发布/订阅消息模式,可以作为实时消息传递的平台,实现如通知、推送等服务。 项目中的"master"可能指的是Git仓库的主分支...

    tomcat-redis-session-manager-1.2-tomcat-7-java-7

    2. **Redis作为分布式缓存**:Redis是一个高性能的键值存储系统,支持多种数据结构(如字符串、哈希、列表、集合、有序集合等),适用于存储会话这类临时但频繁访问的数据。其特点是速度快,支持网络复制和持久化,...

    omcat-redis-session-manager的jar包-包含Tomcat7和Tomcat8

    标题中的"omcat-redis-session-manager"是一个专为Apache Tomcat设计的组件,它使得Tomcat服务器能够将用户的会话(session)数据存储在Redis内存数据库中,而非默认的基于内存或者硬盘的会话管理方式。这个解决方案...

    PHP-REDIS扩展

    Redis是一个高性能的键值数据库,广泛应用于缓存、消息队列和其他实时数据存储场景。PHP-REDIS扩展使得开发人员能够轻松地在PHP应用程序中利用Redis的强大功能。 1. **扩展兼容性** PHP-REDIS扩展专为PHP设计,...

    tomcat-redis-session-manager-master.zip

    这个压缩包包含了用于管理Tomcat会话的Redis会话管理器,它允许我们将Web应用的会话数据存储在Redis数据库中,而非默认的基于内存的会话管理。这样可以提高可扩展性和数据持久性,尤其适用于分布式部署或高并发的...

    tomcat-redis-session-manager.zip

    - `jedis-2.7.2.jar`:这是Java对Redis的客户端库,提供了与Redis服务器通信的API,使得Tomcat可以与Redis交互存储和检索Session数据。 - `commons-pool2-2.3.jar`:Apache Commons Pool 2,是一个对象池库,用于...

    tomcat-redis-session-jar

    2. 然后,将“tomcat-redis-session-manager.jar”文件添加到Tomcat的lib目录下,这是提供Redis会话管理功能的Java库。 3. 在Tomcat的server.xml配置文件中,你需要修改`&lt;Manager&gt;`元素,替换为`...

    redis-tomcat8以上集群所需要的jar :tomcat-redis-session-manager-master 等

    Redis是流行的数据缓存系统,常用于处理高并发下的数据访问。在分布式环境中,保持用户会话(Session)的一致性是一项挑战。Tomcat作为广泛使用的Java应用服务器,提供了多种方式来实现Session共享,其中一种就是...

    Another-Redis-Desktop-Manager Redis客户端

    Redis是一种高性能的键值数据库,广泛应用于缓存、消息队列、数据存储等多个场景。而`Another-Redis-Desktop-Manager`是一款专为Redis设计的图形化管理工具,它提供了一个直观、易用的界面,帮助用户更方便地进行...

Global site tag (gtag.js) - Google Analytics