博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis基础及与spring的整合总结
阅读量:6846 次
发布时间:2019-06-26

本文共 6235 字,大约阅读时间需要 20 分钟。

简介

Redis是一个开源的使用ANSI 编写、支持网络、可基于内存亦可持久化的日志型、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) 4192.168.25.153:6379> lrange list1 0 -11) "d"2) "c"3) "b"4) "a"192.168.25.153:6379> rpush list1 1 2 3 4(integer) 8192.168.25.153:6379> lrange list1 0 -11) "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 -11) "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 -11) "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) 4192.168.25.153:6379> smembers set11) "b"2) "c"3) "d"4) "a"192.168.25.153:6379> srem set1 a(integer) 1192.168.25.153:6379> smembers set11) "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) 4192.168.25.153:6379> zrange zset1 0 -11) "c"2) "a"3) "b"4) "d"192.168.25.153:6379> zrem zset1 a(integer) 1192.168.25.153:6379> zrange zset1 0 -11) "c"2) "b"3) "d"192.168.25.153:6379> zrevrange zset1 0 -11) "d"2) "b"3) "c"192.168.25.153:6379> zrange zset1 0 -1 withscores1) "c"2) "1"3) "b"4) "5"5) "d"6) "6"192.168.25.153:6379> zrevrange zset1 0 -1 withscores1) "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) 1192.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

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的配置:

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

2 封装代码测试

@Testpublic 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);}

转载于:https://blog.51cto.com/13477015/2335617

你可能感兴趣的文章
eclipse中maven debug 提示找不到路径和指针不显示变量内容问题
查看>>
div块上下左右居中
查看>>
eclipse远程debug tomcat
查看>>
CentOs6.5基本环境配置(六):Maven配置
查看>>
用canvas画一颗花心
查看>>
C++ 中实例化用与不用new的区别-笔记
查看>>
Python 创建Django项目
查看>>
JS获取当前项目的根路径
查看>>
python 初次使用twisted
查看>>
负载均衡性能优化演进之路
查看>>
操作系统引导区代码
查看>>
程序员有五种错误不应犯
查看>>
Salt Rosters
查看>>
无线认证知识点
查看>>
QinQ工作原理
查看>>
使用jQuery绑定事件,为回调函数传递参数遇到的坑
查看>>
Jersey 2.x 基于 Servlet 的服务器端应用
查看>>
dom4j创建和解析xml
查看>>
整理些常用小工具
查看>>
解决Outlook“无法打开默认电子邮件文件夹“错误,事件ID9646
查看>>