博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第三章 Redis 客户端的使用 Java版【Redis入门教程】
阅读量:7043 次
发布时间:2019-06-28

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

Redis入门教程目录

Redis客户端

我们知道Redis是C语言开发的,如果想用别的语言操作Redis,那就需要用到别的语言的客户端。我们前面介绍过Redis的其中一个特性就是客户端多,几乎所有语言都有Redis的客户端,比如Java语言的JedisPython语言的redis-pyPHP语言的PredisGo语言的Redigo等等。这些客户端也都是遵循了Redis给的协议,然后按照协议去开发出对应语言的客户端。如Redis官方提供的redis-cli客户端其实就是一个Shell客户端

Jedis的使用

本篇我就讲Java语言的客户端Jedis,使用其他语言的读者可以阅读相关客户端的文档。要使用Jedis,首先确保我们已经添加了Jedis的依赖,这里我使用Maven配置

redis.clients
jedis
3.0.1
复制代码

Jedis的直连

import redis.clients.jedis.Jedis; public class RedisJava {    public static void main(String[] args) {        //连接本地的 Redis 服务        Jedis jedis = new Jedis("127.0.0.1",6379);        jedis.set("name", "redis");        System.out.println("redis 存储的字符串为: "+ jedis.get("name"));    }}复制代码

运行以上Java程序,输出

redis 存储的字符串为: redis复制代码

Jedis的连接池

import redis.clients.jedis.Jedis; public class RedisPool {    public static void main(String[] args) {        //初始化连接池        JedisPoolConfig config=new JedisPoolConfig();        JedisPool jedisPool=new JedisPool(config,"127.0.0.1",6379);                Jedis jedis=null;        try{            jedis=jedisPool.getResource(); // 获取连接            jedis.set("name", "redis"); // 设置值            String value=jedis.get("name"); // 获取值            System.out.println(value);        }catch(Exception e){            e.printStackTrace();        }finally{            if(jedis!=null){                jedis.close();            }            if(jedisPool!=null){                jedisPool.close();            }        }    }}复制代码

运行以上Java程序,输出

redis复制代码

Spring-data-redis的使用

前面我们使用了Jedis实现对Redis的操作,这里再介绍使用基于Spring的Spring-data-redis操作Redis,Spring就不用我过多介绍了,相信学Java的都认识它。

Jedis与Spring-data-redis的区别和关系:

  • Jedis:Jedis是Redis的Java客户端,通过它可以对Redis进行操作,与之功能相似的还包括Lettuce等。
  • Spring-data-redis:Spring-data-redis对Redis的操作依赖Jedis或Lettuce,实际上是对Jedis、Lettuce这些客户端的封装,提供一套与客户端无关的api供应用使用,从而你在从一个redis客户端切换为另一个客户端,不需要修改业务代码。

添加依赖

在使用Spring-data-redis前首先确保我们已经添加了相关依赖,这里我使用Maven配置

org.springframework
spring-core
5.1.3.RELEASE
org.springframework
spring-web
5.1.3.RELEASE
org.springframework
spring-jdbc
5.1.3.RELEASE
org.springframework
spring-webmvc
5.1.3.RELEASE
org.springframework
spring-context
5.1.3.RELEASE
org.springframework
spring-context-support
5.1.3.RELEASE
org.springframework
spring-aop
5.1.3.RELEASE
org.springframework
spring-test
5.1.3.RELEASE
test
mysql
mysql-connector-java
8.0.13
javax.servlet
javax.servlet-api
4.0.1
provided
redis.clients
jedis
2.7.0
org.springframework.data
spring-data-redis
1.5.0.RELEASE
复制代码

Spring和Spring-data-redis整合

通过XML配置文件将Spring-data-redis连接池Redis模板注入到Spring容器中。Redis模板有2个,分别是RedisTemplateStringRedisTemplate,这两个模板的区别是采用的序列化策略不一样,前者采用的是Java原生的序列化后者采用的是String序列化。模板的好处是为Redis的交互提供了高级抽象,用户无需关注Redis的连接管理、序列化等问题,把更多注意力放在业务上。 redis.properties:

#ip地址redis.host.ip=192.168.174.129#端口号redis.port=6379#如果有密码redis.password=#客户端超时时间单位是毫秒 默认是2000redis.timeout=3000#最大空闲数redis.maxIdle=6#连接池的最大数据库连接数。设为0表示无限制,如果是jedis 2.4以后用redis.maxTotal#redis.maxActive=600maxIdle#控制一个pool可分配多少个jedis实例,用来替换上面的redis.maxActive,如果是jedis 2.4以后用该属性redis.maxTotal=20#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。redis.maxWaitMillis=3000#连接的最小空闲时间 默认1800000毫秒(30分钟)redis.minEvictableIdleTimeMillis=300000#每次释放连接的最大数目,默认3redis.numTestsPerEvictionRun=4#逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1redis.timeBetweenEvictionRunsMillis=30000复制代码

spring-redis.xml:

复制代码

SpringSpring-data-redis整合完成之后,一般为了方便使用模板,我们会将模板进一步封装成自己的Dao工具类,这里我仅封装几个操作,如下 RedisDaoImpl.java

@Repositorypublic class RedisDaoImpl implements RedisDao {    @Autowired    StringRedisTemplate stringRedisTemplate;    public void setString(Object redisKey, Object redisValue) {        ValueOperations valueOperations = stringRedisTemplate.opsForValue();        valueOperations.set(redisKey, redisValue);    }    public Object getString(Object redisKey) {        ValueOperations valueOperations = stringRedisTemplate.opsForValue();        return valueOperations.get(redisKey);    }    /**     * @description: 通过redisKey 批量(map)设置redisValue(hash)     * @param: [redisKey, redisValue]     * @return: void     * @author: Xue 8     * @date: 2019/2/14     */    public void setHashAll(Object redisKey, Map
redisValue){ HashOperations hashOperations = stringRedisTemplate.opsForHash(); hashOperations.putAll(redisKey, redisValue); } /** * @description: 通过redisKey、hashKey、hashValue设置单个redisValue(hash) * @param: [redisKey, hashKey, hashValue] * @return: void * @author: Xue 8 * @date: 2019/2/14 */ public void setHash(Object redisKey, Object hashKey, Object hashValue){ HashOperations hashOperations = stringRedisTemplate.opsForHash(); hashOperations.put(redisKey, hashKey, hashValue); } /** * @description: 通过redisValue、hashKey获取hashValue * @param: [redisKey, hashKey] * @return: java.lang.Object * @author: Xue 8 * @date: 2019/2/14 */ public Object getHashValue(Object redisKey, Object hashKey){ HashOperations hashOperations = stringRedisTemplate.opsForHash(); return hashOperations.get(redisKey, hashKey); } /** * @description: 通过redisKey获取hash * @param: [redisKey] * @return: java.util.Map
* @author: Xue 8 * @date: 2019/2/14 */ public Map
getHash(Object redisKey){ HashOperations hashOperations = stringRedisTemplate.opsForHash(); return hashOperations.entries(redisKey); } /** * @description: 通过redisKey设置redisValue(List) * @param: [redisKey, redisValue] * @return: void * @author: Xue 8 * @date: 2019/2/14 */ public void setList(Object redisKey, List
redisValue){ ListOperations listOperations = stringRedisTemplate.opsForList(); listOperations.leftPushAll(redisKey, redisValue); }}复制代码

之后在需要操作到Redis的地方,直接调用RedisDaoImpl即可。

转载于:https://juejin.im/post/5c664b1e51882562914ec10c

你可能感兴趣的文章
centos 基础性命令
查看>>
Java 8 中处理集合的优雅姿势——Stream
查看>>
mongodb配置---副本集
查看>>
UI设计的几个基本的设计原则
查看>>
远程管理 KVM 虚机 - 每天5分钟玩转 OpenStack(5)
查看>>
python实战系列之通过libvirt操作KVM(六)
查看>>
高可用术语解释:Split-Brain
查看>>
Laravel 队列系统
查看>>
自动FTP 登录备份脚本
查看>>
view
查看>>
我的友情链接
查看>>
tomcat配置文件server.xml详解
查看>>
ipython的两种安装方式
查看>>
有流媒体功能的lnmp部署练习,强化练习
查看>>
android消息机制,异步和多线程
查看>>
Linux下抓包工具tcpdump以及分析包的工具wireshark
查看>>
设置新建maven项目的jdk版本
查看>>
用copy命令将两个文件绑定,上传asp马
查看>>
FIR.im:iOS 8.1.3 “各路助手挺尸”、“封杀一切助手”的背后
查看>>
我的友情链接
查看>>