刚开始学习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. [WPF UI] 为 AvalonDock 制作一套 Fluent UI 主题

    AvalonDock 是我这些天在为自己项目做技术选型时发现的一个很好的开源项目,它是一个用于 WPF 的布局控件库,可以帮助我们实现类似 Visual Studio 的布局效果.因为它自带的一些样式 ...

  2. django静态文件、form表单和request对象

    目录 一.静态文件 1.静态文件概念 2.资源访问 3.静态文件资源访问 二.静态文件相关配置 1.接口前缀 2.接口前缀动态匹配 三.form表单 action属性 method属性 四.reque ...

  3. 时间轮在 Netty , Kafka 中的设计与实现

    本文基于 Netty 4.1.112.Final , Kafka 3.9.0 版本进行讨论 在业务开发的场景中,我们经常会遇到很多定时任务的需求.比如,生成业务报表,周期性对账,同步数据,订单支付超时 ...

  4. 龙哥量化:代写技术指标,通达信ZIG函数优化改进之字转向,高点用最高价,低点用最低价

    如果您需要代写技术指标公式, 请联系我. 龙哥QQ:591438821 龙哥微信:Long622889 N:=50; A1:ZIG(3,N/10); 代码只有两行,参数是50,表示涨幅5%,在调参数时 ...

  5. Unity 3D更换默认脚本编辑器VisualStudio

    由于VisualStudio 30天试用到期了,所有不能编辑Unity 3D脚本.需要更换成Notepad++ 打开Unity 3D顶部菜单 点击编辑(Editor)->Preferences- ...

  6. Qt/C++推流程序(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)可在网页和播放器远程观看

    一.前言说明 推流直播就是把采集阶段封包好的内容传输到服务器的过程.其实就是将现场的视频信号从手机端,电脑端,摄影机端打包传到服务器的过程."推流"对网络要求比较高,如果网络不稳定 ...

  7. Qt通用方法及类库12

    函数名 //初始化表格 static void initTableView(QTableView *tableView, int rowHeight = 25, bool headVisible = ...

  8. 记一次 .NET某工业视觉软件 崩溃分析

    一:背景 1. 讲故事 前两天给训练营里的一位学员分析了一个dump,学员因为弄了一整天也没找到祸根,被我一下子弄出来了,极度想看看我是怎么分析的?由于在微信上不能一言两语表尽,干脆写一篇文章出来详细 ...

  9. Java中使用Callable和FutureTask创建多线程的基本用法

    我们先定义一个Callable任务MyCallableTask: 步骤1:创建Callable实现类,并实现call()接口 package cn.cetc;//包名可自定义 import java. ...

  10. Kubernetes-介绍

    1. kubernetes 是什么? Kubernetes 是一个可移植的.可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化. Kubernetes 这个名字源于希腊语,意为 ...