REDIS动态连接(20200805)

2 篇文章 0 订阅

引入依赖包

<dependency>
    <groupId>
redis.clients</groupId>
    <artifactId>
jedis</artifactId>
    <version>
2.9.0</version>
</dependency>
<dependency>
    <groupId>
org.springframework.data</groupId>
    <artifactId>
spring-data-redis</artifactId>
    <version>
2.3.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>
io.lettuce</groupId>
    <artifactId>
lettuce-core</artifactId>
    <version>
6.0.0.RC1</version>
</dependency>

 

 

注意:lettuce-corespring-data-redis的版本有要求,版本低了可能不支持的,spring-data-redis需要2.x以上的,lettuce-core测过5.0.4.RELEASE是不支持的

 

测试代码一

public class RedisMain {
   
private void connectRedis(){
        RedisStandaloneConfiguration redisStandaloneConfiguration =
new RedisStandaloneConfiguration();
       
redisStandaloneConfiguration.setHostName("127.0.0.1");
       
redisStandaloneConfiguration.setDatabase(8);
        
redisStandaloneConfiguration.setPort(6379);
       
redisStandaloneConfiguration.setPassword("Fullsee@123");

       
LettuceClientConfiguration.LettuceClientConfigurationBuilder lettuceClientConfigurationBuilder = LettuceClientConfiguration.builder();
        
LettuceConnectionFactory factory = new LettuceConnectionFactory(redisStandaloneConfiguration,
               
lettuceClientConfigurationBuilder.build());
       
factory.afterPropertiesSet();
       
RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
       
redisTemplate.setConnectionFactory(factory);
       
redisTemplate.afterPropertiesSet();
       
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
       
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
       
redisTemplate.setKeySerializer(new StringRedisSerializer());
       
redisTemplate.setValueSerializer(new StringRedisSerializer());

       
System.out.println(redisTemplate.getClientList());
       
Object o = redisTemplate.opsForHash().get("ALARM_LEVEL_MAPPING:around","0001");
       
System.out.println(o);
   
}
   
public static void main(String[] args) {
        RedisMain redisMain =
new RedisMain();
       
redisMain.connectRedis();
   
}
}

 

 

代码解读

测试代码二

package com.fullsee.redis;

import
org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import
org.springframework.data.redis.connection.RedisConfiguration;
import
org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import
org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
import
org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import
org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
import
org.springframework.data.redis.core.RedisTemplate;
import
org.springframework.data.redis.serializer.StringRedisSerializer;

import
java.time.Duration;

/**
 *
<li>文件名称: 题目名称</li>
 
* <li>文件描述: 题目名称 功能描述</li>
 
* <li>版权所有: 版权所有© 2005-2019</li>
 
* <li> : Fullsee</li>
 
* <li>内容摘要: </li>
 
* <li>其他说明:</li>
 
* <li>完成日期: 2020-08-05 18:15 </li>
 
* <li>修改记录: </li>
 
*
 * @author songyunbing
 * @version
产品版本
 */
public class RedisMain2 {
   
/**
     *
自定义LettuceConnectionFactory,这一步的作用就是返回根据你传入参数而配置的
     * LettuceConnectionFactory
     * 也可以说是LettuceConnectionFactory的原理了,
     * 后面我会详细讲解的,各位同学也可先自己看看源码

     这里定义的方法 createLettuceConnectionFactory,方便快速使用
     */
   
private  LettuceConnectionFactory createLettuceConnectionFactory(
           
int dbIndex, String hostName, int port, String password,
            int
maxIdle,int minIdle,int maxActive,
           
Long maxWait, Long timeOut,Long shutdownTimeOut){

       
//redis配置
       
RedisConfiguration redisConfiguration = new
               
RedisStandaloneConfiguration(hostName,port);
       
((RedisStandaloneConfiguration) redisConfiguration).setDatabase(dbIndex);
       
((RedisStandaloneConfiguration) redisConfiguration).setPassword(password);

        
//连接池配置
       
GenericObjectPoolConfig genericObjectPoolConfig =
               
new GenericObjectPoolConfig();
       
genericObjectPoolConfig.setMaxIdle(maxIdle);
       
genericObjectPoolConfig.setMinIdle(minIdle);
       
genericObjectPoolConfig.setMaxTotal(maxActive);
       
genericObjectPoolConfig.setMaxWaitMillis(maxWait);

       
//redis客户端配置
       
LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder
                builder =  LettucePoolingClientConfiguration.builder().
                commandTimeout(Duration.ofMillis(timeOut))
;

       
builder.shutdownTimeout(Duration.ofMillis(shutdownTimeOut));
       
builder.poolConfig(genericObjectPoolConfig);
       
LettuceClientConfiguration lettuceClientConfiguration = builder.build();

       
//根据配置和客户端配置创建连接
       
LettuceConnectionFactory lettuceConnectionFactory = new
               
LettuceConnectionFactory(redisConfiguration,lettuceClientConfiguration);
       
lettuceConnectionFactory .afterPropertiesSet();

        return
lettuceConnectionFactory;
   
}
   
public static void main(String[] args) {
        RedisMain2 redisMain2 =
new RedisMain2();
       
LettuceConnectionFactory factory = redisMain2.createLettuceConnectionFactory(8, "127.0.0.1", 6379, "Fullsee@123"
               
, 1024, 200, 200, 10000l, 10000l, 10000l);
       
RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
       
redisTemplate.setConnectionFactory(factory);
       
redisTemplate.afterPropertiesSet();
       
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
       
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
       
redisTemplate.setKeySerializer(new StringRedisSerializer());
       
redisTemplate.setValueSerializer(new StringRedisSerializer());

       
System.out.println(redisTemplate.getClientList());
       
Object o = redisTemplate.opsForHash().get("ALARM_LEVEL_MAPPING:around","0001");
       
System.out.println(o);
   
}
}

 

 

Jedis和redisTemplate对应关系

String类型结构

Redis

RedisTemplate rt

set key value

rt.opsForValue().set("key","value")

get key

rt.opsForValue().get("key")

del key

rt.delete("key")

strlen key

rt.opsForValue().size("key")

getset key value

rt.opsForValue().getAndSet("key","value")

getrange key start end

rt.opsForValue().get("key",start,end)

append key value

rt.opsForValue().append("key","value")

Hash结构

hmset key field1 value1 field2 value2...

rt.opsForHash().putAll("key",map) //map是一个集合对象

hset key field value

rt.opsForHash().put("key","field","value")

hexists key field

rt.opsForHash().hasKey("key","field")

hgetall key

rt.opsForHash().entries("key")  //返回Map对象

hvals key

rt.opsForHash().values("key") //返回List对象

hkeys key

rt.opsForHash().keys("key") //返回List对象

hmget key field1 field2...

rt.opsForHash().multiGet("key",keyList)

hsetnx key field value

rt.opsForHash().putIfAbsent("key","field","value"

hdel key field1 field2

rt.opsForHash().delete("key","field1","field2")

hget key field

rt.opsForHash().get("key","field")

 

 

 

 

 

 

 

 

 

 

 

 

List结构

 

lpush list node1 node2 node3...
 

rt.opsForList().leftPush("list","node") 

 

rt.opsForList().leftPushAll("list",list) //list是集合对象

 

rpush list node1 node2 node3...

rt.opsForList().rightPush("list","node") 

 

rt.opsForList().rightPushAll("list",list) //list是集合对象

 

lindex key index

rt.opsForList().index("list", index)

 

llen key

rt.opsForList().size("key")

 

lpop key

rt.opsForList().leftPop("key")

 

rpop key

rt.opsForList().rightPop("key")

 

lpushx list node

rt.opsForList().leftPushIfPresent("list","node")

 

rpushx list node

rt.opsForList().rightPushIfPresent("list","node")

 

lrange list start end

rt.opsForList().range("list",start,end)

 

lrem list count value

rt.opsForList().remove("list",count,"value")

 

lset key index value

rt.opsForList().set("list",index,"value")

 

ltrim key start stop

/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Set结构

 

sadd key member1 member2...

rt.boundSetOps("key").add("member1","member2",...)

 

rt.opsForSet().add("key", set) //set是一个集合对象

 

scard key

rt.opsForSet().size("key")

 

sidff key1 key2

rt.opsForSet().difference("key1","key2") //返回一个集合对象

 

sinter key1 key2

rt.opsForSet().intersect("key1","key2")//同上

 

sunion key1 key2

rt.opsForSet().union("key1","key2")//同上

 

sdiffstore des key1 key2

rt.opsForSet().differenceAndStore("key1","key2","des")

 

sinter des key1 key2

rt.opsForSet().intersectAndStore("key1","key2","des")

 

sunionstore des key1 key2

rt.opsForSet().unionAndStore("key1","key2","des")

 

sismember key member

rt.opsForSet().isMember("key","member")

 

smembers key

rt.opsForSet().members("key")

 

spop key

rt.opsForSet().pop("key")

 

srandmember key count

rt.opsForSet().randomMember("key",count)

 

srem key member1 member2...

rt.opsForSet().remove("key","member1","member2",...)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

有些命令Spring所提供的RedisTemplate并不能支持,比如linsert命令,这个时候可以使用更为底层的方法,如代码:

  1.     try {
  2.                       rt.getConnectionFactory().getConnection().lInsert("list".getBytes("utf-8"),
  3.                                       RedisListCommands.Position.BEFORE,
  4.                                       "node2".getBytes("utf-8"), "before_node2".getBytes("utf-8"));
  5.                } catch (UnsupportedEncodingException e) {
  6.                        // TODO Auto-generated catch block
  7.                        e.printStackTrace();
  8. }
     

 

参考

https://segmentfault.com/q/1010000020636384

https://blog.csdn.net/qq_42394457/article/details/94493027

https://blog.csdn.net/groggy_puppy/article/details/83379948

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值