当前位置: 首页 > news >正文

福田区住房和建设局地址官方网站做微商能利用的网站有哪些

福田区住房和建设局地址官方网站,做微商能利用的网站有哪些,马云1688网站在濮阳如何做,南京江宁网站建设仅仅知道 Redis 服务端的操作知识#xff0c;还是远远不够的#xff0c;如果想要真正在项目中得到应用#xff0c;我们还需要一个 Redis 的客户端#xff0c;然后将其集成到项目中#xff0c;让程序自动根据我们的业务需要自动处理。 基于 Redis 开放的通信协议#xff…仅仅知道 Redis 服务端的操作知识还是远远不够的如果想要真正在项目中得到应用我们还需要一个 Redis 的客户端然后将其集成到项目中让程序自动根据我们的业务需要自动处理。 基于 Redis 开放的通信协议大神们纷纷开发了各种语言的 redis 客户端有 c、c、java、python、php、nodeJs 等等开发语言的客户端准确来说其实这些客户端都是基于 Redis 命令做了一层封装然后打包成工具以便大家更佳方便的操作 Redis以 Java 项目为例使用最广的就是以下三种客户端 JedisLettuceRedisson 2. 集成 Jedis Jedis 是老牌的 Redis 的 Java 客户端提供了比较全面的 Redis 命令的操作支持也是目前使用最广泛的客户端 官方网址Jedis 官网 1、引入依赖 dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion4.4.3/version /dependency2、然后创建一个简单的测试即可实现连接 public class JedisMain {public static void main(String[] args) {// 1.构造一个 Jedis 对象因为这里使用的默认端口 6379所以不用配置端口Jedis jedis new Jedis(127.0.0.1, 6379);// 2.密码认证//jedis.auth(111111);// 3.测试是否连接成功String ping jedis.ping();// 4.返回 pong 表示连接成功System.out.println(ping);} }对于 Jedis 而言一旦连接上了 Redis 服务器剩下的操作就非常容易了由于 Jedis 中的 API 和 Redis 的命令高度一致所以Jedis 中的方法见名知意直接使用即可 3. 连接池 虽然 Redis 服务端是单线程操作但是在实际项目中使用 Jedis 对象来操作 rRedis 时每次操作都需要新建/关闭 TCP 连接连接资源开销很高。同时 Jedis 对象的个数不受限制在极端情况下可能会造成连接泄漏。同时Jedis 存在多线程不安全的问题。 为什么说 Jedis 线程不安全更加详细的原因可以访问这个地址使用jedis面临的非线程安全问题 所以我们需要将 Jedis 交给线程池来管理使用 Jedis 对象时从连接池获取 Jedis使用完成之后再还给连接池。 在使用之前需要添加 common-pool 线程池依赖包 dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-pool2/artifactIdversion2.11.1/version /dependency创建一个简单的使用线程池测试用例 public class JedisPoolMain {public static void main(String[] args) {// 1. 构造一个 Jedis 连接池JedisPool pool new JedisPool(127.0.0.1, 6379);// 2. 从连接池中获取一个 Jedis 连接Jedis jedis pool.getResource();// 3. Jedis 操作String ping jedis.ping();System.out.println(ping);// 4. 归还连接jedis.close();} }4. 连接池配置 public class RedisPoolUtil {private static JedisPool jedisPool null;/*** redis服务器地址*/private static String addr 127.0.0.1;/*** redis服务器端口*/private static int port 6379;static{try {JedisPoolConfig config new JedisPoolConfig();//连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认trueconfig.setBlockWhenExhausted(true);//设置的逐出策略类名, 默认DefaultEvictionPolicy(当连接超过最大空闲时间,或连接数超过最大空闲连接数)config.setEvictionPolicyClassName(org.apache.commons.pool2.impl.DefaultEvictionPolicy);//是否启用pool的jmx管理功能, 默认trueconfig.setJmxEnabled(true);//MBean ObjectName new ObjectName(org.apache.commons.pool2:typeGenericObjectPool,name pool i); 默认为pool, JMX不熟,具体不知道是干啥的...默认就好.config.setJmxNamePrefix(pool);//是否启用后进先出, 默认trueconfig.setLifo(true);//最大空闲连接数, 默认8个config.setMaxIdle(8);//最大连接数, 默认8个config.setMaxTotal(8);//获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间, 默认-1config.setMaxWaitMillis(-1);//逐出连接的最小空闲时间 默认1800000毫秒(30分钟)config.setMinEvictableIdleTimeMillis(1800000);//最小空闲连接数, 默认0config.setMinIdle(0);//每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3config.setNumTestsPerEvictionRun(3);//对象空闲多久后逐出, 当空闲时间该值 且 空闲连接最大空闲数 时直接逐出,不再根据MinEvictableIdleTimeMillis判断 (默认逐出策略)config.setSoftMinEvictableIdleTimeMillis(1800000);//在获取连接的时候检查有效性, 默认falseconfig.setTestOnBorrow(false);//在空闲时检查有效性, 默认falseconfig.setTestWhileIdle(false);//逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1config.setTimeBetweenEvictionRunsMillis(-1);jedisPool new JedisPool(config, addr, port, 3000);} catch (Exception e) {e.printStackTrace();}}/*** 获取 Jedis 资源* * author zzc* date 2023/8/8 15:28 * return redis.clients.jedis.Jedis*/public static Jedis getJedis() {if (jedisPool ! null) {return jedisPool.getResource();}return null;}/*** 释放Jedis资源* * author zzc* date 2023/8/8 15:28 * param jedis */public static void close(final Jedis jedis) {if (jedis ! null) {jedis.close();}}}简单测试 public static void main(String[] args) throws InterruptedException {//获取 jedis 客户端Jedis jedis RedisPoolUtil.getJedis();System.out.println(清空数据jedis.flushDB());System.out.println(判断某个键是否存在jedis.exists(username));System.out.println(新增username,xmr的键值对jedis.set(username, xmr));System.out.println(jedis.exists(username));System.out.println(新增password,password的键值对jedis.set(password, 123));System.out.print(系统中所有的键如下);SetString keys jedis.keys(*);System.out.println(keys);System.out.println(删除键password:jedis.del(password));System.out.println(判断键password是否存在jedis.exists(password));System.out.println(设置键username的过期时间为5s:jedis.expire(username, 8L));TimeUnit.SECONDS.sleep(1);System.out.println(查看键username的剩余生存时间jedis.ttl(username));System.out.println(移除键username的生存时间jedis.persist(username));System.out.println(查看键username的剩余生存时间jedis.ttl(username));System.out.println(查看键username所存储的值的类型jedis.type(username));RedisPoolUtil.close(jedis); }5. 常用 API 操作 5.1 字符串常用 API 操作 public class RedisClientUtil {private static final Logger log LoggerFactory.getLogger(RedisClientUtil.class);/*** 获取指定key的值,如果key不存在返回null* 返回值返回 key 的值如果 key 不存在时返回 nil* param key* return*/public static String get(String key) {try (Jedis jedis jedisPool.getResource()) {return jedis.get(key);} catch (Exception e){log.error(get命令操作失败请求参数{}, key,e);}return null;}/*** 设置key的值为value* 返回值操作成功完成时返回 OK* param key* return*/public static String set(String key, String value) {try (Jedis jedis jedisPool.getResource()) {return jedis.set(key, value);} catch (Exception e){log.error(set命令操作失败参数key{}参数value{}, key, value,e);}return null;}/*** 删除指定的key返回值被删除 key 的数量* 返回值被删除 key 的数量* param key* return*/public static Long del(String key) {try (Jedis jedis jedisPool.getResource()) {Long result jedis.del(key);return jedis.del(key);} catch (Exception e){log.error(del命令操作失败参数key{}, key,e);}return 0L;}/*** 通过key向指定的value值追加值* 返回值追加指定值之后 key中字符串的长度* param key* return*/public static Long append(String key, String value) {try (Jedis jedis jedisPool.getResource()) {return jedis.append(key, value);} catch (Exception e){log.error(append命令操作失败参数key{}参数value{}, key, value,e);}return 0L;}/*** 判断key是否存在* 返回值true/false* param key* return*/public static Boolean exists(String key) {try (Jedis jedis jedisPool.getResource()) {return jedis.exists(key);} catch (Exception e){log.error(exists命令操作失败参数key{}, key,e);}return false;}/*** 设置key的超时时间为seconds* 返回值若 key 存在返回 1 否则返回 0* param key* return*/public static Long expire(String key, long seconds) {try (Jedis jedis jedisPool.getResource()) {return jedis.expire(key, seconds);} catch (Exception e){log.error(expire命令操作失败参数key{}参数seconds{}, key, seconds,e);}return 0L;}/*** 返回 key 的剩余过期时间单位秒* 返回值当 key 不存在时返回 -2 。 当 key 存在但没有设置剩余生存时间时返回 -1 。 否则以秒为单位返回 key 的剩余生存时间* param key* return*/public static Long ttl(String key) {try (Jedis jedis jedisPool.getResource()) {return jedis.ttl(key);} catch (Exception e){log.error(ttl命令操作失败参数key{}, key,e);}return 0L;}/*** 设置指定key的值为value,当key不存在时才设置* 返回值设置成功返回 1设置失败返回 0* param key* return*/public static Long setnx(String key, String value) {try (Jedis jedis jedisPool.getResource()) {return jedis.setnx(key, value);} catch (Exception e){log.error(setnx命令操作失败参数key{}参数value{}, key, value,e);}return 0L;}/*** 设置指定key的值为value,并设置过期时间* 返回值设置成功时返回 OK* param key* return*/public static String setex(String key, String value, long seconds) {try (Jedis jedis jedisPool.getResource()) {return jedis.setex(key, seconds, value);} catch (Exception e){log.error(setex命令操作失败参数key{}参数value{}, key, value,e);}return null;}/*** 通过key 和offset 从指定的位置开始将原先value替换* 返回值被修改后的字符串长度* param key* return*/public static Long setrange(String key, int offset, String value) {try (Jedis jedis jedisPool.getResource()) {return jedis.setrange(key, offset, value);} catch (Exception e){log.error(setrange命令操作失败参数key{}参数value{}参数offset{}, key, value, offset,e);}return null;}/*** 通过批量的key获取批量的value* 返回值一个包含所有给定 key 的值的列表。* param keys* return*/public static ListString mget(String... keys) {try (Jedis jedis jedisPool.getResource()) {return jedis.mget(keys);} catch (Exception e){log.error(mget命令操作失败参数key{}, keys.toString(),e);}return null;}/*** 批量的设置key:value,也可以一个* 返回值总是返回 OK* param keysValues* return*/public static String mset(String... keysValues) {try (Jedis jedis jedisPool.getResource()) {return jedis.mset(keysValues);} catch (Exception e){log.error(mset命令操作失败参数key{}, keysValues.toString(),e);}return null;}/*** 设置key的值,并返回一个旧值* 返回值返回给定 key 的旧值当 key 没有旧值时即 key 不存在时返回 nil* param key* return*/public static String getSet(String key, String value) {try (Jedis jedis jedisPool.getResource()) {return jedis.getSet(key, value);} catch (Exception e){log.error(getSet命令操作失败参数key{}参数value{}, key, value,e);}return null;}/*** 通过下标和 key 获取指定下标位置的 value* 返回值截取得到的子字符串* param key* return*/public static String getrange(String key, int startOffset, int endOffset) {try (Jedis jedis jedisPool.getResource()) {return jedis.getrange(key, startOffset, endOffset);} catch (Exception e){log.error(getrange命令操作失败参数key{}参数startOffset{}参数offset{}, key, startOffset, endOffset,e);}return null;}/*** 通过key 对value进行加值1操作,当value不是int类型时会返回错误,当key不存在是则value为1* 返回值执行INCR命令之后 key 的值* param key* return*/public static Long incr(String key) {try (Jedis jedis jedisPool.getResource()) {return jedis.incr(key);} catch (Exception e){log.error(incr命令操作失败参数key{}, key, e);}return 0L;}/*** 通过key给指定的value加值* 返回值执行INCR命令之后 key 的值* param key* return*/public static Long incrBy(String key, long increment) {try (Jedis jedis jedisPool.getResource()) {return jedis.incrBy(key, increment);} catch (Exception e){log.error(incrBy命令操作失败参数key{}参数increment{}, key, increment,e);}return 0L;}/*** 对key的值做减减操作* 返回值执行INCR命令之后 key 的值* param key* return*/public static Long decr(String key) {try (Jedis jedis jedisPool.getResource()) {return jedis.decr(key);} catch (Exception e){log.error(decr命令操作失败参数key{}, key, e);}return 0L;}/*** 对key的值做减减操作,减去指定的值* 返回值执行INCR命令之后 key 的值* param key* return*/public static Long decrBy(String key, long decrement) {try (Jedis jedis jedisPool.getResource()) {return jedis.decrBy(key, decrement);} catch (Exception e){log.error(decrBy命令操作失败参数key{}参数decrement{}, key, decrement,e);}return 0L;}/*** 通过key获取value值的长度* 返回值value值的长度* param key* return*/public static Long strlen(String key) {try (Jedis jedis jedisPool.getResource()) {return jedis.strlen(key);} catch (Exception e){log.error(strlen命令操作失败参数key{}, key, e);}return 0L;} }5.2 哈希常用 API 操作 public class RedisClientUtil {private static final Logger log LoggerFactory.getLogger(RedisClientUtil.class);/*** 通过key 和 field 获取指定的 value* 返回值对应的value值* param key* return*/public static String hget(String key, String field) {try (Jedis jedis jedisPool.getResource()) {return jedis.hget(key, field);} catch (Exception e){log.error(hget命令操作失败参数key{}参数field{}, key, field,e);}return null;}/*** 通过key给field设置指定的值,如果key不存在,则先创建* 返回值如果字段是哈希表中的一个新建字段并且值设置成功返回 1 ;如果哈希表中域字段已经存在且旧值已被新值覆盖返回 0 。* param key* return*/public static Long hset(String key, String field, String value) {try (Jedis jedis jedisPool.getResource()) {return jedis.hset(key, field, value);} catch (Exception e){log.error(hset命令操作失败参数key{}参数field{}参数value{}, key, field, value,e);}return 0L;}/*** 通过key和field判断是否有指定的value存在* 返回值true/false* param key* return*/public static Boolean hexists(String key, String field) {try (Jedis jedis jedisPool.getResource()) {return jedis.hexists(key, field);} catch (Exception e){log.error(hexists命令操作失败参数key{}参数field{}, key, field,e);}return false;}/*** 通过key返回field的数量* 返回值field的数量* param key* return*/public static Long hlen(String key) {try (Jedis jedis jedisPool.getResource()) {return jedis.hlen(key);} catch (Exception e){log.error(hlen命令操作失败参数key{}, key,e);}return 0L;}/*** 通过key 删除指定的 field* 返回值删除的数量* param key* return*/public static Long hdel(String key, String... fields) {try (Jedis jedis jedisPool.getResource()) {return jedis.hdel(key, fields);} catch (Exception e){log.error(hdel命令操作失败参数key{}参数fields{}, key, fields.toString(),e);}return 0L;}/*** 通过key返回所有的field* 返回值field集合* param key* return*/public static SetString hkeys(String key) {try (Jedis jedis jedisPool.getResource()) {return jedis.hkeys(key);} catch (Exception e){log.error(hkeys命令操作失败参数key{}, key,e);}return null;}/*** 通过key获取所有的field和value* 返回值map对象* param key* return*/public static MapString, String hgetAll(String key) {try (Jedis jedis jedisPool.getResource()) {return jedis.hgetAll(key);} catch (Exception e){log.error(hgetAll命令操作失败参数key{}, key,e);}return null;}5.3 列表常用 API 操作 public class RedisClientUtil {private static final Logger log LoggerFactory.getLogger(RedisClientUtil.class);/*** 过key向list头部添加字符串* 返回值执行 LPUSH 命令后列表的长度* param key* return*/public static Long lpush(String key, String... strs) {try (Jedis jedis jedisPool.getResource()) {return jedis.lpush(key, strs);} catch (Exception e){log.error(lpush命令操作失败参数key{}参数strs{}, key, strs.toString(),e);}return null;}/*** 通过key向list尾部添加字符串* 返回值执行 RPUSH 命令后列表的长度* param key* return*/public static Long rpush(String key, String... strs) {try (Jedis jedis jedisPool.getResource()) {return jedis.rpush(key, strs);} catch (Exception e){log.error(rpush命令操作失败参数key{}参数strs{}, key, strs.toString(),e);}return null;}/*** 通过key设置list指定下标位置的value 如果下标超过list里面value的个数则报错* 返回值操作成功返回 ok 否则返回错误信息* param key* return*/public static String lset(String key, Long index, String value) {try (Jedis jedis jedisPool.getResource()) {return jedis.lset(key, index, value);} catch (Exception e){log.error(lset命令操作失败参数key{}参数index{}参数value{}, key, index, value,e);}return null;}/*** 通过key从对应的list中删除指定的count个 和 value相同的元素* 返回值返回被删除的个数* param key* return*/public static Long lrem(String key, long count, String value) {try (Jedis jedis jedisPool.getResource()) {return jedis.lrem(key, count, value);} catch (Exception e){log.error(lrem命令操作失败参数key{}参数count{}参数value{}, key, count, value,e);}return null;}/*** 通过key保留list中从strat下标开始到end下标结束的value值* 返回值操作成功返回 ok 否则返回错误信息* param key* return*/public static String ltrim(String key, long start, long end) {try (Jedis jedis jedisPool.getResource()) {return jedis.ltrim(key, start, end);} catch (Exception e){log.error(ltrim命令操作失败参数key{}参数start{}参数end{}, key, start, end,e);}return null;}/*** 通过key从list的头部删除一个value,并返回该value* 返回值value值* param key* return*/public static String lpop(String key) {try (Jedis jedis jedisPool.getResource()) {return jedis.lpop(key);} catch (Exception e){log.error(lpop命令操作失败参数key{}, key,e);}return null;}/*** 通过key从list尾部删除一个value,并返回该元素* 返回值value值* param key* return*/public static String rpop(String key) {try (Jedis jedis jedisPool.getResource()) {return jedis.rpop(key);} catch (Exception e){log.error(rpop命令操作失败参数key{}, key,e);}return null;}/*** 通过key获取list中指定下标位置的value* 返回值value值* param key* return*/public static String lindex(String key, long index){try (Jedis jedis jedisPool.getResource()) {return jedis.lindex(key, index);} catch (Exception e){log.error(lindex命令操作失败参数key{}参数index{}, key, index,e);}return null;}/*** 通过key返回list的长度* 返回值value值* param key* return*/public static Long llen(String key) {try (Jedis jedis jedisPool.getResource()) {return jedis.llen(key);} catch (Exception e){log.error(llen命令操作失败参数key{}, key,e);}return null;}/*** 通过key获取list指定下标位置的value 如果start 为 0 end 为 -1 则返回全部的list中的value* 返回值value值* param key* return*/public static ListString lrange(String key, long start, long end) {try (Jedis jedis jedisPool.getResource()) {return jedis.lrange(key, start, end);} catch (Exception e){log.error(lrange命令操作失败参数key{}参数start{}参数end{}, key, start, end,e);}return null;} }5.4 Set 常用 API 操作 public class RedisClientUtil {private static final Logger log LoggerFactory.getLogger(RedisClientUtil.class);/*** 通过key向指定的set中添加value* 返回值添加成功的个数* param key* return*/public static Long sadd(String key, String... members) {try (Jedis jedis jedisPool.getResource()) {return jedis.sadd(key, members);} catch (Exception e){log.error(sadd命令操作失败参数key{}参数members{}, key, members.toString(),e);}return null;}/*** 通过key删除set中对应的value值* 返回值删除成功的个数* param key* return*/public static Long srem(String key, String... members) {try (Jedis jedis jedisPool.getResource()) {return jedis.srem(key, members);} catch (Exception e){log.error(srem命令操作失败参数key{}参数members{}, key, members.toString(),e);}return null;}/*** 通过key获取set中value的个数* 返回值value的个数* param key* return*/public static Long scard(String key) {try (Jedis jedis jedisPool.getResource()) {return jedis.scard(key);} catch (Exception e){log.error(scard命令操作失败参数key{}, key,e);}return 0L;}/*** 通过key判断value是否是set中的元素* 返回值true/false* param key* return*/public static Boolean sismember(String key, String member) {try (Jedis jedis jedisPool.getResource()) {return jedis.sismember(key, member);} catch (Exception e){log.error(sismember命令操作失败参数key{}参数member{}, key, member,e);}return false;}/*** 通过key获取set中所有的value* 返回值所有的value* param key* return*/public static SetString smembers(String key) {try (Jedis jedis jedisPool.getResource()) {return jedis.smembers(key);} catch (Exception e){log.error(smembers命令操作失败参数key{}, key,e);}return null;}}5.5 Zset 常用 API 操作 public class RedisClientUtil {private static final Logger log LoggerFactory.getLogger(RedisClientUtil.class);/*** 通过key向zset中添加value,score,其中score就是用来排序的 如果该value已经存在则根据score更新元素* 返回值被成功添加的新成员的数量不包括那些被更新的、已经存在的成员* param key* return*/public static Long zadd(String key, double score, String member) {try (Jedis jedis jedisPool.getResource()) {return jedis.zadd(key, score, member);} catch (Exception e){log.error(zadd命令操作失败参数key{}参数score{}参数member{}, key, score, member,e);}return null;}/*** 通过key删除在zset中指定的value* 返回值删除个数* param key* return*/public static Long zrem(String key, String... members) {try (Jedis jedis jedisPool.getResource()) {return jedis.zrem(key, members);} catch (Exception e){log.error(zrem命令操作失败参数key{}参数members{}, key, members.toString(),e);}return null;}/*** 通过key增加该zset中value的score的值* 返回值member 成员的新分数值* param key* return*/public static Double zincrby(String key, double score, String member) {try (Jedis jedis jedisPool.getResource()) {return jedis.zincrby(key, score, member);} catch (Exception e){log.error(zincrby命令操作失败参数key{}参数score{}参数member{}, key, score, member,e);}return null;}/*** 通过key返回zset中value的排名 下标从小到大排序* 返回值返回 member 的排名* param key* return*/public static Long zrank(String key, String member) {try (Jedis jedis jedisPool.getResource()) {return jedis.zrank(key, member);} catch (Exception e){log.error(zrank命令操作失败参数key{}参数member{}, key, member,e);}return null;}/*** 通过key将获取score从start到end中zset的value socre从大到小排序 当start为0 end为-1时返回全部* 返回值返回 member 集合* param key* return*/public static SetString zrevrange(String key, long start, long end) {try (Jedis jedis jedisPool.getResource()) {return jedis.zrevrange(key, start, end);} catch (Exception e){log.error(zrevrange命令操作失败参数key{}参数start{}参数end{}, key, start, end,e);}return null;}/*** 返回指定区间内zset中value的数量* 返回值返回 member 集合* param key* return*/public static Long zcount(String key, String min, String max) {try (Jedis jedis jedisPool.getResource()) {return jedis.zcount(key, min, max);} catch (Exception e){log.error(zcount命令操作失败参数key{}参数min{}参数max{}, key, min, max,e);}return null;}/*** 通过key返回zset中的value个数* 返回值返回 member 集合* param key* return*/public static Long zcard(String key) {try (Jedis jedis jedisPool.getResource()) {return jedis.zcard(key);} catch (Exception e){log.error(zcard命令操作失败参数key{}, key,e);}return null;}/*** 返回满足pattern表达式的所有key keys(*) 返回所有的key* 返回值返回 key 集合* param pattern* return*/public static SetString keys(String pattern) {try (Jedis jedis jedisPool.getResource()) {return jedis.keys(pattern);} catch (Exception e){log.error(keys命令操作失败参数pattern{}, pattern,e);}return null;}/*** 通过key判断值得类型* 返回值值的类型* param key* return*/public static String type(String key) {try (Jedis jedis jedisPool.getResource()) {return jedis.type(key);} catch (Exception e){log.error(type命令操作失败参数key{}, key,e);}return null;}}6. 集群配置 在实际的项目生产环境中redis 通常不是以单台服务实例来运行的因为一旦服务器挂了可能所有的下游服务都会受到影响因此为了保障单台服务器即使出现故障也能运行通常运维组会搭建集群环境来保证服务高可用。 搭建的方式有两种哨兵模式和 Cluster 模式。 哨兵模式对 redis 服务器进行监控如果有宕机的就从备机里面选一个出来作为主机实现自动切换Cluster 模式将数据进行分片存储避免全部节点数据都一样浪费空间 6.1 哨兵模式 哨兵模式简单的说就是一台主机一台备机外加一台监控服务当监控服务观测到主机已经宕机就会将备用机切换成主机以便继续提供服务 public class RedisPoolUtil {private static Jedis jedis;private static JedisSentinelPool jedisSentinelPool;static{try {JedisPoolConfig config new JedisPoolConfig();//最大空闲连接数, 默认8个config.setMaxIdle(8);//最大连接数, 默认8个config.setMaxTotal(8);//最小空闲连接数, 默认0config.setMinIdle(0);//获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间, 默认-1config.setMaxWaitMillis(3000);//在获取连接的时候检查有效性,表示取出的redis对象可用, 默认falseconfig.setTestOnBorrow(true);//redis服务器列表SetString sentinels new HashSet();sentinels.add(new HostAndPort(192.168.43.212, 26379).toString());sentinels.add(new HostAndPort(192.168.43.213, 26379).toString());sentinels.add(new HostAndPort(192.168.43.214, 26379).toString());//初始化连接池jedisSentinelPool new JedisSentinelPool(mymaster, sentinels, config, 111111);// 从池中获取一个Jedis对象jedis jedisSentinelPool.getResource();} catch (Exception e) {e.printStackTrace();}}}6.2 集群模式 为了保证高可用redis-cluster 集群通常会引入主从复制模型一个主节点对应一个或者多个从节点当主节点宕机的时候就会启用从节点 public class RedisPoolUtil {static{try {JedisPoolConfig config new JedisPoolConfig();//最大空闲连接数, 默认8个config.setMaxIdle(8);//最大连接数, 默认8个config.setMaxTotal(8);//最小空闲连接数, 默认0config.setMinIdle(0);//获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间, 默认-1config.setMaxWaitMillis(3000);//在获取连接的时候检查有效性,表示取出的redis对象可用, 默认falseconfig.setTestOnBorrow(true);SetHostAndPort nodes new HashSet();nodes.add(new HostAndPort(192.168.43.212, 26379));nodes.add(new HostAndPort(192.168.43.213, 26379));nodes.add(new HostAndPort(192.168.43.214, 26379));JedisCluster jedisCluster new JedisCluster(nodes, config);jedisCluster.set(key, hello world);jedisCluster.close();} catch (Exception e) {e.printStackTrace();}} }7. 总结 Jedis 客户端是目前使用最广泛的一款 java 客户端也是老牌的 Redis 的 Java 实现客户端。 优点很突出 比较全面的提供了 Redis 的操作特性也就是说你能用 redis 命令操作的Jedis 包都也给你封装好了直接使用即可使用广泛易上手 当然缺点也有 Jedis 客户端实例不是线程安全的需要借助连接池来管理和使用 Jedis使用阻塞的I/O且其方法调用都是同步的程序流需要等到 sockets 处理完 I/O 才能执行不支持异步
文章转载自:
http://www.morning.kqbwr.cn.gov.cn.kqbwr.cn
http://www.morning.ampingdu.com.gov.cn.ampingdu.com
http://www.morning.qzglh.cn.gov.cn.qzglh.cn
http://www.morning.xbmwh.cn.gov.cn.xbmwh.cn
http://www.morning.lfbzg.cn.gov.cn.lfbzg.cn
http://www.morning.txrkq.cn.gov.cn.txrkq.cn
http://www.morning.gtbjc.cn.gov.cn.gtbjc.cn
http://www.morning.rqqct.cn.gov.cn.rqqct.cn
http://www.morning.txmkx.cn.gov.cn.txmkx.cn
http://www.morning.jqswf.cn.gov.cn.jqswf.cn
http://www.morning.wgbsm.cn.gov.cn.wgbsm.cn
http://www.morning.rfljb.cn.gov.cn.rfljb.cn
http://www.morning.fpxsd.cn.gov.cn.fpxsd.cn
http://www.morning.pnfwd.cn.gov.cn.pnfwd.cn
http://www.morning.brtxg.cn.gov.cn.brtxg.cn
http://www.morning.yrjkz.cn.gov.cn.yrjkz.cn
http://www.morning.xjbtb.cn.gov.cn.xjbtb.cn
http://www.morning.smqjl.cn.gov.cn.smqjl.cn
http://www.morning.jcwrb.cn.gov.cn.jcwrb.cn
http://www.morning.lxyyp.cn.gov.cn.lxyyp.cn
http://www.morning.cnxpm.cn.gov.cn.cnxpm.cn
http://www.morning.lkkgq.cn.gov.cn.lkkgq.cn
http://www.morning.rpzth.cn.gov.cn.rpzth.cn
http://www.morning.hdwjb.cn.gov.cn.hdwjb.cn
http://www.morning.lrnfn.cn.gov.cn.lrnfn.cn
http://www.morning.tkrpt.cn.gov.cn.tkrpt.cn
http://www.morning.jbfzx.cn.gov.cn.jbfzx.cn
http://www.morning.xlwpz.cn.gov.cn.xlwpz.cn
http://www.morning.rkqzx.cn.gov.cn.rkqzx.cn
http://www.morning.ghssm.cn.gov.cn.ghssm.cn
http://www.morning.ahlart.com.gov.cn.ahlart.com
http://www.morning.drytb.cn.gov.cn.drytb.cn
http://www.morning.qsy39.cn.gov.cn.qsy39.cn
http://www.morning.kjmws.cn.gov.cn.kjmws.cn
http://www.morning.fpjxs.cn.gov.cn.fpjxs.cn
http://www.morning.ttnfc.cn.gov.cn.ttnfc.cn
http://www.morning.nbrdx.cn.gov.cn.nbrdx.cn
http://www.morning.nyhtf.cn.gov.cn.nyhtf.cn
http://www.morning.bby45.cn.gov.cn.bby45.cn
http://www.morning.hphrz.cn.gov.cn.hphrz.cn
http://www.morning.kkysz.cn.gov.cn.kkysz.cn
http://www.morning.qflwp.cn.gov.cn.qflwp.cn
http://www.morning.nj-ruike.cn.gov.cn.nj-ruike.cn
http://www.morning.mfct.cn.gov.cn.mfct.cn
http://www.morning.ltffk.cn.gov.cn.ltffk.cn
http://www.morning.bbyqz.cn.gov.cn.bbyqz.cn
http://www.morning.qgjxt.cn.gov.cn.qgjxt.cn
http://www.morning.rgxn.cn.gov.cn.rgxn.cn
http://www.morning.nbsfb.cn.gov.cn.nbsfb.cn
http://www.morning.snnwx.cn.gov.cn.snnwx.cn
http://www.morning.spfq.cn.gov.cn.spfq.cn
http://www.morning.kyjyt.cn.gov.cn.kyjyt.cn
http://www.morning.jnoegg.com.gov.cn.jnoegg.com
http://www.morning.rcjyc.cn.gov.cn.rcjyc.cn
http://www.morning.yqjjn.cn.gov.cn.yqjjn.cn
http://www.morning.yqsr.cn.gov.cn.yqsr.cn
http://www.morning.sqyjh.cn.gov.cn.sqyjh.cn
http://www.morning.wlfxn.cn.gov.cn.wlfxn.cn
http://www.morning.kndst.cn.gov.cn.kndst.cn
http://www.morning.wkxsy.cn.gov.cn.wkxsy.cn
http://www.morning.lqlhw.cn.gov.cn.lqlhw.cn
http://www.morning.ymqfx.cn.gov.cn.ymqfx.cn
http://www.morning.phnbd.cn.gov.cn.phnbd.cn
http://www.morning.snkry.cn.gov.cn.snkry.cn
http://www.morning.sgfgz.cn.gov.cn.sgfgz.cn
http://www.morning.wqpm.cn.gov.cn.wqpm.cn
http://www.morning.kksjr.cn.gov.cn.kksjr.cn
http://www.morning.tmfhx.cn.gov.cn.tmfhx.cn
http://www.morning.dkfb.cn.gov.cn.dkfb.cn
http://www.morning.hilmwmu.cn.gov.cn.hilmwmu.cn
http://www.morning.rcqyk.cn.gov.cn.rcqyk.cn
http://www.morning.qrsm.cn.gov.cn.qrsm.cn
http://www.morning.xkyqq.cn.gov.cn.xkyqq.cn
http://www.morning.txmkx.cn.gov.cn.txmkx.cn
http://www.morning.nxbkw.cn.gov.cn.nxbkw.cn
http://www.morning.thnpj.cn.gov.cn.thnpj.cn
http://www.morning.yrjym.cn.gov.cn.yrjym.cn
http://www.morning.pmdnx.cn.gov.cn.pmdnx.cn
http://www.morning.jzfxk.cn.gov.cn.jzfxk.cn
http://www.morning.jbztm.cn.gov.cn.jbztm.cn
http://www.tj-hxxt.cn/news/273112.html

相关文章:

  • 学生个人网页制作 模板搜索引擎优化指南
  • 网站黄金比例51网站一起做网店广州
  • 定制开发网站 推广如何建设 营销型 网站
  • 网站开发的技术难点网站开发如何挣钱
  • 尚品中国网站阿里巴巴网站建设免费
  • 做网站要不要服务器厦门市网站建设app开发
  • 前端网站优化浙江省建设注册管理中心网站
  • 网站建设人员配备网站建设前期工作
  • 推广网站大全wordpress没小工具
  • 大团企业网站制作萍乡建站公司
  • 随州网站建站怎么注册自己的平台
  • 闸北做网站公司c#网站开发工具
  • 衡水网站建设格公司介绍常见的网络营销方式
  • 设计公司网站设计报价明细表长治网站制作服务
  • 怎么建设网站网页游戏嵌入式网站开发培训
  • 抚顺网站制作标志设计论文
  • 展示型企业网站营销目标主要有惠州建设网站
  • 电脑网页打不开建设银行网站怎么找到采购联系方式
  • 网站都要交域名费么朋友圈h5页面制作
  • 网站推广做多大尺寸邵阳 做网站公司
  • 如何使网站做的更好建行网站会员注册用户名
  • 长春做网站新格公司江苏伟业建设集团网站
  • 直接IP做访问我服务器的网站wordpress 投稿图片
  • 一分钟做网站wordpress调用优酷视频播放器
  • 家庭带宽100m做网站做思维导图的资源网站
  • pytson做网站安全吗网页浏览器网址
  • 做分色找工作网站网站动画效果怎么做的
  • 做电影资源网站有哪些代码运行框wordpress
  • 3d 代做网站邢台住房和城乡建设部网站
  • 做公司网站需要会什么wordpress分类文章置顶