刚开始学习JavaAPI的时候,主要是对redis中的字符串,字节位图,列表,集合,有序集合进行操作,并能够完成简单的需求。

package com.wyh.redis;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig; import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set; public class RedisApi {
public static void main(String[] args) {
Jedis master = new Jedis("master", 6379);
master.set("001","123");
String s = master.get("001");
System.out.println(s);
master.close(); } Jedis master;
JedisPool masterPool; @Before
public void init(){
master = new Jedis("master", 6379); JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(100);
jedisPoolConfig.setMaxIdle(10); masterPool = new JedisPool(jedisPoolConfig, "master", 6379); } /**
* 字符串练习
*/
@Test
public void String(){
Jedis resource = masterPool.getResource();
resource.set("002","xiaohu");
String s = resource.get("002");
System.out.println(s);
resource.close();
} /**
* bitmap练习
*/
@Test
public void bitmap(){
Jedis resource = masterPool.getResource();
resource.setbit("b1",1,true);
resource.setbit("b1",3,true);
resource.setbit("b1",5,true); //获取当前位是1还是0 1返回true,0则返回false
Boolean b1 = resource.getbit("b1", 3);
System.out.println(b1); //获取该键值中有多少个1
Long b11 = resource.bitcount("b1");
System.out.println(b11);
resource.close();
} /**
*list练习
*
*/
@Test
public void list(){
Jedis resource = masterPool.getResource();
resource.lpush("shujia06","王友虎","赵以浩","江蒗","尹可洋");
String shujia006 = resource.lpop("shujia06");
System.out.println(shujia006); //一次获取该键的所有值
List<String> shujia0061 = resource.lrange("shujia06", 0, -1);
System.out.println(shujia0061);
resource.close();
} /**
*
* HashMap的练习 将学生表添加到redis
*/
@Test
public void hashMap(){ try {
BufferedReader br = new BufferedReader(new FileReader("D:\\shujia\\shujia006\\hadoop\\src\\data\\students.txt"));
String line;
while ((line=br.readLine())!=null){
String[] split = line.split(",");
String id = split[0]; String key = "student"+":"+id; String name = split[1];
String age = split[2];
String gender = split[3];
String clazz = split[4]; HashMap<String, String> map = new HashMap<>();
map.put("name",name);
map.put("age",age);
map.put("gender",gender);
map.put("clazz",clazz); master.hmset(key,map);
} Set<String> keys = master.keys("student*");
System.out.println(keys);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } /**
* 获取所有学生信息
*/
@Test
public void hGetAll(){ Set<String> keys = master.keys("student*"); for (String key : keys) {
Map<String, String> stringStringMap = master.hgetAll(key);
for (Map.Entry<String, String> stringStringEntry : stringStringMap.entrySet()) {
String value = stringStringEntry.getValue();
System.out.print(value);
System.out.print("\t");
}
System.out.println();
}
} /**
* 共同好友(交集)
*
*/
@Test
public void sinter(){
master.sadd("weibo:王友虎","赵以浩");
master.sadd("weibo:王友虎","李宏灿");
master.sadd("weibo:王友虎","齐博源");
master.sadd("weibo:王友虎","李先锋"); master.sadd("weibo:赵以浩","李先锋");
master.sadd("weibo:赵以浩","王友虎");
master.sadd("weibo:赵以浩","齐博源");
master.sadd("weibo:赵以浩","黄天祥"); Set<String> sinter = master.sinter("weibo:王友虎", "weibo:赵以浩");
System.out.println("他们的共同好友为:");
System.out.println(sinter); } /**
* 有序集合
*/
@Test
public void numSet(){
master.zadd("shujia",1.0,"赵以浩");
master.zadd("shujia",1.0,"李宏灿");
master.zadd("shujia",1.0,"齐博源");
master.zadd("shujia",1.0,"李先锋"); master.zadd("shujia",2.0,"李先锋");
master.zadd("shujia",2.0,"王友虎");
master.zadd("shujia",2.0,"齐博源");
master.zadd("shujia",2.0,"黄天祥"); // HashMap<String, Integer> map = new HashMap<>();
//
Set<String> s1 = master.zrangeByScore("shujia", 1.0, 1.0);
// for (String s : s1) {
// map.put(s,1);
// }
//
Set<String> s2 = master.zrangeByScore("shujia", 2.0, 2.0);
// for (String s : s2) {
// map.put(s,1);
// }
//
// System.out.println("他们所有的好友为:");
// for (Map.Entry<String, Integer> stringIntegerEntry : map.entrySet()) {
// String key = stringIntegerEntry.getKey();
// System.out.println(key);
// } System.out.println(s1);
System.out.println(s2); } @After
public void close(){
masterPool.close();
master.close(); }
}

在其中,有一个新的知识点,就是 JedisPool ,可以先创建好jedis连接对象,在需要的时候,从里面拿,也可以设置个数。

但是注意:

    1、我在代码中设置的是100个最大,我在将学生信息往redis中添加的时候,卡住不动了,我以为是代码出错,结果检查redis客户端软件发现,只插入了100条数据,剩下的900条数据都没有添加,这是为什么,因为我的“池子”中最大是100个,将其换成普通的获取连接就可以了,但是后面在写代码的过程中发现,我在循环添加的时候,并未添加一条就将这个连接关闭,逻辑上而是等全部添加完毕才将其关闭,啊。。原来原因在这,问题解决。

    2、一开始我想使用有序集合去将两个人的共同好友获取出来,后面发现,我在添加的时候,就算score是可以重复的,value值都是不可以重复的,尽管score不一样,在一个表中,它就是不可以重复的,后来经过查资料,我改用set集合,无序的,两个不同的表,进行sinter的方法取交集,获取到了共同好友。

    3、这里我遗留了一个问题,发现了一个我觉得很重要,通过百度也发现它很重要的东西,就是scan,hscan等,在上面的一个问题中我通过观察方法发现的,目前没有仔细了解,后面会补充。

大数据之路Week10_day05 (JavaAPI 操作Redis 第一阶段)的更多相关文章

  1. 大数据之路week04--day06(I/O流阶段一 之异常)

    从这节开始,进入对I/O流的系统学习,I/O流在往后大数据的学习道路上尤为重要!!!极为重要,必须要提起重视,它与集合,多线程,网络编程,可以说在往后学习或者是工作上,起到一个基石的作用,没了地基,房 ...

  2. 大数据之路week05--day01(I/O流阶段一 之File)

    众所周知,我们电脑中有许许多多的文件夹和文件,文件的形式也有许多不同的格式,文件夹中也可以新建文件夹的存在,也就是多层的一步一步的嵌套. 我们想要实现I/O操作,就必须知道硬盘上文件的表现形式. 而J ...

  3. 胖子哥的大数据之路(6)- NoSQL生态圈全景介绍

    引言: NoSQL高级培训课程的基础理论篇的部分课件,是从一本英文原著中做的摘选,中文部分参考自互联网.给大家分享. 正文:  The NoSQL Ecosystem 目录 The NoSQL Eco ...

  4. Mysql备份系列(3)--innobackupex备份mysql大数据(全量+增量)操作记录

    在日常的linux运维工作中,大数据量备份与还原,始终是个难点.关于mysql的备份和恢复,比较传统的是用mysqldump工具,今天这里推荐另一个备份工具innobackupex.innobacku ...

  5. C#码农的大数据之路 - 使用C#编写MR作业

    系列目录 写在前面 从Hadoop出现至今,大数据几乎就是Java平台专属一般.虽然Hadoop或Spark也提供了接口可以与其他语言一起使用,但作为基于JVM运行的框架,Java系语言有着天生优势. ...

  6. 胖子哥的大数据之路(10)- 基于Hive构建数据仓库实例

    一.引言 基于Hive+Hadoop模式构建数据仓库,是大数据时代的一个不错的选择,本文以郑商所每日交易行情数据为案例,探讨数据Hive数据导入的操作实例. 二.源数据-每日行情数据 三.建表脚本 C ...

  7. 胖子哥的大数据之路(9)-数据仓库金融行业数据逻辑模型FS-LDM

    引言: 大数据不是海市蜃楼,万丈高楼平地起只是意淫,大数据发展还要从点滴做起,基于大数据构建国家级.行业级数据中心的项目会越来越多,大数据只是技术,而非解决方案,同样面临数据组织模式,数据逻辑模式的问 ...

  8. 胖子哥的大数据之路(7)- 传统企业切入核心or外围

    一.引言 昨天和一个做互联网大数据(零售行业)的朋友交流,关于大数据传统企业实施的切入点产生了争执,主要围绕两个问题进行了深入的探讨: 问题1:对于一个传统企业而言什么是核心业务,什么是外围业务? 问 ...

  9. 胖子哥的大数据之路(四)- VisualHBase功能需求框架

    一.引言 大数据在结构化数据存储方面的应用需求越来越明确,但是大数据环境下辅助开发工具的不完善,给数据库管理人员和开发人员带来的不变难以言表,基于此创建了开源项目VisualHBase,同时创建了Vi ...

  10. 大数据之路week01--自学之集合_1(Collection)

    经过我个人的调查,发现,在今后的大数据道路上,集合.线程.网络编程变得尤为重要,为什么? 因为大数据大数据,我们必然要对数据进行处理,而这些数据往往是以集合形式存放,掌握对集合的操作非常重要. 在学习 ...

随机推荐

  1. Win11右键显示更多选项设置教程

    Win11如何设置右键显示更多选项?如果你觉得每次右键菜单,都是需要点击"显示更多选项"十分麻烦,那么可以通过设置,让其直接显示出现.那么应该如何操作呢?下面小编就为大家带来具体的 ...

  2. Python的OCR工具pytesseract解决TesseractNotFoundError: tesseract is not installed or it's not in your PATH. See README file for more information环境变量问题

    pytesseract是基于Python的OCR工具, 底层使用的是Google的Tesseract-OCR 引擎,支持识别图片中的文字,支持jpeg, png, gif, bmp, tiff等图片格 ...

  3. Qt音视频开发35-左右通道音量计算和音量不同范围值的转换

    一.前言 视频文件一般会有两个声音通道及左右声道,值有时候一样有时候不一样,很多场景下我们需要对其分开计算不同的音量值,在QAudioFormat中可以获取具体有几个通道,如果是一个通道,则左右通道值 ...

  4. Qt开发经验小技巧166-170

    有时候需要暂时停止某个控件发射信号(比如下拉框combobox添加数据的时候会触发当前元素改变信号),有多种处理,推荐用 blockSignals 方法. //方法1:先 disconnect 掉信号 ...

  5. 关于Qt几百个版本无法兼容的深度思考

    关于Qt众多版本(至少几百个)都不兼容的问题,在经过和Qt中国的林斌大神和其他大神(Qt非官方技术交流群)头脑风暴以后,最终得出以下的结论. Qt在二进制兼容这块,已经做了最大的努力,通过将各种代码细 ...

  6. 什么是 单点登录SSO?SSO工作原理

    记住多个用户名和密码来访问不同网站和应用程序很麻烦.单点登录 (SSO) 允许用户使用一组凭证访问多个资源,从而消除了对多个用户 ID 和密码的需求. 没有 SSO 的世界 在没有 SSO 的情况下, ...

  7. spark (五) RDD的创建 & 分区

    目录 1. RDD的创建方式 1.1 从内存创建RDD 1.2 从外部存储(文件)创建RDD 1.3 从其他的RDD创建 1.4 直接 new RDD 2. 分区(partition) 2.1 mak ...

  8. vue的element,el-select与el-tree配合使用,实现下拉树状

    HTML <el-select ref="stlectTree" v-model="treeSelectText" placeholder="请 ...

  9. Solution Set -「Public NOIP Round #3 (Div. 1)」

    \(\mathscr{A}\sim\) 移除石子   Tags:「A.构造」「C.细节」   "显然" 直接按 \((x,y)\) 二元组排序后两两组成正方形! 喜提 \(90\t ...

  10. CDS标准视图:功能位置信息 I_FunctionalLocationData

    视图名称:I_FunctionalLocationData 视图类型:基础视图 视图代码: 点击查看代码 @EndUserText.label: 'Functional Location Data' ...