java dataset redis,利用Spring-Data-Redis和Jedis操作Redis缓存

概述          Jedis是redis官方推荐的用于访问Java客户端,在https://github.com/xetorthio/jedis下载最新的jedis。 访问redis 1、访问简单的key——value, pu

只需简单几步,就可以利用Spring-Data-Redis和Jedis操作Redis缓存。步骤如下:

第一步:依赖包

org.springframework.data

spring-data-redis

1.4.2.RELEASE

redis.clients

jedis

2.6.0

第二步:封装自己的Redis操作类

1、spring配置,下面是一个完整redis配置,密码只需要设置password属性。

/**

* 封装对Redis的常用操作,尽量与Redis原始命令一致。Redis命令参考:http://redisdoc.com/

* @author Xu

*

*/

public class XjjStringRedisOps extends StringRedisTemplate {

//Key(键),简单的key-value操作

/**

* 实现命令:TTL key,以秒为单位,返回给定 key的剩余生存时间(TTL, time to live)。

* @param key

* @return

*/

public long TTL(String key) {

return getExpire(key);

}

/**

* 实现命令:KEYS pattern,查找所有符合给定模式 pattern的 key

*/

public Set KEYS(String pattern){

return super.keys(pattern);

}

/**

* 实现命令:DEL key,删除一个key

* @param key

*/

public void DEL(String key){

delete(key);

}

//String(字符串)

/**

* 实现命令:SET key value,设置一个key-value(将字符串值 value关联到 key)

* @param key

* @param value

*/

public void SET(String key, String value) {

opsForValue().set(key, value);

}

/**

* 实现命令:SET key value EX seconds,设置key-value和超时时间(秒)

* @param key

* @param value

* @param timeout (以秒为单位)

*/

public void SET(String key, String value, long timeout) {

opsForValue().set(key, value, timeout, TimeUnit.SECONDS);

}

/**

* 实现命令:GET key,返回 key所关联的字符串值。

* @param key

* @return value

*/

public String GET(String key) {

return opsForValue().get(key);

}

//Hash(哈希表)

/**

* 实现命令:HSET key field value,将哈希表 key中的域 field的值设为 value

* @param key

* @param field

* @param value

*/

public void HSET(String key, String field, Object value) {

opsForHash().put(key, field, value);

}

/**

* 实现命令:HGET key field,返回哈希表 key中给定域 field的值

* @param key

* @param field

* @return

*/

public String HGET(String key, String field) {

return (String) opsForHash().get(key, field);

}

/**

* 实现命令:HDEL key field [field ...],删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。

* @param key

* @param fields

*/

public void HDEL(String key, Object... fields) {

opsForHash().delete(key, fields);

}

/**

* 实现命令:HGETALL key,返回哈希表 key中,所有的域和值。

* @param key

* @return

*/

public Map HGETALL(String key) {

return opsForHash().entries(key);

}

//List(列表)

/**

* 实现命令:LPUSH key value,将一个值 value插入到列表 key的表头

* @param key

* @param value

* @return 执行 LPUSH命令后,列表的长度。

*/

public long LPUSH(String key, String value) {

return opsForList().leftPush(key, value);

}

/**

* 实现命令:LPOP key,移除并返回列表 key的头元素。

* @param key

* @return 列表key的头元素。

*/

public String LPOP(String key) {

return opsForList().leftPop(key);

}

/**

* 实现命令:RPUSH key value,将一个值 value插入到列表 key的表尾(最右边)。

* @param key

* @param value

* @return 执行 LPUSH命令后,列表的长度。

*/

public long RPUSH(String key, String value) {

return opsForList().rightPush(key, value);

}

/**

* 实现命令:RPOP key,移除并返回列表 key的尾元素。

* @param key

* @return 列表key的头元素。

*/

public String RPOP(String key) {

return opsForList().rightPop(key);

}

//Set(集合)

/**

* 实现命令:SADD key member,将一个 member元素加入到集合 key当中,已经存在于集合的 member元素将被忽略。

* @param key

* @param member

*/

public void SADD(String key, String member) {

opsForSet().add(key, member);

}

/**

* 实现命令:SMEMBERS key,返回集合 key 中的所有成员。

* @param key

* @return

*/

public Set SMEMEBERS(String key) {

return opsForSet().members(key);

}

//SortedSet(有序集合)

/**

* 实现命令:ZADD key score member,将一个 member元素及其 score值加入到有序集 key当中。

* @param key

* @param score

* @param member

*/

public void ZADD(String key, double score, String member) {

opsForZSet().add(key, member, score);

}

/**

* 实现命令:ZRANGE key start stop,返回有序集 key中,指定区间内的成员。

* @param key

* @param start

* @param stop

* @return

*/

public Set ZRANGE(String key, double start, double stop) {

return opsForZSet().rangeByScore(key, start, stop);

}

}

第三步:Spring配置

第四步:测试

@RunWith(SpringJUnit4ClassRunner.class) //使用Spring Junit4进行测试

@ContextConfiguration ({"classpath:spring/applicationContext.xml"}) //加载配置文件

public abstract class BaseJunit4Test {

}

public class RedisTest extends BaseJunit4Test {

@Autowired

XjjStringRedisOps redisOps;

@Test

public void deleteTestKeys(){

redisOps.DEL("xjj.v1");

redisOps.DEL("xjj.v2");

redisOps.DEL("xjj.h1");

redisOps.DEL("xjj.11");

redisOps.DEL("xjj.z1");

HashSet keySet = (HashSet) redisOps.keys("xjj*");

System.out.println(keySet);

Assert.assertEquals("keys删除不成功!", new HashSet(), keySet);

}

//String类型测试

@Test

public void setStringValue(){

String key = "xjj.v1";

String value = "Hello World!";

redisOps.SET(key, value);

System.out.println("value of xjj: " + redisOps.GET(key));

Assert.assertEquals(value, redisOps.GET(key));

}

@Test

public void setStringValueWithTimeout(){

String key = "xjj.v2";

String value = "Hello World, xjj1!";

long timeout = 100;

redisOps.SET(key, value, timeout);

System.out.println("ttl of xjj1: " + redisOps.TTL(key));

Assert.assertEquals(timeout, redisOps.TTL(key));

}

//Hash类型测试

@Test

public void setHashValue(){

String key = "xjj.h1";

String field1 = "f1";

String value1 = "123";

redisOps.HSET(key, field1, value1);

System.out.println(redisOps.HGET(key, field1));

String field2 = "f2";

String value2 = String.valueOf(888);

redisOps.HSET(key, field2, value2);

System.out.println(redisOps.HGET(key, field2));

System.out.println(redisOps.HGETALL(key));

}

@Test

public void delHashKeys(){

redisOps.HDEL("xjj.h1", "f1", "f2"); //删除xjj.h1中的f1和f2

}

//List类型测试

@Test

public void ListOps(){

String key = "xjj.l1";

String value1 = "Java";

redisOps.LPUSH(key, value1);

String value2 = "php";

redisOps.RPUSH(key, value2);

System.out.println(redisOps.RPOP(key));

System.out.println(redisOps.LPOP(key));

}

//Set类型测试

@Test

public void SetOps(){

String key = "xjj.s1";

String member1 = "Java";

String member2 = "Python";

String member3 = "PHP";

redisOps.SADD(key, member1);

redisOps.SADD(key, member2);

redisOps.SADD(key, member3);

System.out.println(redisOps.SMEMEBERS(key));

}

//SortedSet类型测试

@Test

public void ZSetOps(){

String key = "xjj.z1";

String member1 = "Java";

String member2 = "Python";

String member3 = "PHP";

double score1 = 1.2;

double score2 = 100.5;

double score3 = 188;

redisOps.ZADD(key, score1, member1);

redisOps.ZADD(key, score2, member2);

redisOps.ZADD(key, score3, member3);

System.out.println(redisOps.ZRANGE(key, 1, 150));

}

}

参考一下这篇文章: http://snowolf.iteye.com/blog/1666908 也可以借鉴一下这个的思路,仅供参考: package com.ttpod.cache.impl; import com.ttpod.cache.Cache

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javascript Array学习与使用

一.Javascript数组是无类型的;数组元素可以任意类型,并且同一个数组中的不同元素也可能有不同的类型,javascript数组是动态的,会根据需要增长或者缩减,每一个数组都有一个length属性。它不是只读的&#xf…

mx350显卡天梯图_CPU天梯图与显卡天梯图2020年最新版

最新CPU天梯图较之以往没有太大的变化,前十位置还是那几款。但是继阿里之后,腾讯也开始准备自己制作芯片了,毕竟自研AI芯片的诱惑还是很大的,2020年有不少的厂商都推出了新鲜美味的显卡,有些是老卡翻新做性价比。有的则…

matlab写字,Matlab实现鼠标写字代码

类型:编程工具大小:1.5M语言:中文 评分:1.2标签:立即下载最早的程序,实在忘了从哪里下载的了。能够实现鼠标的手写输入,但是一些不连续的点。tmouse.mfunction tmouse(action)% TMOUSE 本例展示…

[Linux]变量加减赋值以及将String转int

teddytoshiba~$ a"76"teddytoshiba~$ echo $((a3))79teddytoshiba~$ echo $((a-12))64teddytoshiba~$取文件名以及文件路径的脚本:#!/bin/shtmp$1filenameecho $1 | awk -F/ {print $(NF)}echo "filename":$filenamefilenamelengthecho | awk …

matlab在绘图时分数,第三章_Matlab图形绘制试卷.ppt

2、griddata函数,用来产生经插值后均匀间隔数据作图。常用的调用方法是:[XI,YI,ZI] griddata(x,y,z,XI,YI,’method’),其中x,y,z来自关系式zf(x,y),也可以是离散的数据点,ZI是有XI和YI插值后得到的对应点。其中metho…

from rfc 2068 hypertext怎么解决_你好,打工人!用英语怎么表达“打工人”?可别直接说 worker...

打工人,打工魂,打工人是人上人!最近,「打工人」这个词火了!几乎一夜之间,很多人在和朋友打招呼时,都自称“打工人”。那“打工人”是什么意思?这里的“打工人”,其实是对…

fbset

fbset用于读取和设置framebuffer的参数。# fbset mode "800x480-112"# D: 64.998 MHz, H: 58.034 kHz, V: 112.035 Hzgeometry 800 480 800 480 16timings 15385 220 40 21 7 60 10accel falsergba 5/11,6/5,5/0,0/0 endmode

mysql中更新的命令是,mysql命令总结(陆续更新中)

批量mysql 数据导入 load data local infile xx into table xx;连接数据库:mysql -h hostname -P port -u username -p -D databasename查看提供什么存储引擎:show engines;查看当前引擎:show variables like %storage_engine%;查看表使用了…

STM32连续采样_STM32 - 利用双缓冲实现实时曲线显示(续)

前言大概半个月之前捣鼓了下利用STM32实现实时曲线显示&#xff0c;中间又做了一点小改进和扩充&#xff0c;在这里更新一下&#xff1a;利用DMA进行缓冲区到LCD GRAM的像素数据搬运效果更好的曲线绘制策略代码可以在这里找到&#xff1a;<写得比较乱&#xff0c;望谅解( &a…

Vmware虚拟机三种网络模式详解

原文来自http://note.youdao.com/share/web/file.html?id236896997b6ffbaa8e0d92eacd13abbf&typenote 我怕链接会失效&#xff0c;故转载此篇文章。通过这篇文章&#xff0c;我对之前疑惑的地方有了直观的理解&#xff0c;很多地方并没有自己动手实践&#xff0c;所以这篇…

ros 双wan配置_基于ROS搭建简易软件框架实现ROV水下目标跟踪(九)--程序解析之PWM波下发...

模块对应cabin_controllers/serial_to_mcu。模块实现的功能为监听网络中PWM矩阵信息&#xff0c;将其转换成十六进制数据通过串口下发至MCU&#xff0c;实现对推进器电机的控制。模块数据的串口通信借助了ros的serial工具包&#xff08;sudo apt-get install ros-melodic-seria…

2018php项目实战视频教程,2018PHP实战技术VIP在线学习视频课程

课程目录&#xff1a;1-1 疯狂讲义之web简介2-1 从搭建PHP开发环境开始2-2 第一个PHP程序2-3 PHP变量相关知识2-4 PHP数据类型2-5 PHP数据类型之进制转换2-6 PHP数据类型之浮点型2-7 PHP数据类型系统函数简介3-1 PHP数据类型字符串的声明与定义3-2 数据类型之数组、资源、null类…

Struts1.x在MyEclipse中的环境搭建和配置

2019独角兽企业重金招聘Python工程师标准>>> &#xff08;一&#xff09; 先解压Struts-1.3.10-all.zip的文件夹Struts-1.3.10-all备用 -> 打开MyEclipse -> 新建一个 web project -> 在工程名上按右键鼠标选 Properties -> 弹出 Properties 面板 …

iphone固件降级_iPhone无法开机怎么办?三种快速维修方法

苹果手机的流畅让许多用户为之买单&#xff0c;但毕竟是电子产品&#xff0c;难免会有一些故障&#xff0c;其中无法开机就是一个很头疼的问题&#xff0c;一方面担心手机报废&#xff0c;一方面担心修理费过高&#xff0c;而造成 iPhone 无法开机的原因有很多&#xff0c;这里…

strspn函数php,php strspn函数怎么用?

strspn()函数是PHP中的一个内置函数&#xff0c;语法为strspn(string,charlist,start,length)&#xff0c;用于返回在字符串中包含 charlist 参数中指定字符的数目。php strspn()函数怎么用&#xff1f;strspn() 函数返回在字符串中包含 charlist 参数中指定的字符数目。语法&a…

【转载】架构师需要了解的Paxos原理、历程及实战

原文链接&#xff0c;请参见&#xff1a;http://weibo.com/ttarticle/p/show?id2309403952892003376258 数据库高可用性难题 数据库的数据一致和持续可用对电子商务和互联网金融的意义不言而喻&#xff0c;而这些业务在使用数据库时&#xff0c;无论 MySQL 还是 Oracle&#x…

酷冷至尊官方psu计算工具_酷冷至尊为Raspberry Pi推出Pi Case 40机壳,提供被动散热、卖27美元起...

Raspberry Pi(树莓派)是众所周知的廉价Single Board Computer&#xff0c;虽然名字里面有个“电脑”&#xff0c;但与我们一般广泛认知的台式机不同&#xff0c;它基本都是裸着一块主机板来使用&#xff0c;显得很极客、创客&#xff0c;当然也还是有一些玩家自制或者小作坊给R…

dede plus ad js.php,织梦程序中plus文件作用介绍及安全设置

官方网站下载了Dedecms安装包以后&#xff0c;解压出来&#xff0c;有一个uploads文件&#xff0c;这里面的文件夹才是网站的安装文件&#xff0c;里面文件很多&#xff0c;今天织梦58就主要介绍下plus文件夹里面的各个功能模块&#xff0c;如果你只是做一个宣传网站的话&#…

一个websocket 可以多个页面创建吗_实战分享|给我一个Puppeteer,没有爬不了的网站

Puppeteer 是 Chrome 开发团队在 2017 年发布的一个 Node.js 包&#xff0c;用来模拟 Chrome 浏览器的运行。我们团队从 Puppeteer 刚发布出来就开始成为忠实用户了(主要是因为 PhantomJs 坑太多了)&#xff0c;本文主要在介绍 Puppeteer 的同时&#xff0c;结合我们平时的实践…

Jquery实战——横纵向的菜单

横纵向的菜单效果&#xff0c;点击纵向菜单显示其子菜单。鼠标指向横菜单的时候。显示其子菜单&#xff0c;鼠标离开&#xff0c;子菜单隐藏。 HTML代码&#xff1a; <span style"font-size:18px;"><!DOCTYPE html> <html xmlns"http://www.w3.o…