Redis相关练习操作,redis连接池
package com.shujia.controller;
import com.shujia.entity.MyTypedTuple;
import com.shujia.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.time.Duration;
import java.util.*;
/*
StringRedisTemplate:操作的是 string Value 也是string 的数据;
Redis 中的 value的类型是:string,list,set,zset,hash
RedisTemplate:key -- Object value --Object
key valule
原本 string string
name ---->namexxx
现在读的时候,会将键进行序列化,讲序列化后的值再取值redis 去找这个键,由于原本的name的值是字符串没有进行序列化,所以找不到,
redisTemplate 默认是做JdkSerializationRedisSerializer
如果查找的是一个字符串,将序列化方式变成自负床方式序列化;
*/
@RestController
public class TestController {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
protected RedisTemplate<Object, Object> redisTemplate;
@RequestMapping("testKey")
public String testKey() {
// Boolean name = stringRedisTemplate.delete("name");
// System.out.println(name);
Set keys = stringRedisTemplate.keys("*");
System.out.println(keys);
Boolean address = stringRedisTemplate.hasKey("address");
System.out.println(address);
DataType age = stringRedisTemplate.type("age");
System.out.println(age);
return "测试完毕" + keys;
}
@RequestMapping("testString")
public String testString() {
stringRedisTemplate.opsForValue().set("name2", "xiaoxiao");
stringRedisTemplate.opsForValue().set("name3", "xiaoma", Duration.ofSeconds(10l));
String name = stringRedisTemplate.opsForValue().get("name");
System.out.println(name);
Integer name1 = stringRedisTemplate.opsForValue().append("name", "---chinese");
System.out.println(name1);
ArrayList<String> strings = new ArrayList<>();
strings.add("name");
strings.add("age");
strings.add("address");
strings.add("like");
strings.add("sex");
for (String string : strings) {
System.out.println(string);
}
List<String> list = stringRedisTemplate.opsForValue().multiGet(strings);
System.out.println(list);
return "测试String完毕!!!" + name + "\t" + name1 + "\t" + "\t" + strings + "第二个" + "\t" + list;
}
@RequestMapping("testList")
public String testList() {
stringRedisTemplate.opsForList().leftPush("list", "aaa");
stringRedisTemplate.opsForList().leftPush("list", "bbb");
List<String> list = stringRedisTemplate.opsForList().range("list", 0, -1);
stringRedisTemplate.opsForList().trim("list", 0, 2);
System.out.println(list);
return "测试完毕testList!!!" + list;
}
@RequestMapping("testZset")
public String testZet() {
//一次添加一个
stringRedisTemplate.opsForZSet().add("zset1", "xiaoming", 100);
//一次性添加多个元素
HashSet<ZSetOperations.TypedTuple<String>> set = new HashSet<>();
MyTypedTuple xiaoming = new MyTypedTuple("xiaoming", 80.0);
MyTypedTuple xiaohu = new MyTypedTuple("xiaohu", 50.0);
MyTypedTuple xiaoma = new MyTypedTuple("xiaoma", 10.0);
set.add(xiaoming);
set.add(xiaohu);
set.add(xiaoma);
stringRedisTemplate.opsForZSet().add("set", set);
Set<String> zset = stringRedisTemplate.opsForZSet().rangeByScore("set", 10, 100);
System.out.println("set" + zset);
Set<ZSetOperations.TypedTuple<String>> set1 = stringRedisTemplate.opsForZSet().rangeByScoreWithScores("set", 10, 100);
System.out.println("set1" + set1);
Set<String> set2 = stringRedisTemplate.opsForZSet().reverseRange("set", 0, 100);
System.out.println("set2" + set2);
//查询并查看分数;
Set<String> set3 = stringRedisTemplate.opsForZSet().reverseRangeByScore("set", 0, -1);
System.out.println("set3" + set3);
System.out.println("-----------------------");
//根据分数降序查看,并且打印出来;
Set<ZSetOperations.TypedTuple<String>> set4 = stringRedisTemplate.opsForZSet().reverseRangeByScoreWithScores("set", 0, 100);
System.out.println("set4" + set4);
for (ZSetOperations.TypedTuple<String> stringTypedTuple : set4) {
String value = stringTypedTuple.getValue();
Double score = stringTypedTuple.getScore();
System.out.println(value + "--" + score);
}
return "测试完毕!!!";
}
@RequestMapping("testHash")
public String testHashash() {
//一次添加一个数据
stringRedisTemplate.opsForHash().put("1001", "name", "xiaoming");
//一次添加多个数据
HashMap<Object, Object> map = new HashMap<>();
map.put("name ", "xiaoma");
map.put("age ", "18");
map.put("like ", "bannal");
map.put("address ", "hefei");
map.put("爱好 ", "看书写字");
//将对应的取值对应的小key 组成一个Collection集合
ArrayList<Object> arrayList = new ArrayList<>();
arrayList.add("name");
arrayList.add("age");
arrayList.add("like");
arrayList.add("address");
arrayList.add("爱好");
stringRedisTemplate.opsForHash().putAll("1002", map);
List<Object> list = stringRedisTemplate.opsForHash().multiGet("1002", arrayList);
System.out.println(list);
return "测试完毕!!!";
}
@RequestMapping("testObject")
public String testObject() {
//构建redis 资源连接池配置
JedisPoolConfig poolConfig = new JedisPoolConfig();
//给定个数
poolConfig.setMaxTotal(100);
//根据配置来创建redis连接
JedisPool jedisPool = new JedisPool(poolConfig, "192.168.170.110", 7000);
//在连接池中构建连接redis
Jedis jedis = jedisPool.getResource();
//拿着这个连接操作redis
String name1 = jedis.get("name");
System.out.println(name1);
//释放资源
jedis.close();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.opsForValue().set("name", "xiaowang");
Object name = redisTemplate.opsForValue().get("name");
System.out.println(name);
RedisSerializer<?> keySerializer = redisTemplate.getKeySerializer();
System.out.println(keySerializer);
//存储一个对象到redis
User user = new User("1001", "xiangyu", 18);
redisTemplate.opsForValue().set("user1", "user");
//针对hash小key进行序列化
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.opsForHash().put("user2", "name", user);
return "测试完毕!!!" + name;
}
}
Redis相关练习操作,redis连接池的更多相关文章
- Spring整合Redis,并配置Jedis连接池
目录 只言片语 创建redis连接池的配置文件 单机版 spring整合redis(使用JedisPool) 项目中使用示例 集群版 spring整合redis(使用JedisCluster) 项目中 ...
- springboot使用redis的配置application.yml连接池以及存取
第一步:添加pom文件依赖: <!-- redis --> <dependency> <groupId>redis.clients</groupId> ...
- redis-手写redis切片和非切片连接池并注入springboot中
spring-data整合了redispool, 并提供redisTemplate使用, 但有时需要用到shradedJedisPool, 就需要手动注入了 手写redispool并注入springb ...
- Redis缓存 ava-Jedis操作Redis,基本操作以及 实现对象保存
源代码下载: http://download.csdn.net/detail/jiangtao_st/7623113 1.Maven配置 <dependency> <groupId& ...
- 尚硅谷redis学习11-jedis操作redis
前面学习了redis的知识后,下面学习一下如何在java中通过jedis操作redis. 所需jar包:commons-pool-xxxx.jar,jedis-xxx.jar 下面看一下常用操作: 1 ...
- Redis 以及 Python操作Redis
Redis Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis有以下特点: -- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可 ...
- redis相关笔记(三.redis设计与实现(笔记))
redis笔记一 redis笔记二 redis笔记三 1.数据结构 1.1.简单动态字符串: 其属性有int len:长度,int free:空闲长度,char[] bur:字符数组(内容) 获取字符 ...
- mongodb or操作与连接池
mongodb # 类似于sql中的in或者or操作 mulites field query: db.cool.find({$or:[{field1:'val'},{'field2':'val'}-] ...
- 【redis】java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用
java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用 //重新设置过期时间为30分钟,刷新时间 redisTemplate.expire(MsOp ...
随机推荐
- 用NetworkX生成并绘制(带权)无向图
NetworkX是一个非常强大的网络科学工具,它封装了图的数据结构和许多经典图算法,也内置了许多可视化函数可供调用. 1. 随机图生成 最经典的随机图当属我们在上一篇博客<Erdos-Renyi ...
- uni-app 中实现 onLaunch 异步回调后执行 onLoad 最佳实践
前言 好久没写博客了,由于公司业务需要,最近接触uiapp比较多,一直想着输出一些相关的文章.正好最近时间富余,有机会来一波输出了. 问题描述 在使用 uni-app 开发项目时,会遇到需要在 onL ...
- 值得注意的: c++动态库、静态库、弱符号__attribute__((weak))以及extern之间的关系
先说结论: ①:动态库优先级最差,如果同时有静态库和动态库,那么首先使用的是静态库函数. ②:如果只有两个或多个动态库,那么首先使用的是最开始链接的动态库函数: ③:弱符号函数在动态库中是起任何作用的 ...
- 爬取豆瓣TOP250电影
自己跟着视频学习的第一个爬虫小程序,里面有许多不太清楚的地方,不如怎么找到具体的电影名字的,那么多级关系,怎么以下就找到的是那个div呢? 诸如此类的,有许多,不过先做起来再说吧,后续再取去弄懂. i ...
- fpm工具安装
概述 最近在对机房的编译环境做整理,过程曲折而痛苦,记录一下. 之前的一个老项目,在打包的时候用到了一个叫做fpm的工具. 编译环境涉及centos6和centos7,在新的编译环境的过程中,如何安装 ...
- rpc的正确打开方式|读懂Go原生net/rpc包
前言 最近在阅读字节跳动开源RPC框架Kitex的源码,分析了如何借助命令行,由一个IDL文件,生成client和server的脚手架代码,也分析了Kitex的日志组件klog.当然Kitex还有许多 ...
- NODE.JS exports require理解
node.js exports 的作用是什么? 因为A.js文件想访问B.js文件中的类或函数,是不能直接访问的.为了解决这个问题 node.js 产生了 exports ,exports 实际可以理 ...
- 华为云Stack首席架构师:打造“称手”的数字化工具,答好政企IT数字化转型这道必选题
摘要:数字化转型是一号位工程,数字化的工具本身就是企业的核心竞争力. 本文分享自华为云社区<华为云Stack首席架构师:打造"称手"的数字化工具,答好政企IT数字化转型这道必 ...
- .NET中的迭代器(Iterator)
更新记录 本文迁移自Panda666原博客,原发布时间:2021年6月30日. 一.迭代器介绍 C#2.0开始,我们可以使用迭代器(iterator).编译器自动把我们定义的迭代器生成 可枚举类型 或 ...
- 解决maven依赖冲突,这篇就够了!
一.前言 什么是依赖冲突 依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成了包版本冲突. 依赖冲突的原因 我们在maven项目的pom中 一般会引用许许多多的dependency.例如 ...