`

Redis客户端的几种使用

 
阅读更多

POM文件:

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.5.2.RELEASE</version>
</dependency>
<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
</dependency>

代码片段演示基于junit进行 。

 

场景一:单机Redis部署,使用Jedis

配置片段:

<bean id="jedis" class="redis.clients.jedis.Jedis">
	<constructor-arg name="host" value="192.168.0.200" />
	<constructor-arg name="port" value="6379" />
</bean>

 

代码片段:

FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("classpath:spring/scm-cache-redis-config1.xml");
Jedis jedis = (Jedis) context.getBean("jedis");
/**
 * 设置连接密码
 */
//jedis.auth("123456");
jedis.set("jedis", "jedis test");
assertEquals("jedis test", jedis.get("jedis"));

 

场景二:集群Redis部署(主从+读写分离),使用Jedis连接池(JedisPool)

配置片段:

<!--Jedis连接池的相关配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
	<!--新版是maxTotal,旧版是maxActive -->
	<property name="maxTotal">
		<value>1000</value>
	</property>
	<property name="maxIdle">
		<value>50</value>
	</property>
	<property name="testOnBorrow" value="true" />
	<property name="testOnReturn" value="true" />
</bean>
<!-- Jedis连接池 -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
	<constructor-arg name="poolConfig" ref="jedisPoolConfig" />
	<constructor-arg name="host" value="192.168.0.200" />
	<constructor-arg name="port" value="6379" type="int" />
	<constructor-arg name="timeout" value="5000" type="int" />
	<!--密码和数据库索引配置 
	<constructor-arg name="password" value="123456" />
	<constructor-arg name="database" value="0" type="int" />
	 -->
</bean>

 

代码片段:

FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("classpath:spring/scm-cache-redis-config1.xml");
JedisPool jedisPool=(JedisPool) context.getBean("jedisPool");
Jedis jedis=jedisPool.getResource();
jedis.set("jedis pool", "jedis pool test");
assertEquals("jedis pool test", jedis.get("jedis pool"));

 

场景三:集群Redis部署(主从+读写分离)+哨兵集群

说明:使用spring提供的客户端模板(RedisTemplate)进行数据操作,依赖spring的spring-data-redis-1.5.2.RELEASE.jar

 

配置片段:

<!-- Jedis连接池的相关配置 -->
<bean id="jedisPoolConfig2" class="redis.clients.jedis.JedisPoolConfig">
	<property name="maxTotal" value="1024" />
	<property name="maxIdle" value="200" />
	<property name="numTestsPerEvictionRun" value="1024" />
	<property name="timeBetweenEvictionRunsMillis" value="30000" />
	<property name="minEvictableIdleTimeMillis" value="30000" />
	<property name="softMinEvictableIdleTimeMillis" value="10000" />
	<property name="maxWaitMillis" value="1000" />
	<property name="testOnBorrow" value="true" />
</bean>
<!-- 哨兵配置 -->
<bean id="sentinelConfiguration"
	class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
	<property name="master">
		<bean class="org.springframework.data.redis.connection.RedisNode">
			<!--这个值要和Sentinel中指定的master的值一致,不然启动时找不到Sentinel会报错的 -->
			<property name="name" value="m1"></property>
		</bean>
	</property>
	<!--记住了,这里是指定Sentinel的IP和端口,不是Master和Slave的 -->
	<property name="sentinels">
		<set>
			<bean class="org.springframework.data.redis.connection.RedisNode">
				<constructor-arg name="host" value="192.168.0.200"></constructor-arg>
				<constructor-arg name="port" value="26379"></constructor-arg>
			</bean>
			<bean class="org.springframework.data.redis.connection.RedisNode">
				<constructor-arg name="host" value="192.168.0.201"></constructor-arg>
				<constructor-arg name="port" value="26379"></constructor-arg>
			</bean>
			<bean class="org.springframework.data.redis.connection.RedisNode">
				<constructor-arg name="host" value="192.168.0.202"></constructor-arg>
				<constructor-arg name="port" value="26379"></constructor-arg>
			</bean>
		</set>
	</property>
</bean>
<!-- 连接工厂 -->
<bean id="redisConnectionFactory"
	class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
	<constructor-arg name="sentinelConfig" ref="sentinelConfiguration"></constructor-arg>
	<constructor-arg name="poolConfig" ref="jedisPoolConfig2"></constructor-arg>
</bean>
<!-- redis模板工具类 -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
	<property name="connectionFactory" ref="redisConnectionFactory"></property>
	<!-- 解决使用RedisTemplate乱码问题 -->
	<property name="keySerializer">
		<bean
			class="org.springframework.data.redis.serializer.StringRedisSerializer" />
	</property>
	<property name="valueSerializer">
		<bean
			class="org.springframework.data.redis.serializer.StringRedisSerializer" />
	</property>
	<property name="hashKeySerializer">
		<bean
			class="org.springframework.data.redis.serializer.StringRedisSerializer" />
	</property>
	<property name="hashValueSerializer">
		<bean
			class="org.springframework.data.redis.serializer.StringRedisSerializer" />
	</property>
</bean>

 

代码片段:

FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("classpath:spring/scm-cache-redis-config1.xml");
RedisTemplate redisTemplate=(RedisTemplate) context.getBean("redisTemplate");
redisTemplate.opsForValue().set("xa", "西安");
assertEquals("西安",redisTemplate.opsForValue().get("xa"));

 

场景四:集群Redis部署(主从+读写分离)+哨兵集群

说明:使用Jedis自带的哨兵池(JedisSentinelPool)进行Jedis资源的管理(类似于JedisPool)

配置片段:

<!-- Jedis连接池的相关配置 -->
<bean id="jedisPoolConfig3" class="redis.clients.jedis.JedisPoolConfig">
	<property name="maxTotal" value="1024" />
	<property name="maxIdle" value="200" />
	<property name="numTestsPerEvictionRun" value="1024" />
	<property name="timeBetweenEvictionRunsMillis" value="30000" />
	<property name="minEvictableIdleTimeMillis" value="30000" />
	<property name="softMinEvictableIdleTimeMillis" value="10000" />
	<property name="maxWaitMillis" value="1000" />
	<property name="testOnBorrow" value="true" />
</bean>
<!-- JedisSentinelPool池配置 -->
<bean id="jedisSentinelPool" class="redis.clients.jedis.JedisSentinelPool">
	<!--这个值要和Sentinel中指定的master的值一致,不然启动时找不到Sentinel会报错的 -->
<constructor-arg index="0" value="m1" />
<constructor-arg index="1">
    <set>
	<value>192.168.0.200:26379</value>
	<value>192.168.0.201:26379</value>
	<value>192.168.0.202:26379</value>
    </set>
</constructor-arg>
<constructor-arg index="2" ref="jedisPoolConfig3" />
</bean>

 

 

代码片段:

FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("classpath:spring/scm-cache-redis-config1.xml");
JedisSentinelPool jedisSentinelPool=(JedisSentinelPool) context.getBean("jedisSentinelPool");
Jedis jedis = null;
try {
    jedis = jedisSentinelPool.getResource();
    jedis.set("bj", "北京");
    assertEquals("北京", jedis.get("bj"));
} catch (Exception e) {
    e.printStackTrace();
} finally {
	jedisSentinelPool.returnBrokenResource(jedis);
}
jedisSentinelPool.close();

 

场景五:分片(多Master,独立)+一致性HASH

配置片段:

 

<!-- Jedis连接池的相关配置 -->
	<bean id="jedisPoolConfig4" class="redis.clients.jedis.JedisPoolConfig">
		<property name="maxTotal" value="1024" />
		<property name="maxIdle" value="200" />
		<property name="numTestsPerEvictionRun" value="1024" />
		<property name="timeBetweenEvictionRunsMillis" value="30000" />
		<property name="minEvictableIdleTimeMillis" value="30000" />
		<property name="softMinEvictableIdleTimeMillis" value="10000" />
		<property name="maxWaitMillis" value="1000" />
		<property name="testOnBorrow" value="true" />
	</bean>
    <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool">
        <constructor-arg index="0" ref="jedisPoolConfig4" />
        <constructor-arg index="1">
            <list>
                <bean class="redis.clients.jedis.JedisShardInfo">
                    <constructor-arg name="host" value="192.168.0.200" />
                    <constructor-arg name="name" value="master:200" />
                    <constructor-arg name="port" value="6379" />
                    <constructor-arg name="timeout" value="5000" />
                    <constructor-arg name="weight" value="1" />
                    <!-- <property name="password" value="123456" /> -->
                </bean>
                <bean class="redis.clients.jedis.JedisShardInfo">
                    <constructor-arg name="host" value="192.168.0.201" />
                    <constructor-arg name="name" value="master:201" />
                    <constructor-arg name="port" value="6379" />
                    <constructor-arg name="timeout" value="5000" />
                    <constructor-arg name="weight" value="1" />
                    <!-- <property name="password" value="123456" /> -->
                </bean>
                <bean class="redis.clients.jedis.JedisShardInfo">
                    <constructor-arg name="host" value="192.168.0.202" />
                    <constructor-arg name="name" value="master:202" />
                    <constructor-arg name="port" value="6379" />
                    <constructor-arg name="timeout" value="5000" />
                    <constructor-arg name="weight" value="1" />
                    <!-- <property name="password" value="123456" /> -->
                </bean>
            </list>
        </constructor-arg>
    </bean>
 

 

代码片段:

FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("classpath:spring/scm-cache-redis-config1.xml");
ShardedJedisPool shardedJedisPool=(ShardedJedisPool) context.getBean("shardedJedisPool");
ShardedJedis shardedJedis = shardedJedisPool.getResource();;
try {
	shardedJedis.set("cw", "宠物");
	assertEquals("宠物", shardedJedis.get("cw"));
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if(shardedJedis!=null) {
	shardedJedis.close();
    }
}

 

场景六:redis+cluster

配置片段:

    <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
        <constructor-arg index="0">
        	<!-- 集群中的任意节点,个数不限 -->
            <set>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.0.200"/>
                    <constructor-arg name="port" value="7000"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.0.200"/>
                    <constructor-arg name="port" value="7001"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.0.201"/>
                    <constructor-arg name="port" value="7000"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.0.201"/>
                    <constructor-arg name="port" value="7001"/>
                </bean>
            </set>
        </constructor-arg>
    </bean>

 

代码片段:

FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("classpath:spring/scm-cache-redis-config1.xml");
JedisCluster jedisCluster=(JedisCluster) context.getBean("jedisCluster");
try {
	jedisCluster.set("mary", "麦瑞");
	assertEquals("麦瑞", jedisCluster.get("mary"));
} catch (Exception e) {
	e.printStackTrace();
} finally {
	if(jedisCluster!=null) {
		try {
			jedisCluster.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

分享到:
评论

相关推荐

    windows RedisClient redis客户端

    在Windows环境中使用Redis客户端时,用户需要注意以下几点: - **安装和配置**:确保已正确安装Redis服务,并配置了客户端连接的参数,如主机名、端口号、密码等。 - **性能监控**:客户端应提供性能指标,如内存...

    redis客户端

    使用Redis客户端时,需要注意以下几点: - **安全性**:确保在连接远程Redis服务器时使用安全的网络环境,避免敏感数据泄露。 - **性能优化**:理解Redis的数据结构特性,合理使用不同类型的键以提高访问速度和存储...

    redis客户端绿色免安装

    总的来说,"redis客户端绿色免安装本地版"为用户提供了一种快速、简便的方式来管理和调试Redis数据库,尤其适合开发人员和系统管理员在本地环境中进行测试和调试。通过`RedisStudio.exe`这样的工具,用户可以更高效...

    redis客户端及jar包.zip

    在本压缩包中,包含了几种与Redis相关的资源,包括客户端工具和Java客户端库。 1. **Redis桌面管理器** (redis-desktop-manager-0.8.8.384.exe): 这是一款图形化用户界面的Redis客户端,允许用户直观地管理和操作...

    Redis客户端Java服务接口封装

    `RedisClientTemplate`可能包含的方法包括但不限于以下几种: 1. **基本的键值操作**:如`set(key, value)`用于设置键值对,`get(key)`用于获取键对应的值,`delete(key)`用于删除键,以及`exists(key)`用于检查键...

    redis官网最新客户端

    Redis客户端的基本操作包括但不限于以下几点: 1. **连接与断开**:客户端需要连接到Redis服务器,通过指定服务器的IP地址和端口号实现。完成任务后,客户端会断开与服务器的连接,释放资源。 2. **命令执行**:...

    Node.js-deno的redis客户端的一个实验性实现

    标题 "Node.js-deno的redis客户端的一个实验性实现" 指的是在 Deno 这个 JavaScript/TypeScript 运行环境中对 Redis 客户端的一种初步尝试。Deno 是由 Ryan Dahl,也是 Node.js 的创始人,推出的一个新的 JavaScript...

    redis软件、redis客户端、redis可视化工具RedisDesktopManager,redis教程

    Redis客户端可以是各种编程语言的库,如Python的redis-py、Java的Jedis、Node.js的ioredis等。这些客户端库提供了一套完整的API,方便开发者在应用中与Redis服务器进行交互。客户端负责将应用程序的请求转换为Redis...

    Redis客户端与服务端安装包

    在这个“Redis客户端与服务端安装包”中,我们包含了两个关键组件: 1. **Redis服务端-x64-3.2.10**:这是Redis服务器的64位版本,版本号为3.2.10。Redis的版本迭代较快,每个新版本通常会引入新的特性和性能优化。...

    由 Top10 开发和使用的惯用 Scala Redis 客户端 这是一项正在进行的工作,虽然在生产中使用,但应将其视为在生产中

    在选择Scala Redis客户端时,有几个关键知识点是开发者需要了解的: 1. **连接管理**:客户端需要提供连接池支持,以复用TCP连接,减少建立和关闭连接的开销。同时,客户端应该能够处理连接故障,如自动重连。 2. ...

    redis服务端、客户端

    2. 开发语言客户端:几乎所有的主流编程语言(如Python、Java、Node.js、Go等)都有对应的Redis客户端库,如Python的`redis-py`,Java的`Jedis`,Node.js的`ioredis`等。这些库提供了丰富的API,方便开发者在应用...

    RedisDesktopManager可视化客户端

    在使用RedisDesktopManager时,需要注意以下几点: - **安全考虑**:由于可视化客户端直接暴露了数据库操作,因此在公共网络环境下使用时需谨慎,避免敏感数据泄露。 - **版本兼容性**:确保使用的RedisDesktop...

    mac redis client

    在Mac上,常见的Redis客户端有以下几种: 1. **Redis Desktop Manager (RDM)**:这是一个跨平台的Redis管理工具,包括macOS版本。文件名"rdm.app"可能就是这个应用的打包文件,它提供了用户友好的界面,支持多窗口...

    redis实现加锁的几种方法示例详解

    本文主要给大家介绍了关于redis实现加锁的几种方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 1. redis加锁分类 redis能用的的加锁命令分表是INCR、SETNX、SET 2. 第一种锁命令INCR 这种...

    易语言-Redis协议客户端易语言模块

    该模块实现了Redis客户端协议的封装,这意味着开发者可以通过易语言调用该模块,直接与Redis服务器进行交互,执行如GET、SET、INCR、PUSH、POP等基本操作,以及更复杂的命令如LUA脚本执行、事务处理等。这极大地简化...

    go-redis:GNU Octave Redis客户端(也适用于Matlab)

    在 Octave 和 Matlab 中使用 `go-redis` 需要了解以下几个核心概念: 1. **键值对操作**:Redis 基于键值对存储,`go-redis` 提供了设置(set)、获取(get)、删除(delete)等基本操作。例如,可以将一个字符串或...

    redis的安装包大全

    同样在命令行中,输入`redis-cli.exe`即可打开Redis客户端。如果设置了密码,需要在连接时提供:`redis-cli.exe -h localhost -p 6379 -a yourpassword`。 #### 5. 监控与管理 Redis提供了命令行工具进行数据操作和...

    redis-desktop-manager-2019.4.0纯净版(你清楚的).zip

    安装和使用此版本的RDM,用户无需具备深厚的Redis知识,只需简单几步即可连接到本地或远程的Redis服务器。 在使用Redis Desktop Manager时,用户可以执行以下操作: 1. **连接管理**:创建、编辑和删除Redis服务器...

    redis工具包

    虽然没有具体的信息关于这个工具包的内容,但我们可以推测它可能包括以下几种类型的资源: 1. **Redis客户端库**:用于不同编程语言(如Java、Python、C#等)连接Redis服务器的客户端库。 2. **Redis命令行工具**:...

    ServiceStack.Redis 3.9

    ServiceStack.Redis 3.9是针对C#开发者的一个重要的Redis客户端库,它是ServiceStack.Redis系列中的一个重要里程碑,尤其因为这是其作为免费版本的最后一个发行版。Redis是一个高性能、开源、内存中的数据结构存储...

Global site tag (gtag.js) - Google Analytics