Jedis 使用入门
Redis 是一个开源的基于内存的数据结构存储,Redis 是远程字典服务(Remote Dictionary Server )的简写 ,它通常被用作数据库,缓存,消息代理和流引擎。Redis提供的数据结构有string,hashes,lists,sets,sorted sets五种,Redis内置了复制,Lua脚本,LRU驱动事件,事务以及不同级别的磁盘持久方法。并提供了高可用的Redis 哨兵和Redis集群方案
1. Jedis是什么
Jedis 是 Redis 官方首选的 Java 客户端开发包, Jedis客户端同时支持单机模式、分片模式、集群模式的访问模式,通过构建Jedis类对象实现单机模式下的数据访问,通过构建ShardedJedis类对象实现分片模式的数据访问,通过构建JedisCluster类对象实现集群模式下的数据访问。
2. Jedis工作模式
Jedis主要有四大模块, Jedis,JedisCluster,JedisSentinel和ShardedJedis对应了Redis的四种工作模式
序号 | 模块 | Redis模式 |
1 | Jedis | Redis Standalone(单节点模式) |
2 | JedisCluster | Redis Cluster(集群模式) |
3 | JedisSentinel | Redis Sentinel(哨兵模式) |
4 | ShardedJedis | Redis Sharding(分片模式) |
3. Jedis用例
依赖第三方包 jedis-2.7.2.jar 、commons-pool2-2.3.jar
JedisPoolManager用户管理数据库连接,比如获取或者释放
package com.redis.jedis.project.common;import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;public class JedisPoolManager {//private static String REDISDB_IP = "192.168.62.44";private static String REDISDB_IP = "127.0.0.1";private static int REDISDB_PORT = 6379;private JedisPool jedisPool;public JedisPoolManager() {JedisPoolConfig config = new JedisPoolConfig();config.setMaxTotal(20);config.setMaxIdle(5);config.setMaxWaitMillis(1000l);config.setTestOnBorrow(false);jedisPool = new JedisPool(config, REDISDB_IP, REDISDB_PORT);}public Jedis getJedis() throws Exception {try {Jedis jedis = jedisPool.getResource();return jedis;} catch (Exception e) {throw e;}}public void releaseJedis(Jedis jedis) {if (jedis != null) {jedis.close();}}
}
JedisManager 用户Redis数据库操作,当前只写了增删改查等常用行为
package com.redis.jedis.project.common;import java.util.Map;import redis.clients.jedis.Jedis;public class JedisManager {private JedisPoolManager pool = new JedisPoolManager();protected void set(int dbIndex, String key, String value, int cashSeconds)throws Exception {Jedis jedis = null;try {jedis = pool.getJedis();jedis.select(dbIndex);jedis.set(key, value);if (cashSeconds > 0) {jedis.expire(key, cashSeconds);}} catch (Exception e) {throw e;} finally {pool.releaseJedis(jedis);}}protected String get(int dbIndex, String key) throws Exception {Jedis jedis = null;try {jedis = pool.getJedis();jedis.select(dbIndex);return jedis.get(key);} catch (Exception e) {throw e;} finally {pool.releaseJedis(jedis);}}protected void delete(int dbIndex, String key) throws Exception {Jedis jedis = null;try {jedis = pool.getJedis();jedis.select(dbIndex);jedis.del(key);} catch (Exception e) {throw e;} finally {pool.releaseJedis(jedis);}}protected Map<String, String> hgetAll(int dbIndex, String key)throws Exception {Jedis jedis = null;try {jedis = pool.getJedis();jedis.select(dbIndex);return jedis.hgetAll(key);} catch (Exception e) {System.out.println(e);throw e;} finally {pool.releaseJedis(jedis);}}protected void hset(int dbIndex, String key, String field, String value)throws Exception {Jedis jedis = null;try {jedis = pool.getJedis();jedis.select(dbIndex);jedis.hset(key, field, value);} catch (Exception e) {throw e;} finally {pool.releaseJedis(jedis);}}protected void hmset(int dbIndex, String key, Map<String, String> maps,int cacheSeconds) throws Exception {Jedis jedis = null;try {jedis = pool.getJedis();jedis.select(dbIndex);jedis.hmset(key, maps);if (cacheSeconds >= 0) {jedis.expire(key, cacheSeconds);}} catch (Exception e) {throw e;} finally {pool.releaseJedis(jedis);}}protected void del(int dbIndex, String key) throws Exception {Jedis jedis = null;try {jedis = pool.getJedis();jedis.select(dbIndex);jedis.del(key);} catch (Exception e) {throw e;} finally {pool.releaseJedis(jedis);}}}
服务接口,实现具体业务,假设是登陆操作
package com.redis.jedis.project.common;public interface ILoginCash {public boolean longin(LoginDTO loginDTO,int cashSeconds) throws Exception;public LoginDTO getLogInfo(int userId) throws Exception;public boolean longout(int userId) throws Exception;}
package com.redis.jedis.project.common;import java.io.Serializable;public class LoginDTO implements Serializable {private static final long serialVersionUID = 1L;private int userId;private String code;private String name;private String ip;public int getUserId() {return userId;}public void setUserId(int userId) {this.userId = userId;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getIp() {return ip;}public void setIp(String ip) {this.ip = ip;}}
实现服务接口时,同时继承JedisManager管理类,这样可以使用JedisManager封装的操作数据库的行为,为了更好的方便管理KEY名称,一般Rredis中的KEY 都是由 对象:ID 或者对象:ID:类型 等结构管理的
package com.redis.jedis.project.common;import java.util.HashMap;
import java.util.Map;public class LoginCashManager extends JedisManager implements ILoginCash {private static final String REDIS_USER = "user";@Overridepublic boolean longin(LoginDTO loginDTO, int cashSeconds) throws Exception {boolean result = false;String key = REDIS_USER + ":" + loginDTO.getUserId();try {Map<String, String> map = new HashMap<String, String>();map.put("code", loginDTO.getCode());map.put("name", loginDTO.getName());map.put("ip", loginDTO.getIp());hmset(RedisDBConstants.USER_DB_INDEX, key, map, cashSeconds);result = true;} catch (Exception e) {System.out.println(e);}return result;}@Overridepublic LoginDTO getLogInfo(int userId) throws Exception {if (userId <= 0) {return null;}String key = REDIS_USER + ":" + userId;LoginDTO loginDTO = null;try {Map<String, String> map = hgetAll(RedisDBConstants.USER_DB_INDEX,key);if (map != null && !map.isEmpty()) {loginDTO = new LoginDTO();loginDTO.setUserId(userId);loginDTO.setCode(map.get("code"));loginDTO.setName(map.get("name"));loginDTO.setIp(map.get("ip"));}} catch (Exception e) {System.out.println(e);}return loginDTO;}@Overridepublic boolean longout(int userId) throws Exception {if (userId <= 0) {return false;}String tokenKey = REDIS_USER + ":" + userId;boolean result = false;try {del(RedisDBConstants.USER_DB_INDEX, tokenKey);result = true;} catch (Exception e) {System.out.println(e);}return result;}}
Redis默认有16个库,分别由数字 0到15编号,为方便管理,可以通过名称定义的方式以便查找
package com.redis.jedis.project.common;public class RedisDBConstants {public static int SYS_DB_INDEX = 0;public static int USER_DB_INDEX = 1;
}
测试类
package com.redis.jedis.project.common;public class MainTestRedis {public static void main(String[] args) throws Exception {LoginCashManager logincash = new LoginCashManager();System.out.println("==SAVE NOW==");LoginDTO loginDTO = new LoginDTO();loginDTO.setUserId(1000);loginDTO.setCode("1003");loginDTO.setName("LIUY");loginDTO.setIp("127.0.0.1");logincash.longin(loginDTO,50);System.out.println("==SAVE END==");LoginDTO login =logincash.getLogInfo(1000);System.out.println("==GET INFO==");System.out.println("id="+login.getUserId());System.out.println("code="+login.getCode());System.out.println("name="+login.getName());System.out.println("loginIP="+login.getIp());}
}
打印测试结果
==SAVE NOW==
==SAVE END==
==GET INFO==
id=1000
code=1003
name=LIUY
loginIP=127.0.0.1
Jedis 使用入门相关推荐
- redis入门——集群篇
redis入门--集群篇 @(Redis)[服务器, 集群, 主从复制, jedis] redis入门集群篇 主从复制 基本介绍 主从配置 主redis配置 从redis配置 Redis集群 基本介绍 ...
- Redis的Java客户端之Jedis(Jedis)
文章目录 Redis的Java客户端(Jedis) 一.简介 二.Jedis快速入门 1.引入依赖 2.建立连接 3.使用Jedis 4.释放资源 三.Jedis连接池 1.创建Jedis连接池配置 ...
- 慕课网_《Redis入门》学习总结
https://segmentfault.com/a/1190000009530905 时间:2017年05月21日星期日 说明:本文部分内容均来自慕课网.@慕课网:http://www.imooc. ...
- Redis入门到实战(一、基础篇)【黑马程序员】
第一章 Redis入门 Redis的常见命令和客户端使用 一.初识Redis 1. 认识NoSQL NoSql可以翻译做Not Only Sql(不仅仅是SQL),或者是No Sql(非Sql的)数据 ...
- JavaWeb笔记:第07章 MVC |EL |JST |Filter |Listener |JQuery |AJAX |Maven |JSON |Redis |Linux |Nginx
JavaWeb笔记:第07章 MVC |EL |JST |Filter |Listener |JQuery |AJAX |Maven |JSON |Redis |Linux |Nginx 1. MVC ...
- Redis的Java客户端
目录 1 前言 2 Jedis客户端 2.1 jedis快速入门 2.2Jedis连接池 3 SpringDataRedis 3.1快速入门 3.2ReisTemplate配置序列化工具 3.3 St ...
- 程序员欣宸的文章分类汇总
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于代码仓库 代码仓库里是博客中涉及的源码和文件,地址 ...
- Redis笔记-基础篇(黑马视频教程)
写在开头 这是我在观看黑马Redis视频教程中根据PPT和上课内容,个人写的笔记,中间有部分来源于百度,如有侵权,联系我删除. 文章目录 写在开头 NoSQL数据库简介 技术发展 NoSQL数据库 R ...
- Jedis--操作String,hash,list,setshortedset
黑马程序 Jedis–快速入门 @Testpublic void test1(){Jedis jedis = new Jedis("127.0.0.1",6379);jedis.s ...
最新文章
- 进行直播间搭建时需要注意的小细节
- c语言小数点进制转换,新手求教,关于含小数的二进制转换成十进制
- Guava关于JAVA中系统组件之间交互通讯(非线程之间通讯)
- 怎么把路由的#号去掉_VLAN应用篇系列:交换机VLAN间路由与传统单臂路由(子接口)方式...
- Juniper大中国区于肇烈
- css权威指南第四版_16个非常有用的CSS伪选择器,你千万不要错过了!
- 力扣438.找到字符串中所有字母异位词(JavaScript)
- 用PWA构建一个完全离线的网站
- 动态组合sql语句详解
- Asp.net网站使用HttpHandler实现图片防盗链功能
- combo 边写边选的注意事项
- 药物临床试验数据递交FDA的规定
- 深入了解 Squid 代理服务器及应用
- 5.图像,音视频标签
- 桂林理工研究生院计算机软件工程,2019桂林理工大学硕士研究生复试细则之软件工程...
- SSM框架使用Layui文件上传插件实现多文件上传(多文件列表)
- 创作者基金 11 月亮点
- 小技巧 - 禁止复制的网站如何破解复制功能(知乎,360图书馆)?
- 领导力:“不懂带团队你就自己累”
- Pangolin could not be found because dependency Eigen3 could not be found.