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连接池的更多相关文章

  1. Spring整合Redis,并配置Jedis连接池

    目录 只言片语 创建redis连接池的配置文件 单机版 spring整合redis(使用JedisPool) 项目中使用示例 集群版 spring整合redis(使用JedisCluster) 项目中 ...

  2. springboot使用redis的配置application.yml连接池以及存取

    第一步:添加pom文件依赖: <!-- redis --> <dependency> <groupId>redis.clients</groupId> ...

  3. redis-手写redis切片和非切片连接池并注入springboot中

    spring-data整合了redispool, 并提供redisTemplate使用, 但有时需要用到shradedJedisPool, 就需要手动注入了 手写redispool并注入springb ...

  4. Redis缓存 ava-Jedis操作Redis,基本操作以及 实现对象保存

    源代码下载: http://download.csdn.net/detail/jiangtao_st/7623113 1.Maven配置 <dependency> <groupId& ...

  5. 尚硅谷redis学习11-jedis操作redis

    前面学习了redis的知识后,下面学习一下如何在java中通过jedis操作redis. 所需jar包:commons-pool-xxxx.jar,jedis-xxx.jar 下面看一下常用操作: 1 ...

  6. Redis 以及 Python操作Redis

    Redis Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis有以下特点: -- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可 ...

  7. redis相关笔记(三.redis设计与实现(笔记))

    redis笔记一 redis笔记二 redis笔记三 1.数据结构 1.1.简单动态字符串: 其属性有int len:长度,int free:空闲长度,char[] bur:字符数组(内容) 获取字符 ...

  8. mongodb or操作与连接池

    mongodb # 类似于sql中的in或者or操作 mulites field query: db.cool.find({$or:[{field1:'val'},{'field2':'val'}-] ...

  9. 【redis】java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用

    java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用 //重新设置过期时间为30分钟,刷新时间 redisTemplate.expire(MsOp ...

随机推荐

  1. 四月总结&五月计划

    四月总结 1. 主要任务 <Effective C++>书 ① 进展: 看完了30讲(共55讲),从4月20号开始居家办公,书落在公司了,一直到昨天29号才去园区上班,耽搁了.30讲之前的 ...

  2. Java SPI 和 API,傻傻分不清?

    最近新写了一个中间件「运行时动态日志等级开关」,其中使用Java SPI机制实现了自定义配置中心,保证良好的扩展性. 项目地址,走过路过可以点个star :)https://github.com/sa ...

  3. SpringBoot如何优雅关闭(SpringBoot2.3&Spring Boot2.2)

    SpringBoot如何优雅关闭(SpringBoot2.3&Spring Boot2.2) 优雅停止&暴力停止 暴力停止:像日常开发过程中,测试区或者本地开发时,我们并不会考虑项目关 ...

  4. zipper题解

    -请奆佬们洁身自好,好好打代码从我做起 - 题目大意: 给三个字符串,判断C字符串是否由A B字符串顺序组成, 题意分析: 很容易想到的是,A的长度加上B的长度为C的长度 其实进一步想,这 提供了一个 ...

  5. 手脱无名壳tslgame_rl

    1.使用Detect It Easy查壳,该壳未显示出壳信息,至于为何有壳,我们使用IDA打开,查看其的导入表,其中没有太多函数使用: 2.我们使用x32dbg打开,运行至入口点,此处没有pushad ...

  6. KMP算法学习以及小结(好马不吃回头草系列)

    首先请允许我对KMP算法的三位创始人Knuth,Morris,Pratt致敬,这三位优秀的算法科学家发明的这种匹配模式可以大大避免重复遍历的情况,从而使得字符串的匹配的速度更快,效率更高. 首先引入对 ...

  7. 爬取百度页面代码写入到文件+web请求过程解析

    一.爬取百度页面代码写入到文件 代码示例: from urllib.request import urlopen #导入urlopen包 url="http://www.baidu.com& ...

  8. 2020.10.17【普及组】模拟赛C组 总结

    总结 这次比赛 120 分,老师说上 200 是不容易的,但我觉得这不是我真的水平 改题情况 T1 题目大意:有 N 个小朋友,每个小朋友有 \(B_i\) 个朋友,问从中随机选 3 人使得 3 人关 ...

  9. 打字练习-编程语言关键字系列-java

    小编整理的java关键字,内容如下:abstract, assert, boolean, break, byte, case, catch, char, class, const, continue, ...

  10. (1)《QT+OpenGL学习之我见》初始化窗口及三个重要函数 vs+Qt

    本章前言:本章讲如何利用VS和QT来创建一个基本的QOpenGLWidget窗口和有关联的三个核心函数,因为版本更新可能会有大同小异,但基本的不会有变换,有了QT的帮助,我们不需要下载opengL.g ...