4.redis分片
来源:互联网 发布:海阔淘宝客助手 编辑:程序博客网 时间:2024/05/29 10:47
在一些特定的业务场景,或者数据量比较大的时候,redis可以像数据库一样分表分库,它的概念是分片,当数据量很大的时候,你需要把数据分配到不同的机器上,比如100条数据,redis-a有50条,redis-b有50条数据。jedis提供了这样操作的实现类,ShardedJedis。
import java.util.Arrays;import java.util.List;import java.util.concurrent.atomic.AtomicBoolean;import java.util.concurrent.atomic.AtomicLong;import redis.clients.jedis.JedisShardInfo;import redis.clients.jedis.ShardedJedis;import redis.clients.jedis.ShardedJedisPool;public class redisShardedConcurrent { private static ShardedJedisPool redisPool ; void init() { redis.clients.jedis.JedisPoolConfig config = new redis.clients.jedis.JedisPoolConfig(); config.setMaxIdle(1000); config.setMaxTotal(500); List<JedisShardInfo> shards = Arrays.asList( new JedisShardInfo("192.168.1.68", 6379), new JedisShardInfo("127.0.0.1",6379)); //创建一个分片连接池 redisPool = new ShardedJedisPool(config,shards); } public static void main(String[] args) throws InterruptedException { final redisShardedConcurrent redisConcurrent = new redisShardedConcurrent(); redisConcurrent.init(); final AtomicLong counter = new AtomicLong(0); final AtomicBoolean stopFlag = new AtomicBoolean(false); final int threadCount = 1000; for (int i = 0; i < threadCount; i++) { final String sss = i + ""; new Thread(new Runnable() { @Override public void run() { while (!stopFlag.get()) { ShardedJedis jedis = redisPool.getResource(); jedis.set(sss, "aaasasdasdasdasdasdasdasdasdasdasdasdasdasaaaaaaaaaaaaaaaaaa"); redisPool.returnResource(jedis); counter.incrementAndGet(); } } }).start(); } Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { System.err.println("*** stop client ***"); stopFlag.set(true); } }); long startTime = System.currentTimeMillis(); while (!stopFlag.get()) { Thread.sleep(1000); final long count = counter.get(); long currentTime = System.currentTimeMillis(); long qps = count * 1000 / (currentTime - startTime); System.out.println("qps=" + qps); if ((currentTime - startTime) / 1000 > 10) { counter.set(0); startTime = currentTime; System.out.println("reset counter"); } } }}其实用方式也是很简单,创建一个分片连接池,从池里面获取ShardedJedis,然后进行操作,选择存储到哪个redis的时候,它有自己的一套算法,保证了一致性,但是在并发测试的时候,他的性能略低于jedis,主要是需要去计算存储到哪台redis上消耗了性能。
0 0
- 4.redis分片
- Redis分片
- Redis-分片
- Redis-分片
- redis分片:
- redis分片
- redis分片
- Redis分片理解实例
- Redis数据分片
- mysql、redis、mongo 分片
- redis分片式集群
- redis 分片(即分库分表)
- REDIS 进阶(12) redis分片
- Redis的分片、预分片技术总结
- Redis的分片、预分片技术总结
- Redis数据分片以及扩容
- Redis 分片遇到的问题
- redis学习记录08-分片
- 新学期,新起点,新计划;
- C++语言
- some frequently-used formula
- gitHub上传本地代码
- [BZOJ3879] SvT
- 4.redis分片
- 九度题目1434
- Leetcode283 Move Zeros
- 关于notepad++和gcc绑定
- jdbc连接oracle的方法
- Stanford 机器学习笔记 Week6 Advice for Applying Machine Learning
- 三层初体验
- 搭建博客hexo
- Win32 GetLasrError 实现