JAVA语言之Redis基础及与spring的整合总结
小标 2019-02-28 来源 : 阅读 842 评论 0

摘要:本文主要向大家介绍了JAVA语言之Redis基础及与spring的整合总结,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言之Redis基础及与spring的整合总结,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

JAVA语言之Redis基础及与spring的整合总结

简介


Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。


在项目中使用redis,主要是从两个角度去考虑:性能和并发。


性能:我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。


并发:在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问数据库。


Redis五种数据类型


String:key-value(做缓存)


   Redis中所有的数据都是字符串。命令不区分大小写,key是区分大小写的。Redis是单线程的。Redis中不适合保存内容大的数据。


   get、set


   incr:加一(生成id)


   Decr:减一


Hash:key-fields-values(做缓存)


   相当于一个key对于一个map,map中还有key-value


   使用hash对key进行归类。


   Hset:向hash中添加内容


   Hget:从hash中取内容


List:有顺序可重复


常用命令如下:


192.168.25.153:6379> lpush list1 a b c d
(integer) 4
192.168.25.153:6379> lrange list1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
192.168.25.153:6379> rpush list1 1 2 3 4
(integer) 8
192.168.25.153:6379> lrange list1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
5) "1"
6) "2"
7) "3"
8) "4"
192.168.25.153:6379>
192.168.25.153:6379> lpop list1
"d"
192.168.25.153:6379> lrange list1 0 -1
1) "c"
2) "b"
3) "a"
4) "1"
5) "2"
6) "3"
7) "4"
192.168.25.153:6379> rpop list1
"4"
192.168.25.153:6379> lrange list1 0 -1
1) "c"
2) "b"
3) "a"
4) "1"
5) "2"
6) "3"
192.168.25.153:6379>


Set:元素无顺序,不能重复


常用命令如下:


192.168.25.153:6379> sadd set1 a b c c c d
(integer) 4
192.168.25.153:6379> smembers set1
1) "b"
2) "c"
3) "d"
4) "a"
192.168.25.153:6379> srem set1 a
(integer) 1
192.168.25.153:6379> smembers set1
1) "b"
2) "c"
3) "d"
192.168.25.153:6379>


SortedSet(zset):有顺序,不能重复


常用命令如下:


192.168.25.153:6379> zadd zset1 2 a 5 b 1 c 6 d
(integer) 4
192.168.25.153:6379> zrange zset1 0 -1
1) "c"
2) "a"
3) "b"
4) "d"
192.168.25.153:6379> zrem zset1 a
(integer) 1
192.168.25.153:6379> zrange zset1 0 -1
1) "c"
2) "b"
3) "d"
192.168.25.153:6379> zrevrange zset1 0 -1
1) "d"
2) "b"
3) "c"
192.168.25.153:6379> zrange zset1 0 -1 withscores
1) "c"
2) "1"
3) "b"
4) "5"
5) "d"
6) "6"
192.168.25.153:6379> zrevrange zset1 0 -1 withscores
1) "d"
2) "6"
3) "b"
4) "5"
5) "c"
6) "1"
192.168.25.153:6379>


Key命令


设置key的过期时间。


Expire key second:设置key的过期时间


Ttl key:查看key的有效期


Persist key:清除key的过期时间。Key持久化。


192.168.25.153:6379> expire Hello 100
(integer) 1
192.168.25.153:6379> ttl Hello
(integer) 77


Redis与spring工程的整合


1 接口封装


常用的操作redis的方法提取出一个接口,分别对应单机版和集群版创建两个实现类。


1.2  接口定义


public interface JedisClient {
  String set(String key, String value);
  String get(String key);
  Boolean exists(String key);
  Long expire(String key, int seconds);
  Long ttl(String key);
  Long incr(String key);
  Long hset(String key, String field, String value);
  String hget(String key, String field);
  Long hdel(String key, String... field);
}


1.3 单机版实现类


public class JedisClientPool implements JedisClient {
  @Autowired
  private JedisPool jedisPool;
  @Override
  public String set(String key, String value) {
    Jedis jedis = jedisPool.getResource();
    String result = jedis.set(key, value);
    jedis.close();
    return result;
  }

  @Override
  public String get(String key) {
    Jedis jedis = jedisPool.getResource();
    String result = jedis.get(key);
    jedis.close();
    return result;
  }

  @Override
  public Boolean exists(String key) {
    Jedis jedis = jedisPool.getResource();
    Boolean result = jedis.exists(key);
    jedis.close();
    return result;
  }

  @Override
  public Long expire(String key, int seconds) {
    Jedis jedis = jedisPool.getResource();
    Long result = jedis.expire(key, seconds);
    jedis.close();
    return result;
  }

  @Override
  public Long ttl(String key) {
    Jedis jedis = jedisPool.getResource();
    Long result = jedis.ttl(key);
    jedis.close();
    return result;
  }

  @Override
  public Long incr(String key) {
    Jedis jedis = jedisPool.getResource();
    Long result = jedis.incr(key);
    jedis.close();
    return result;
  }

  @Override
  public Long hset(String key, String field, String value) {
    Jedis jedis = jedisPool.getResource();
    Long result = jedis.hset(key, field, value);
    jedis.close();
    return result;
 }

  @Override
  public String hget(String key, String field) {
    Jedis jedis = jedisPool.getResource();
    String result = jedis.hget(key, field);
    jedis.close();
    return result;
  }

  @Override
  public Long hdel(String key, String... field) {
    Jedis jedis = jedisPool.getResource();
    Long result = jedis.hdel(key, field);
    jedis.close();
    return result;
  }
 }


配置:applicationContext-redis.xml


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="//www.springframework.org/schema/beans"
  xmlns:context="//www.springframework.org/schema/context" xmlns:p="//www.springframework.org/schema/p"
  xmlns:aop="//www.springframework.org/schema/aop" xmlns:tx="//www.springframework.org/schema/tx"
  xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="//www.springframework.org/schema/beans //www.springframework.org/schema/beans/spring-beans4.2.xsd
  //www.springframework.org/schema/context //www.springframework.org/schema/context/spring-context4.2.xsd
  //www.springframework.org/schema/aop //www.springframework.org/schema/aop/spring-aop4.2.xsd //www.springframework.org/schema/tx //www.springframework.org/schema/tx/spring-tx4.2.xsd
  //www.springframework.org/schema/util //www.springframework.org/schema/util/spring-util4.2.xsd">

  <!-- 配置单机版的连接 -->
  <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
    <constructor-arg name="host" value="101.132.69.111"/>   
    <constructor-arg name="port" value="6379"/>
  </bean>
  <bean id="jedisClientPool" class="net.wanho.jedis.JedisClientPool"/>
 </beans>


1.4 集群版实现类


package com.taotao.jedis;
import org.springframework.beans.factory.annotation.Autowired;
import redis.clients.jedis.JedisCluster;

public class JedisClientCluster implements JedisClient {
  @Autowired
  private JedisCluster jedisCluster;
  @Override
  public String set(String key, String value) {
    return jedisCluster.set(key, value);
  }

  @Override
  public String get(String key) {
    return jedisCluster.get(key);
  }

  @Override
  public Boolean exists(String key) {
    return jedisCluster.exists(key);
  }

  @Override
  public Long expire(String key, int seconds) {
    return jedisCluster.expire(key, seconds);
  }

  @Override
  public Long ttl(String key) {
    return jedisCluster.ttl(key);
  }

  @Override
  public Long incr(String key) {
    return jedisCluster.incr(key);
  }

  @Override
  public Long hset(String key, String field, String value) {
    return jedisCluster.hset(key, field, value);
  }

  @Override
  public String hget(String key, String field) {
    return jedisCluster.hget(key, field);
  }

  @Override
  public Long hdel(String key, String... field) {
    return jedisCluster.hdel(key, field);
  }
}


Spring的配置:


 <!-- 集群版的配置 -->
<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
  <constructor-arg>
    <set>
      <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="192.168.100.185"/>
        <constructor-arg name="port" value="7001"/>
      </bean>
      <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="192.168.100.185"/>
        <constructor-arg name="port" value="7002"/>
      </bean>
      <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="192.168.100.185"/>
        <constructor-arg name="port" value="7003"/>
      </bean>
      <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="192.168.100.185"/>
        <constructor-arg name="port" value="7004"/>
      </bean>
      <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="192.168.100.185"/>
        <constructor-arg name="port" value="7005"/>
      </bean>
      <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="192.168.100.185"/>
        <constructor-arg name="port" value="7000"/>
      </bean>
    </set>
  </constructor-arg>
</bean>
<bean id="jedisClientCluster" class="net.wanho.jedis.JedisClientCluster"/>


注意:单机版和集群版不能共存,使用单机版时注释集群版的配置。使用集群版,把单机版注释。


2 封装代码测试


@Test
public void testJedisClientPool() throws Exception {
    //初始化spring容器
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-redis.xml");
    //从容器中获得JedisClient对象
    JedisClient jedisClient = applicationContext.getBean(JedisClient.class);
    //使用JedisClient对象操作redis
    jedisClient.set("jedisclient", "mytest");
    String result = jedisClient.get("jedisclient");
    System.out.println(result);
}

   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程