package com.tong.test;
import cn.hutool.bloomfilter.BitMapBloomFilter;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.*;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/***
* jedis测试用例
*/
public class JedisTest {
Jedis jedis;
/**
* 初始化jedis实列
*/
@Before
public void init() {
// 创建redis连接实列
jedis = new Jedis("192.168.66.100", 6379);
}
/**
* string操作
*/
@Test
public void stringTest() {
// 设置一个key
// jedis.set("k1","k2");
// 获取key的值
String k1 = jedis.get("k1");
System.out.println(k1);
//设置key过期时间为10
jedis.setex("k2", 10, "v2");
}
/**
* list操作
*/
@Test
public void listTest() {
// 添加元素 lpush rpush
jedis.lpush("list1", "v1", "v2");
jedis.rpush("list1", "v3", "v4");
// 获取所有元素
List<String> list1 = jedis.lrange("list1", 0, -1);
// 遍历元素
for (String s : list1) {
System.out.println(s);
}
}
/**
* set操作
*/
@Test
public void setTest() {
// 添加元素
jedis.sadd("set1", "v1", "v2", "v2", "v2", "v3");
// 获取元素
Set<String> set1 = jedis.smembers("set1");
//遍历所有元素
for (String s : set1) {
System.out.println(s);
}
}
/**
* hash操作
*/
@Test
public void hashTest() {
// 设置hash
jedis.hset("user", "age", "26");
jedis.hset("user", "name", "xiaotong");
// 获取所有key的value的值
List<String> user = jedis.hvals("user");
// 遍历所有元素s
for (String s : user) {
System.out.println(s);
}
}
/**
* zset操作
*/
@Test
public void zsetTest() {
// 添加元素
jedis.zadd("zset", 100, "java");
jedis.zadd("zset", 200, "python");
jedis.zadd("zset", 300, "c++");
jedis.zadd("zset", 400, "c");
// 获取所有值
Set<String> zset = jedis.zrange("zset", 0, -1);
// 遍历数据
for (String s : zset) {
System.out.println(s);
}
}
/**
* bitmaps数据类型
*/
@Test
public void bitmapsTest() {
// 给张三添加上班打卡记录
jedis.setbit("zhangsan:2", 0, "1");
jedis.setbit("zhangsan:2", 1, "1");
jedis.setbit("zhangsan:2", 2, "0");
jedis.setbit("zhangsan:2", 3, "1");
// 获取张三 第 3天上班记录
Boolean getbit = jedis.getbit("zhangsan:2", 2);
// 如果是1 true 0 false
System.out.println(getbit);
}
/**
* geo操作
*/
@Test
public void geoTest() {
// 添加地理信息
jedis.geoadd("china", 130, 30, "beijing");
// 获取地理信息
List<GeoCoordinate> geopos = jedis.geopos("china", "beijing");
// 遍历位置信息
for (GeoCoordinate geopo : geopos) {
System.out.println(geopo.toString());
}
}
/**
* hyperloglog操作
*/
@Test
public void hyperloglogTest() {
// 添加元素
jedis.pfadd("book", "uid1", "uid3", "uid3", "uid2");
// 获取书籍数量
long bookCount = jedis.pfcount("book");
System.out.println(bookCount);
}
/**
* 没有pipelibne
* 耗时 : 3037毫秒
*/
@Test
public void pipelineTest() {
// 开始时间
long startTime = System.currentTimeMillis();
// 添加hash元素
for (int i = 0; i < 10000; i++) {
jedis.hset("hashkey:" + i, "field" + i, "value" + i);
}
// 结束时间
long endTimt = System.currentTimeMillis();
System.out.println(endTimt - startTime);
}
/**
* pipeline
* 耗时: 83毫秒
*/
@Test
public void pepeline() {
// 开始时间
long startTime = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
Pipeline pipelined = jedis.pipelined();
for (int j = i * 100; j < (i + 1) * 100; j++) {
pipelined.hset("hashkey:" + j, "field" + j, "value" + j);
}
pipelined.syncAndReturnAll();
}
// 结束时间
long endTimt = System.currentTimeMillis();
System.out.println(endTimt - startTime);
}
@Test
public void clusterTest() {
//构建set集合保存redis node
Set<HostAndPort> redisNodes = new HashSet<>();
redisNodes.add(new HostAndPort("192.168.66.101", 8001));
redisNodes.add(new HostAndPort("192.168.66.102", 8001));
redisNodes.add(new HostAndPort("192.168.66.103", 8001));
redisNodes.add(new HostAndPort("192.168.66.101", 8002));
redisNodes.add(new HostAndPort("192.168.66.102", 8002));
redisNodes.add(new HostAndPort("192.168.66.103", 8002));
// 构建Jediscluster 建立连接
JedisCluster jedisCluster = new JedisCluster(redisNodes);
// 添加元素
String name = jedisCluster.get("name");
System.out.println(name);
}
@After
public void close() {
//关闭jedis连接
jedis.close();
}
/**
* 布隆过滤器
*/
@Test
public void FileterTest() {
// 初始化
BitMapBloomFilter bitMapBloomFilter = new BitMapBloomFilter(10);
// 添加元素
bitMapBloomFilter.add("abc");
bitMapBloomFilter.add("123");
bitMapBloomFilter.add("qwe");
bitMapBloomFilter.add("xiaotong");
System.out.println(bitMapBloomFilter.contains("abc"));
}
/**
* 互斥锁解决缓存击穿
*
* @param key 商品key
*/
@Test
public void lock(String key) throws InterruptedException {
// 获取key的值
String value = jedis.get(key);
// 判断缓存是否过期
if (value == null) {
// 设置3分钟超时。只有key不存在的时候才能创建
Long setnx = jedis.setnx(key + "_mutex", "1");
// 设置过期实践
jedis.pexpire(key + "_mutex", 3 * 60);
// 设置成功
if (setnx == 1) {
// DB操作 数据库操作
value = "db";
//保存缓存
jedis.setex(key, 3 * 60, value);
jedis.del(key + "_mutex");
} else {
Thread.sleep(5000);
lock(key);
}
}
}
/**
* 通过加锁 解决缓存雪崩
*
* @param key 商品key
*/
public Object saveLock(String key) {
// 加锁key
String lockKey = key;
// 获取key的值
String value = jedis.get(key);
// 判断是否过期
if (value == null) {
synchronized (lockKey) {
// 获取key的value的值
String s = jedis.get(key);
if (s != null) {
return s;
} else {
// DB 一般这里就是sql查询
value = "value";
jedis.set(key, value);
}
}
}
return lockKey;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Redis是一个开源的内存数据库(也可以用作缓存和消息中间件),它支持多种数据结构(如字符串、哈希表、列表、集合、有序集合等)并提供了丰富的功能,包括持久化、复制、事务等。Redis被设计用来快速存储和访问数据,通常用于构建高性能、可扩展的应用程序。 Redis的主要特点包括: 内存数据库:Redis将数据存储在内存中,因此能够提供非常高的读写性能。同时,它也可以通过持久化机制将数据写入磁盘,以保证数据不会因系统重启而丢失。 丰富的数据结构:Redis支持多种数据结构,如字符串、列表、集合、有序集合、哈希表等,使得开发者能够更灵活地组织和处理数据。 原子性操作:Redis支持原子性操作,能够保证多个操作的执行顺序和一致性,支持事务和流水线操作。 发布/订阅:Redis提供了发布/订阅功能,能够实现消息的异步发布和订阅,适用于实时通知、事件驱动等场景。 分布式支持:Redis提供了分布式部署和数据分片功能,能够构建高可用性、可扩展性的分布式系统。 高性能:由于数据存储在内存中,并且采用单线程模型,Redis能够实现极高的读写性能。 Redis广泛应用于缓存、会话存储、排行
资源推荐
资源详情
资源评论
收起资源包目录
最详细Redis学习资料(源码) (228个子文件)
JedisTest(1).class 7KB
JedisTest.class 7KB
SpringdataredisdemoApplicationTests.class 3KB
SpringdataredisdemoApplicationTests(1).class 3KB
MutexLock.class 2KB
MutexLock(1).class 2KB
RedisConfig(1).class 2KB
RedisConfig.class 2KB
SpringdataredisdemoApplication(1).class 812B
SpringdataredisdemoApplication.class 812B
mvnw.cmd 6KB
redis-desktop-manager-0.8.8.384.exe 27.18MB
.gitignore 395B
.gitignore 255B
(1).gitignore 255B
.gitignore 245B
(1).gitignore 245B
redis-6.2.6.tar.gz 2.36MB
springdataredisdemo.iml 10KB
redisdemo.iml 216B
maven-wrapper.jar 50KB
maven-wrapper(1).jar 50KB
JedisTest.java 8KB
MavenWrapperDownloader(1).java 5KB
MavenWrapperDownloader.java 5KB
MutexLock.java 3KB
SpringdataredisdemoApplicationTests.java 2KB
RedisConfig.java 1KB
SpringdataredisdemoApplication.java 359B
HELP.md 1KB
HELP(1).md 1KB
mvnw 10KB
application.properties 753B
application(1).properties 753B
application.properties 539B
maven-wrapper.properties 218B
maven-wrapper(1).properties 218B
qaplug_profiles.xml 41KB
qaplug_profiles.xml 41KB
workspace(1).xml 10KB
workspace(1).xml 9KB
uiDesigner.xml 9KB
uiDesigner(1).xml 9KB
workspace.xml 8KB
workspace.xml 8KB
pom.xml 2KB
Project_Default.xml 1KB
Project_Default.xml 1KB
pom.xml 1KB
misc.xml 992B
jarRepositories.xml 864B
jarRepositories(1).xml 864B
jarRepositories.xml 864B
jarRepositories(1).xml 864B
compiler.xml 848B
compiler(1).xml 848B
misc.xml 797B
Maven__org_springframework_boot_spring_boot_starter_data_redis_reactive_2_6_22.xml 776B
Maven__org_springframework_boot_spring_boot_starter_data_redis_reactive_2_6_2.xml 776B
compiler.xml 750B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_13_1.xml 736B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_13_12.xml 736B
Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_6_22.xml 713B
Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_6_2.xml 713B
Maven__org_springframework_boot_spring_boot_starter_data_redis_2_6_22.xml 713B
Maven__org_springframework_boot_spring_boot_starter_data_redis_2_6_2.xml 713B
Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin12.xml 700B
Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml 700B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_13_12.xml 695B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_13_1.xml 695B
Maven__org_springframework_boot_spring_boot_starter_logging_2_6_2.xml 692B
Maven__org_springframework_boot_spring_boot_starter_logging_2_6_22.xml 692B
Maven__org_springframework_boot_spring_boot_starter_tomcat_2_6_2.xml 685B
Maven__org_springframework_boot_spring_boot_starter_tomcat_2_6_22.xml 685B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_13_1.xml 681B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_13_12.xml 681B
Maven__org_springframework_boot_spring_boot_autoconfigure_2_6_22.xml 678B
Maven__org_springframework_boot_spring_boot_autoconfigure_2_6_2.xml 678B
Maven__org_springframework_boot_spring_boot_starter_test_2_6_22.xml 671B
Maven__org_springframework_boot_spring_boot_starter_json_2_6_22.xml 671B
Maven__org_springframework_boot_spring_boot_starter_json_2_6_2.xml 671B
Maven__org_springframework_boot_spring_boot_starter_test_2_6_2.xml 671B
Maven__org_springframework_boot_spring_boot_starter_web_2_6_22.xml 664B
Maven__org_springframework_boot_spring_boot_starter_web_2_6_2.xml 664B
Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_56.xml 660B
Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_562.xml 660B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_13_1.xml 651B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_13_12.xml 651B
Maven__org_springframework_spring_context_support_5_3_142.xml 644B
Maven__org_springframework_spring_context_support_5_3_14.xml 644B
Maven__org_springframework_data_spring_data_keyvalue_2_6_02.xml 643B
Maven__org_springframework_data_spring_data_keyvalue_2_6_0.xml 643B
Maven__io_netty_netty_tcnative_classes_2_0_46_Final2.xml 642B
Maven__io_netty_netty_tcnative_classes_2_0_46_Final.xml 642B
Maven__org_springframework_boot_spring_boot_starter_2_6_22.xml 636B
Maven__org_springframework_data_spring_data_commons_2_6_0.xml 636B
Maven__org_springframework_data_spring_data_commons_2_6_02.xml 636B
Maven__org_springframework_boot_spring_boot_starter_2_6_2.xml 636B
Maven__jakarta_annotation_jakarta_annotation_api_1_3_52.xml 633B
Maven__org_junit_platform_junit_platform_commons_1_8_2.xml 633B
共 228 条
- 1
- 2
- 3
资源评论
童小纯
- 粉丝: 3w+
- 资源: 289
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功