/**

* 代金卷例子.

* set结构保证了value的唯一性.

*/

@Test

public void setCoupon() {

final String COUPON_KEY = "coupon";

for (int i = 0; i < 100; i++) {

redisTemplate.opsForSet().add(COUPON_KEY, String.format("abc%s", i));

redisTemplate.opsForSet().add(COUPON_KEY, String.format("abc%s", i));

}

Assert.assertEquals(Long.valueOf(100), redisTemplate.opsForSet().size(COUPON_KEY));

redisTemplate.opsForSet().pop(COUPON_KEY);

Assert.assertEquals(Long.valueOf(99), redisTemplate.opsForSet().size(COUPON_KEY));

}

/**

* 用户消费top10.

* sortList结构做实时排名.

*/

@Test

public void sortListTop() {

final String CONSUMPTION_KEY = "consumption";

redisTemplate.opsForZSet().add(CONSUMPTION_KEY, "person1", 1);

redisTemplate.opsForZSet().add(CONSUMPTION_KEY, "person2", 2);

redisTemplate.opsForZSet().add(CONSUMPTION_KEY, "person3", 1);

for (Object o : redisTemplate.opsForZSet().rangeByScore(CONSUMPTION_KEY, 1, 1)) {

System.out.println(o);

}

}

@Test

public void distributeLock2() {

new Thread(() -> {

for (int i = 0; i < 5; i++) {

queue2();

}

}).start();

}

/**

* 地理位置测试.

*/

@Test

public void geoTest() {

BoundGeoOperations boundGeoOperations = redisTemplate.boundGeoOps("CHINA:CITY");

Point nanjing = new Point(118.803805, 32.060168);

boundGeoOperations.add(nanjing, "南京市");

Point beijing = new Point(116.397039, 39.9077);

boundGeoOperations.add(beijing, "北京市");

Point shanghai = new Point(120.52, 30.40);

boundGeoOperations.add(shanghai, "上海市");

//geodist:获取两个地理位置的距离

Distance distance = boundGeoOperations.distance("南京市", "北京市", Metrics.KILOMETERS);

System.out.println("南京市到北京市之间的距离是:" + distance.getValue() + "km");

Distance distance2 = boundGeoOperations.distance("南京市", "上海市", Metrics.KILOMETERS);

System.out.println("南京市到上海市之间的距离是:" + distance2.getValue() + "km");

//geohash:获取某个地理位置的geohash值

List list = boundGeoOperations.hash("南京市");

System.out.println("南京市的geoHash = " + list.get(0));

//geopos:获取某个地理位置的坐标

List pointList = boundGeoOperations.position("南京市");

System.out.println("南京市的经纬度为 = " + pointList.get(0));

//georadius:根据给定地理位置坐标获取指定范围内的地理位置集合

//查询南京市1000KM范围内的城市

Circle within = new Circle(nanjing, 1000000);

//设置geo查询参数

RedisGeoCommands.GeoRadiusCommandArgs geoRadiusArgs = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs();

//查询返回结果包括距离和坐标

geoRadiusArgs = geoRadiusArgs.includeCoordinates().includeDistance();

//按查询出的坐标距离中心坐标的距离进行排序

geoRadiusArgs.sortAscending();

//限制查询返回的数量

geoRadiusArgs.limit(2);

GeoResults> geoResults = boundGeoOperations.radius(within, geoRadiusArgs);

List>> geoResultList = geoResults.getContent();

for (GeoResult geoResult : geoResultList) {

System.out.println("geoRadius " + geoResult.getContent());

}

//georadiusbymember:根据给定地理位置获取指定范围内的地理位置集合

geoRadiusArgs.limit(1);

geoResults = boundGeoOperations.radius("南京市", new Distance(1000000), geoRadiusArgs);

geoResultList = geoResults.getContent();

for (GeoResult geoResult : geoResultList) {

System.out.println("geoRadiusByMember " + geoResult.getContent());

}

//删除位置信息,此命令不是geo提供的,是使用zrem命令删除的

boundGeoOperations.remove("南京市");

}

/**

* 查看用户在线状态情况 1在线,0离线.

*/

@Test

public void bitmapTest() {

final String onlineKey = "online:";

for (int i = 0; i < 100; i++) {

redisTemplate.opsForValue().setBit(onlineKey, i, i % 2 == 0);

}

for (int i = 0; i < 10; i++) {

System.out.println(i + "=" + redisTemplate.opsForValue().getBit(onlineKey, i));

}

System.out.println("online:" + redisConfig.bitCount(onlineKey));

}

/**

* 统一数组里数据唯一性.

* IP地址去重复.

*/

@Test

public void hyperLogLogTest() {

final String loglogKey = "loglog:";

String[] arr = new String[100];

for (int i = 0; i < 100; i++) {

arr[i] = "A" + new Random().nextInt(10) + 1;

}

redisTemplate.opsForHyperLogLog().add(loglogKey, arr);

System.out.println("loglog:" + redisTemplate.opsForHyperLogLog().size(loglogKey));

}

redis应用场景java实例_redis使用场景和java测试案例相关推荐

  1. java使用varargs,Java 实例 – Varargs 可变参数使用 - Java 基础教程

    Java 实例 Java1.5提供了一个叫varargs的新功能,就是可变长度的参数. "Varargs"是"variable number of arguments&q ...

  2. java 实例的生命周期_[Java教程]Vue实例生命周期

    [Java教程]Vue实例生命周期 0 2017-08-15 19:00:09 前面的话 Vue实例在创建时有一系列的初始化步骤,例如建立数据观察,编译模板,创建数据绑定等.在此过程中,我们可以通过一 ...

  3. 【Java】while和do-while循环比较测试案例

    /**功能:进行while和do-while循环的测试 */ public class Test { public static void main(String[] args) {int i=0; ...

  4. Java-Runoob-高级教程-实例-数组:01. Java 实例 – 数组排序及元素查找

    ylbtech-Java-Runoob-高级教程-实例-数组:01. Java 实例 – 数组排序及元素查找 1.返回顶部 1. Java 实例 - 数组排序及元素查找  Java 实例 以下实例演示 ...

  5. jni java共享变量_Android JNI开发系列(十)JNI访问 Java 实例变量和静态变量

    JNI访问 Java 实例变量和静态变量 Java 中的实例变量和静态变量,在本地代码中如何来访问和修改.静态变量也称为类变量(属性),在所有实例对象中共享同一份数据,可以直接通过类名.变量名来访问. ...

  6. sikuli java_sikuli+java实例

    新建java工程,导入sikuli-script.jar包 public class TestSikuli { public static void openPage() throws FindFai ...

  7. Redis项目应用场景与实例(三):队列(List)

    文章目录 一.背景 二.项目需求 三.环境配置 四.项目代码 4.1 Redis工具类增加队列操作方法 4.2 图片上传服务增加Redis队列 五.测试与验证 六.源码 一.背景 在前两篇文章 < ...

  8. redis应用场景及实例

    redis应用场景及实例 前言 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.在这篇文章中,我们将阐述 Re ...

  9. redis队列优先级java实现_Redis 实现队列原理的实例详解

    Redis 实现队列原理的实例详解 场景说明: ·用于处理比较耗时的请求,例如批量发送邮件,如果直接在网页触发执行发送,程序会出现超时 ·高并发场景,当某个时刻请求瞬间增加时,可以把请求写入到队列,后 ...

最新文章

  1. memmove 和 memcpy的区别
  2. 《噬血代码》:一款轻度的魂Like游戏
  3. 清华源离线安装pytorch_【Pytorch】pytorch安装的时候下载不动
  4. 计算机应用基础山东大学,山东大学计算机应用基础
  5. C语言学习笔记---指针
  6. 使用Castle做类的增强
  7. 入选 CVPR 2020的旷视论文,到底写了啥?
  8. AT3 two-dimensional surfaces : the sphere
  9. 修改联通服务器密码,联通的服务器咋设置密码
  10. 首发:成功解决MediaCodec中decoder超过720出错的问题
  11. Android音视频三-AndroidStudio整合FFmpeg项目+FFmpeg视频解码
  12. php用jspstudy怎么运行,JspStudy如何设置PHP根目录可编辑
  13. 如何批量打印ppt文件
  14. C语言程序设计(十七)12.12
  15. tcpdump进行IP抓包
  16. 有哪些好用的渲染软件?12个业内顶级渲染软件推荐
  17. harmonyos演示,HarmonyOS 2.0 跨屏演示:手机编辑内容跨到平板,自动优化排版
  18. Vue2官网使用及简介
  19. Bluetooth协议
  20. 算法工程师,上岸了!

热门文章

  1. (一)开始使用混合边缘AI进行面部识别
  2. 使用TypeScript正确键入Vuex
  3. Django 3.0 正式发布,开始支持异步功能
  4. 将您的SQL Server工作负载迁移到PostgreSQL –第2部分
  5. Python 真的勒死 R 了吗?
  6. ASP.NET Core 和 Blazor 更新
  7. 学习Azure Functions:在Visual Studio 2017中创建Azure Functions
  8. 肌电信号的包络matlab程序_基于matlab的肌电信号处理程序
  9. 微博粉丝精灵_腾讯与精灵宝可梦公司宣布合作开发新游戏
  10. winform 填充圆形 锯齿_Qt项目中,三种图形渐变填充方式详细总结