redis实战之基础,程序简单操作redis
redis程序客户端操作javajedismaven依赖 redis.clients jedis 3.6.3 简单操作
第一个超简单的程序 public class RedisOpt { public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.connect(); // -- 字符串操作 ---- System.out.println("-- 字符串操作 ----"); jedis.set("count", "1"); // 自增 jedis.incr("count"); System.out.println(jedis.get("count")); // setnx 命令 if(jedis.setnx("count","100") > 0){ System.out.println("setnx:count >>> " + jedis.get("count")); } else { System.out.println("key:count >>> redis中已经存在"); } // ---- hash ---- System.out.println("-- hash操作 ----"); jedis.hset("user", "name", "非鸽传书"); jedis.hset("user", "wish", "每天进步一点点"); jedis.hset("user", "maxim", "坚持是一种品格"); jedis.hset("user", "age", "18"); //输出结果 : {f1=v1, f2=v2} System.out.println(jedis.hgetAll("user")); jedis.hincrBy("user", "age", 2); // jedis.hsetnx(...) 和字符串的setnx命令类似, System.out.println("after incr >>> " + jedis.hgetAll("user")); // ---- set ----- System.out.println("-- set操作 ----"); jedis.sadd("mafei", "出城剿匪"); jedis.sadd("mafei", "公平"); jedis.sadd("mafei", "公平"); jedis.sadd("mafei", "还是公平"); System.out.println(jedis.smembers("mafei")); jedis.sadd("shiye", "出城剿匪"); jedis.sadd("shiye", "吃着火锅"); jedis.sadd("shiye", "唱着歌"); jedis.sadd("shiye", "忽然被马匪给劫~了"); System.out.println(jedis.smembers("shiye")); System.out.println("交集 >>> " + jedis.sinter("mafei","shiye")); System.out.println("差集 >>> " + jedis.sdiff("mafei","shiye")); System.out.println("并集 >>> " + jedis.sunion("mafei","shiye")); // ---- zset ----- System.out.println("-- zset操作 ----"); jedis.zadd("meals", 5, "breakfast"); jedis.zadd("meals", 20, "lunch"); jedis.zadd("meals", 18, "supper"); // 正序 System.out.println(jedis.zrangeWithScores("meals", 0, -1)); // 倒序 System.out.println(jedis.zrevrangeWithScores("meals", 0, -1)); // ---- list ---- System.out.println("-- list操作 ----"); jedis.del("reqList"); jedis.rpush("reqList", "再次暗示:"); jedis.rpush("reqList", "点赞、"); jedis.rpush("reqList", "关注"); jedis.del("please"); jedis.rpush("please", "连续暗示:"); jedis.rpush("please", "收藏、"); jedis.rpush("please", "评论"); List reqList = jedis.lrange("reqList", 0, -1); reqList.forEach(s -> System.out.print(s)); System.out.println(); List please = jedis.lrange("please", 0, -1); please.forEach(s -> System.out.print(s)); jedis.close(); } } // 输出结果 -- 字符串操作 ---- 2 key:count >>> redis中已经存在 -- hash操作 ---- {name=非鸽传书, wish=每天进步一点点, maxim=坚持是一种品格, age=18} after incr >>> {name=非鸽传书, wish=每天进步一点点, maxim=坚持是一种品格, age=20} -- set操作 ---- [吃着火锅, 出城剿匪, 忽然被马匪给劫~了, 还是公平, 公平, 唱着歌] [吃着火锅, 出城剿匪, 忽然被马匪给劫~了, 唱着歌] 交集 >>> [吃着火锅, 出城剿匪, 忽然被马匪给劫~了, 唱着歌] 差集 >>> [公平, 还是公平] 并集 >>> [吃着火锅, 出城剿匪, 忽然被马匪给劫~了, 还是公平, 公平, 唱着歌] -- zset操作 ---- [[breakfast,5.0], [supper,18.0], [lunch,20.0]] [[lunch,20.0], [supper,18.0], [breakfast,5.0]] -- list操作 ---- 再次暗示:点赞、关注 连续暗示:收藏、评论
jedis连接池
redis其实也是数据库,仅使用jedis来处理的话需要频繁的创建和关闭链接,因此可以采用jedis连接池来创建链接。 public class RedisJedisPool { public static void main(String[] args) { // 连接池配置对象,包含了很多默认配置 GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); JedisPool jedisPool = new JedisPool(poolConfig, "127.0.0.1", 6379); Jedis jedis = null; try { // 从连接池获取jedis对象 jedis = jedisPool.getResource(); // 执行操作 System.out.println(jedis.smembers("shiye")); } catch (Exception e) { System.out.println(e.getMessage()); } finally{ // 如果使用JedisPool,那么close操作不是关闭连接,代表归还连接池 if(jedis != null){ jedis.close(); } } } } // 输出结果: [吃着火锅, 出城剿匪, 唱着歌, 忽然被马匪给劫~了]Spring Boot 集成 Redis
只是简单的集成,具体使用需要优化的地方很多。
maven org.springframework.boot spring-boot-starter-data-redis 2.5.4
配置文件(.property, yml自行转换) ## redis spring.redis.host=127.0.0.1 #Redis服务器连接端口 spring.redis.port=6379 #Redis服务器连接密码(默认为空) spring.redis.password= #连接池最大连接数(使用负值表示没有限制) spring.redis.pool.max-active=8 #连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.pool.max-wait=-1 #连接池中的最大空闲连接 spring.redis.pool.max-idle=8 #连接池中的最小空闲连接 spring.redis.pool.min-idle=0 #连接超时时间(毫秒) spring.redis.timeout=30000
配置类 @Configuration public class RedisCfg { @Value("${spring.redis.host}") private String host; @Value("${spring.redis.port}") private int port; @Value("${spring.redis.timeout}") private int timeout; @Value("${spring.redis.password}") private String password; @Value("${spring.redis.pool.max-active}") private int maxActive; @Value("${spring.redis.pool.max-wait}") private int maxWait; @Value("${spring.redis.pool.max-idle}") private int maxIdle; @Value("${spring.redis.pool.min-idle}") private int minIdle; @Bean public JedisConnectionFactory redisConnectionFactory() { JedisConnectionFactory factory = new JedisConnectionFactory(); factory.setHostName(host); factory.setPort(port); factory.setTimeout(timeout); //设置连接超时时间 factory.setPassword(password); factory.getPoolConfig().setMaxIdle(maxIdle); factory.getPoolConfig().setMinIdle(minIdle); factory.getPoolConfig().setMaxTotal(maxActive); factory.getPoolConfig().setMaxWaitMillis(maxWait); return factory; } @Bean public RedisTemplate redisTemplate(RedisConnectionFactory factory) { StringRedisTemplate template = new StringRedisTemplate(factory); //设置序列化工具,这样ReportBean不需要实现Serializable接口 setSerializer(template); template.afterPropertiesSet(); return template; } private void setSerializer(StringRedisTemplate template) { Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setValueSerializer(jackson2JsonRedisSerializer); } }
工具类 @Component public class RedisUtils { @Autowired private RedisTemplate redisTemplate; /** * 写入缓存 * @param key * @param value * @return */ public boolean set(final String key, Object value) { boolean result = false; try { redisTemplate.opsForValue().set(key, value); result = true; } catch (Exception e) { System.out.println("ex" + e); } return result; } /** * 写入缓存设置时效时间 * @param key * @param value * @return */ public boolean set(final String key, Object value, Long expireTime , TimeUnit timeUnit) { boolean result = false; try { redisTemplate.opsForValue().set(key, value); redisTemplate.expire(key, expireTime, timeUnit); result = true; } catch (Exception e) { System.out.println("ex" + e); } return result; } /** * 批量删除对应的value * @param keys */ public void remove(final String... keys) { for (String key : keys) { remove(key); } } /** * 批量删除key * @param pattern */ public void removePattern(final String pattern) { Set keys = redisTemplate.keys(pattern); if (keys.size() > 0){ redisTemplate.delete(keys); } } /** * 删除对应的value * @param key */ public void remove(final String key) { if (exists(key)) { redisTemplate.delete(key); } } /** * 判断缓存中是否有对应的value * @param key * @return */ public boolean exists(final String key) { return redisTemplate.hasKey(key); } /** * 读取缓存 * @param key * @return */ public Object get(final String key) { Object result = null; result = redisTemplate.opsForValue().get(key); return result; } /** * 哈希 添加 * @param key * @param hashKey * @param value */ public void hmSet(String key, Object hashKey, Object value){ redisTemplate.opsForHash().put(key,hashKey,value); } /** * 哈希获取数据 * @param key * @param hashKey * @return */ public Object hmGet(String key, Object hashKey){ return redisTemplate.opsForHash().get(key,hashKey); } /** * 列表添加 * @param k * @param v */ public void lPush(String k,Object v){ redisTemplate.opsForList().rightPush(k,v); } /** * 列表获取 * @param k * @param l * @param l1 * @return */ public List
环球焦点人物马斯克,被争议包围的世界首富来源环球时报环球时报驻美国特约记者英辰环球时报特约记者任重埃隆马斯克正在以他的故事表明,作为最新的世界首富,他对人类及宇宙未来的影响力,可能很大程度上已经超越了石油大亨洛克菲勒投资
蒋凡卸任淘宝天猫法人及董事长当前已无法定代表人职务中华网财经4月2日讯,天眼查App显示,近日,蒋凡不再担任浙江淘宝网络有限公司浙江天猫网络有限公司阿里巴巴迅犀(杭州)数字科技有限公司法定代表人及董事长。天眼查显示,蒋凡当前已无法
iOS15。4。1发布建议所有用户升级,我建议别冲动在iOS15。4正式版发布后,我第一时间进行了升级,本来是冲着戴口罩解锁功能去的,没想到却牺牲了内存和续航。在升级了iOS15。4正式版后,内存莫名其妙的少了7个G,且耗电快得吓人
蒋凡卸任淘宝法定代表人及董事长近日,蒋凡不再担任浙江淘宝网络有限公司浙江天猫网络有限公司阿里巴巴迅犀(杭州)数字科技有限公司法定代表人及董事长。蒋凡当前已无法定代表人职务,关联企业共7家,其中3家已注销,在居然
2个新套路要留意,3亿用户被骗的团团转,人民日报紧急喊停5G时代下的大潮流近些年来,随着我国基础设施建设与卫星设备的完善,移动通讯和互联网技术有了显著的提高,其中,我国较其他国家更先进的5G技术便是一例。5G时代的到来,给移动通讯市场带
国家信息中心副主任徐长明电动车和燃油车是竞争关系,而非替代关系21世纪经济报道记者宋豆豆报道新能源汽车将迎来快速的发展,不过目前电动车并未完全覆盖燃油车的基础特性,如果技术上没有特别大的革命突破,电动车无法对油车形成全面快速替代。相当长时间内
淘宝更新隐私政策鞭牛士4月2日消息,今日,淘宝发布淘宝网隐私政策更新公示通知,本次修订的内容主要包括优化第二章节(一)帮助您成为我们的会员及账户管理部分表述,更明确地披露了身份验证场景下的信息收集
淘宝更新MCN机构管理规范鞭牛士4月2日消息,淘宝拟调整MCN机构管理规范,于4月8日正式生效。具体来看,在准入要求新增机构为一般纳税人,因不符合业务考核要求被清退的,180天内不允许再准入。此外,MCN机
美国空军为什么要退役33架F22隐形战斗机?谢邀,的确是有这件事。戴维斯蒙森空军基地又要喜提旧飞机了。根据报道,美军计划淘汰33架F22战斗机,以腾出资金用于新的战机设计工作。五角大楼预计将把退役的战机送往亚利桑那州的戴维斯
马云妻子年轻时长这样,看上去气质满满,没有她就没有现在的阿里要说中国互联网大头企业,无一例外人们一定会先想到两马马云马化腾。一个创立了阿里巴巴,改变了中国的购物方式。一个创立了腾讯,改变了中国的社交方式。马云和马化腾都是互联网的大佬,两人创
2022年3月侵权举报受理公示为进一步落实企业主体责任,充分发挥用户举报对于网络侵权内容管理的重要补充作用,依据今日头条用户协议今日头条社区规范中涉及侵权内容的管理条款,今日头条受理用户侵权投诉举报,切实维护广