大数据之路Week10_day05 (JavaAPI 操作Redis 第一阶段)
刚开始学习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 第一阶段)的更多相关文章
- 大数据之路week04--day06(I/O流阶段一 之异常)
从这节开始,进入对I/O流的系统学习,I/O流在往后大数据的学习道路上尤为重要!!!极为重要,必须要提起重视,它与集合,多线程,网络编程,可以说在往后学习或者是工作上,起到一个基石的作用,没了地基,房 ...
- 大数据之路week05--day01(I/O流阶段一 之File)
众所周知,我们电脑中有许许多多的文件夹和文件,文件的形式也有许多不同的格式,文件夹中也可以新建文件夹的存在,也就是多层的一步一步的嵌套. 我们想要实现I/O操作,就必须知道硬盘上文件的表现形式. 而J ...
- 胖子哥的大数据之路(6)- NoSQL生态圈全景介绍
引言: NoSQL高级培训课程的基础理论篇的部分课件,是从一本英文原著中做的摘选,中文部分参考自互联网.给大家分享. 正文: The NoSQL Ecosystem 目录 The NoSQL Eco ...
- Mysql备份系列(3)--innobackupex备份mysql大数据(全量+增量)操作记录
在日常的linux运维工作中,大数据量备份与还原,始终是个难点.关于mysql的备份和恢复,比较传统的是用mysqldump工具,今天这里推荐另一个备份工具innobackupex.innobacku ...
- C#码农的大数据之路 - 使用C#编写MR作业
系列目录 写在前面 从Hadoop出现至今,大数据几乎就是Java平台专属一般.虽然Hadoop或Spark也提供了接口可以与其他语言一起使用,但作为基于JVM运行的框架,Java系语言有着天生优势. ...
- 胖子哥的大数据之路(10)- 基于Hive构建数据仓库实例
一.引言 基于Hive+Hadoop模式构建数据仓库,是大数据时代的一个不错的选择,本文以郑商所每日交易行情数据为案例,探讨数据Hive数据导入的操作实例. 二.源数据-每日行情数据 三.建表脚本 C ...
- 胖子哥的大数据之路(9)-数据仓库金融行业数据逻辑模型FS-LDM
引言: 大数据不是海市蜃楼,万丈高楼平地起只是意淫,大数据发展还要从点滴做起,基于大数据构建国家级.行业级数据中心的项目会越来越多,大数据只是技术,而非解决方案,同样面临数据组织模式,数据逻辑模式的问 ...
- 胖子哥的大数据之路(7)- 传统企业切入核心or外围
一.引言 昨天和一个做互联网大数据(零售行业)的朋友交流,关于大数据传统企业实施的切入点产生了争执,主要围绕两个问题进行了深入的探讨: 问题1:对于一个传统企业而言什么是核心业务,什么是外围业务? 问 ...
- 胖子哥的大数据之路(四)- VisualHBase功能需求框架
一.引言 大数据在结构化数据存储方面的应用需求越来越明确,但是大数据环境下辅助开发工具的不完善,给数据库管理人员和开发人员带来的不变难以言表,基于此创建了开源项目VisualHBase,同时创建了Vi ...
- 大数据之路week01--自学之集合_1(Collection)
经过我个人的调查,发现,在今后的大数据道路上,集合.线程.网络编程变得尤为重要,为什么? 因为大数据大数据,我们必然要对数据进行处理,而这些数据往往是以集合形式存放,掌握对集合的操作非常重要. 在学习 ...
随机推荐
- [WPF UI] 为 AvalonDock 制作一套 Fluent UI 主题
AvalonDock 是我这些天在为自己项目做技术选型时发现的一个很好的开源项目,它是一个用于 WPF 的布局控件库,可以帮助我们实现类似 Visual Studio 的布局效果.因为它自带的一些样式 ...
- django静态文件、form表单和request对象
目录 一.静态文件 1.静态文件概念 2.资源访问 3.静态文件资源访问 二.静态文件相关配置 1.接口前缀 2.接口前缀动态匹配 三.form表单 action属性 method属性 四.reque ...
- 时间轮在 Netty , Kafka 中的设计与实现
本文基于 Netty 4.1.112.Final , Kafka 3.9.0 版本进行讨论 在业务开发的场景中,我们经常会遇到很多定时任务的需求.比如,生成业务报表,周期性对账,同步数据,订单支付超时 ...
- 龙哥量化:代写技术指标,通达信ZIG函数优化改进之字转向,高点用最高价,低点用最低价
如果您需要代写技术指标公式, 请联系我. 龙哥QQ:591438821 龙哥微信:Long622889 N:=50; A1:ZIG(3,N/10); 代码只有两行,参数是50,表示涨幅5%,在调参数时 ...
- Unity 3D更换默认脚本编辑器VisualStudio
由于VisualStudio 30天试用到期了,所有不能编辑Unity 3D脚本.需要更换成Notepad++ 打开Unity 3D顶部菜单 点击编辑(Editor)->Preferences- ...
- Qt/C++推流程序(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)可在网页和播放器远程观看
一.前言说明 推流直播就是把采集阶段封包好的内容传输到服务器的过程.其实就是将现场的视频信号从手机端,电脑端,摄影机端打包传到服务器的过程."推流"对网络要求比较高,如果网络不稳定 ...
- Qt通用方法及类库12
函数名 //初始化表格 static void initTableView(QTableView *tableView, int rowHeight = 25, bool headVisible = ...
- 记一次 .NET某工业视觉软件 崩溃分析
一:背景 1. 讲故事 前两天给训练营里的一位学员分析了一个dump,学员因为弄了一整天也没找到祸根,被我一下子弄出来了,极度想看看我是怎么分析的?由于在微信上不能一言两语表尽,干脆写一篇文章出来详细 ...
- Java中使用Callable和FutureTask创建多线程的基本用法
我们先定义一个Callable任务MyCallableTask: 步骤1:创建Callable实现类,并实现call()接口 package cn.cetc;//包名可自定义 import java. ...
- Kubernetes-介绍
1. kubernetes 是什么? Kubernetes 是一个可移植的.可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化. Kubernetes 这个名字源于希腊语,意为 ...