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

新动力网站建设成都动力无限 网站 差

新动力网站建设,成都动力无限 网站 差,现在去北京安全吗,挂号网站建设目录 讲解一#xff1a;简介 讲解二#xff1a;Jedis Github 一、创建项目、 二、添加依赖 三、配置文件 四、Java连接Redis 五、通过Redis连接池获取连接对象并操作服务器 六、封装JedisUtil对外提供连接对象获取方法 七、Java操作Redis五种数据类型 1. 连接与释放…目录 讲解一简介 讲解二Jedis Github 一、创建项目、 二、添加依赖 三、配置文件 四、Java连接Redis 五、通过Redis连接池获取连接对象并操作服务器 六、封装JedisUtil对外提供连接对象获取方法 七、Java操作Redis五种数据类型 1. 连接与释放 2. Jedis操作string数据类型 3. Jedis操作hash类型 4. Jedis操作list类型 5. Jedis操作set类型 6. Jedis操作sortedset数据类型 八、层级目录失效时间 九、获取所有key事务删除 十、Jedis操作byte数组 讲解三SpringDataRedis 一、简介 二、创建项目 三、添加依赖 四、添加application.yml配置文件 五、Lettuce和Jedis的区别 六、测试环境测试环境是否搭建成功 七、SpringDataRedis序列化模板 1. 序列化问题 2. 序列化解决方案 3. 自定义序列化 4. StringRedisTemplate 八、SpringData操作Redis 1. 操作string数据类型 2. 操作hash数据类型 3. 操作list数据类型 4. 操作set数据类型 5. 操作sortedset数据类型 6. 获取所有key设置key失效时间 获取所有key删除 设置key的失效时间 7. 通用操作 九、SpringDataRedis整合哨兵 application.yml Bean注解配置 十、知识小结 讲解一简介 在Redis官网中提供了各种语言的客户端 官网地址Connect with Redis clients | Docs 操作Redis 的 Java 客户端很多官方推荐的有三种 JedisLettuceRedisson 标记为的就是推荐使用的java客户端包括 Jedis和Lettuce这两个主要是提供了Redis命令对应的API方便我们操作Redis而Spring 对 Redis 客户 端进行了整合提供了 Spring Data Redis在Spring Boot项目中还提供了对应的Starter即 spring- boot-starter-data-redis。 Redisson是在Redis基础上实现了分布式的可伸缩的java数据结构例如Map、Queue等而且支持跨 进程的同步机制Lock、Semaphore等待比较适合用来实现特殊的功能需求。 讲解二Jedis Github Jedis 是 Redis 的 Java 版本的客户端实现。 Jedis的官网地址 https://github.com/redis/jedis 一、创建项目、 自己创建一个Maven项目 二、添加依赖 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.2.4.RELEASE/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.xxxx/groupIdartifactIdredis-demo/artifactIdversion0.0.1-SNAPSHOT/versionnameredis-demo/namedescriptionDemo project for Spring Boot/descriptionpropertiesjava.version1.8/java.version/propertiesdependencies!--redis依赖--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId!--1.x 的版本默认采用的连接池技术是 Jedis2.0 以上版本默认连接池是 Lettuce,如果采用 Jedis需要排除 Lettuce 的依赖。--exclusionsexclusiongroupIdio.lettuce/groupIdartifactIdlettuce-core/artifactId/exclusion/exclusions/dependency!-- jedis 依赖 --dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactId/dependency!--web组件--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!--test 组件--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependencies/project三、配置文件 spring:redis:# Redis服务器地址host: 192.168.10.100# Redis服务器端口port: 6379# Redis服务器密码password: root# 选择哪个库默认0库database: 0# 连接超时时间timeout: 10000msjedis:pool:# 最大连接数默认8max-active: 1024# 最大连接阻塞等待时间单位毫秒默认-1msmax-wait: 10000ms# 最大空闲连接默认8max-idle: 200# 最小空闲连接默认0min-idle: 5 四、Java连接Redis /*** 连接Redis*/ Test public void initConn01() {// 创建jedis对象连接redis服务Jedis jedis new Jedis(192.168.10.100, 6379);// 设置认证密码jedis.auth(root);// 指定数据库 默认是0jedis.select(1);// 使用ping命令测试连接是否成功String result jedis.ping();System.out.println(result);// 返回PONG// 添加一条数据jedis.set(username, zhangsan);// 获取一条数据String username jedis.get(username);System.out.println(username);// 释放资源if (jedis ! null)jedis.close(); } Jedis本身是线程不安全的并且频繁的创建和销毁连接会有性能损耗 因此我们推荐大家使用Jedis连接池代替Jedis的直连方式 package com.project.jedis.util;import redis.clients.jedis.*;public class JedisConnectionFactory {private static JedisPool jedisPool;static {// 配置连接池JedisPoolConfig poolConfig new JedisPoolConfig();poolConfig.setMaxTotal(8);poolConfig.setMaxIdle(8);poolConfig.setMinIdle(0);poolConfig.setMaxWaitMillis(1000);// 创建连接池对象参数连接池配置、服务端ip、服务端端口、超时时间、密码jedisPool new JedisPool(poolConfig, 192.168.150.101, 6379, 1000, 123321);}public static Jedis getJedis(){return jedisPool.getResource();} } 五、通过Redis连接池获取连接对象并操作服务器 /*** 通过Redis连接池获取连接对象*/ Test public void initConn02() {// 初始化redis客户端连接池JedisPool jedisPool new JedisPool(new JedisPoolConfig(), 192.168.10.100, 6379, 10000, root);// 从连接池获取连接Jedis jedis jedisPool.getResource();// 指定数据库 默认是0jedis.select(2);// 使用ping命令测试连接是否成功String result jedis.ping();System.out.println(result);// 返回PONG// 添加一条数据jedis.set(username, zhangsan);// 获取一条数据String username jedis.get(username);System.out.println(username);// 释放资源if (jedis ! null)jedis.close(); } 六、封装JedisUtil对外提供连接对象获取方法 Configuration public class RedisConfig {//服务器地址Value(${spring.redis.host})private String host;//端口Value(${spring.redis.port})private int port;//密码Value(${spring.redis.password})private String password;//超时时间Value(${spring.redis.timeout})private String timeout;//最大连接数Value(${spring.redis.jedis.pool.max-active})private int maxTotal;//最大连接阻塞等待时间Value(${spring.redis.jedis.pool.max-wait})private String maxWaitMillis;//最大空闲连接Value(${spring.redis.jedis.pool.max-idle})private int maxIdle;//最小空闲连接Value(${spring.redis.jedis.pool.min-idle})private int minIdle;Beanpublic JedisPool redisPoolFactory(){JedisPoolConfig jedisPoolConfig new JedisPoolConfig();//注意值的转变jedisPoolConfig.setMaxWaitMillis(Long.parseLong(maxWaitMillis.substring(0,maxWaitMillis.length()-2)));//注意属性名jedisPoolConfig.setMaxTotal(maxTotal);jedisPoolConfig.setMaxIdle(maxIdle);jedisPoolConfig.setMinIdle(minIdle);JedisPool jedisPool new JedisPool(jedisPoolConfig, host, port, Integer.parseInt(timeout.substring(0,timeout.length() - 2)), password);return jedisPool;} } 七、Java操作Redis五种数据类型 1. 连接与释放 Autowired private JedisPool jedisPool;private Jedis jedis null;//初始化jedis对象实例 Before public void initConn(){jedis jedisPool.getResource(); }//释放资源 After public void closeConn(){if (jedis!null){jedis.close();} } 2. Jedis操作string数据类型 // 1.操作String Test public void testString() {// 添加一条数据jedis.set(username, zhangsan);jedis.set(age, 18);// 添加多条数据 参数奇数为key 参数偶数为valuejedis.mset(address, bj, sex, 1);// 获取一条数据String username jedis.get(username);System.out.println(username);// 获取多条数据ListString list jedis.mget(username, age, address, sex);for (String str : list) {System.out.println(str);}// 删除//jedis.del(username);} 3. Jedis操作hash类型 // 2.操作Hash Test public void testHash() {/** 添加一条数据* 参数一redis的key* 参数二hash的key* 参数三hash的value*/jedis.hset(userInfo, name, lisi);// 添加多条数据MapString, String map new HashMap();map.put(age, 20);map.put(sex, 1);jedis.hmset(userInfo, map);// 获取一条数据String name jedis.hget(userInfo, name);System.out.println(name);// 获取多条数据ListString list jedis.hmget(userInfo, age, sex);for (String str : list) {System.out.println(str);}// 获取Hash类型所有的数据MapString, String userMap jedis.hgetAll(userInfo);for (EntryString, String userInfo : userMap.entrySet()) {System.out.println(userInfo.getKey() -- userInfo.getValue());}// 删除 用于删除hash类型数据//jedis.hdel(userInfo, name); } 4. Jedis操作list类型 // 3.操作listTestpublic void testList() {// 左添加(上)// jedis.lpush(students, Wang Wu, Li Si);// 右添加(下)//jedis.rpush(students, Zhao Liu);// 获取start起始下标 end结束下标 包含关系ListString students jedis.lrange(students, 0, 2);for (String stu : students) {System.out.println(stu);}// 获取总条数Long total jedis.llen(students);System.out.println(总条数 total);// 删除单条 删除列表中第一次出现的Li Si// jedis.lrem(students, 1, Li Si);// 删除多条// jedis.del(students);} 5. Jedis操作set类型 /*** 操作set*/ Test public void testSet(){//添加数据jedis.sadd(letters,aaa,bbb,ccc,ddd,eee);//获取数据SetString set jedis.smembers(letters);set.forEach(System.out::println);//获取总条数Long total jedis.scard(letters);System.out.println(total);//删除数据jedis.srem(letters,aaa,bbb); } 6. Jedis操作sortedset数据类型 /*** 操作sorted set*/ Test public void testSortedSet(){//添加数据MapString,Double map new HashMap();map.put(zhangsan,7D);map.put(lisi,3D);map.put(wangwu,5D);map.put(zhaoliu,6D);map.put(tianqi,1D);jedis.zadd(score,map);/*** 获取数据* 第一个参数redis的key* 第二个参数起始下标* 第三个参数结束下标*/SetString set jedis.zrange(score, 0, 4);set.forEach(System.out::println);//获取总条数Long total jedis.zcard(score);System.out.println(total);//删除数据jedis.zrem(score,zhangsan,wangwu); } 八、层级目录失效时间 Redis中以层级关系、目录形式存储数据 /*** 层级目录形式存储数据*/Testpublic void testDir(){jedis.set(cart:user01:item01,apple);System.out.println(jedis.get(cart:user01:item01));} 设置key的失效时间 Redis 有四个不同的命令可以用于设置键的生存时间(键可以存在多久)或过期时间(键什么时候会被删除) : EXPlRE 用于将键 key 的生存时间设置为 ttl 秒。 PEXPIRE 用于将键 key 的生存时间设置为 ttl 毫秒。 EXPIREAT timestamp用于将键 key 的过期时间设置为 timestamp 所指定的秒数时间戳。 PEXPIREAT timestamp 用于将键 key 的过期时间设置为 timestamp 所指定的毫秒数时间戳。 TTL获取的值为-1说明此 key 没有设置有效期当值为-2时证明过了有效期。 /*** key的失效时间*/Testpublic void testExpire(){//给已经存在key设置失效时间// jedis.set(code,test);//设置失效时间单位秒// jedis.expire(code,30);//设置失效时间单位毫秒// jedis.pexpire(code,30000);//查看失效时间单位秒。-1为不失效-2为已失效// Long ttl jedis.ttl(code);// System.out.println(ttl);//添加key的时候设置失效时间//设置失效时间单位秒// jedis.setex(code,30,test);//设置失效时间单位毫秒// jedis.psetex(code,30000,test);//查看失效时间单位毫秒// Long pttl jedis.pttl(code);// System.out.println(pttl);//nx,xx的用法SetParams setParams new SetParams();//不存在的时候才能设置成功// setParams.nx();// 存在的时候才能设置成功setParams.xx();//设置失效时间单位秒// setParams.ex(30);//查看失效时间单位毫秒setParams.px(30000);jedis.set(code,test,setParams);}九、获取所有key事务删除 /*** 查询所有key*/Testpublic void testAllKey(){//当前数据库key的数量Long size jedis.dbSize();System.out.println(size);//查询当前数据库的所有keySetString set jedis.keys(*);set.forEach(System.out::println);}/*** 事务*/Testpublic void testMulti(){//开启事务Transaction tx jedis.multi();tx.set(tel,10086);//提交事务tx.exec();//回滚事务// tx.discard();} 十、Jedis操作byte数组 操作byte SerializeUtil.java package com.xxxx.redisdemo.util;import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream;/*** 序列化工具类*/ public class SerializeUtil {/*** 将java对象转换为byte数组 序列化过程*/public static byte[] serialize(Object object) {ObjectOutputStream oos null;ByteArrayOutputStream baos null;try {// 序列化baos new ByteArrayOutputStream();oos new ObjectOutputStream(baos);oos.writeObject(object);byte[] bytes baos.toByteArray();return bytes;} catch (Exception e) {e.printStackTrace();}return null;}/*** 将byte数组转换为java对象 反序列化*/public static Object unserialize(byte[] bytes) {if(bytes null)return null;ByteArrayInputStream bais null;try {// 反序列化bais new ByteArrayInputStream(bytes);ObjectInputStream ois new ObjectInputStream(bais);return ois.readObject();} catch (Exception e) {e.printStackTrace();}return null;} } User.java package com.xxxx.redisdemo.pojo;import java.io.Serializable;public class User implements Serializable {private static final long serialVersionUID 9148937431079191022L;private Integer id;private String username;private String password;public Integer getId() {return id;}public void setId(Integer id) {this.id id;}public String getUsername() {return username;}public void setUsername(String username) {this.username username;}public String getPassword() {return password;}public void setPassword(String password) {this.password password;}Overridepublic String toString() {return User{ id id , username username \ , password password \ };} } JedisTest.java /*** 操作byte数组*/Testpublic void testByte(){User user new User();user.setId(2);user.setUsername(zhangsan);user.setPassword(123456);//序列化为byte数组byte[] userKey SerializeUtil.serialize(user: user.getId());byte[] userValue SerializeUtil.serialize(user);//存入redisjedis.set(userKey,userValue);//取出数据byte[] bytes jedis.get(userKey);//反序列化User user1 (User) SerializeUtil.unserialize(bytes);System.out.println(user1);} 讲解三SpringDataRedis 一、简介 Spring Data Redis是 Spring 的一部分提供了在 Spring 应用中通过简单的配置就可以访问 Redis 服务 对 Redis 底层开发包进行了高度封装。在 Spring 项目中可以使用Spring Data Redis来简化 Redis 操作。 官网地址Spring Data Redis maven坐标 dependencygroupIdorg.springframework.data/groupIdartifactIdspring-data-redis/artifactIdversion2.4.8/version/dependencySpringBoot已经提供了对SpringDataRedis的支持使用非常简单。 Spring Boot提供了对应的Startermaven坐标 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependencySpring Data Redis中提供了一个高度封装的类RedisTemplate 针对 Jedis 客户端中大量api进行了归类封装,将同一类型操作封装为operation接口具体分类如下 ValueOperations简单K-V操作SetOperationsset类型数据操作ZSetOperationszset类型数据操作HashOperations针对hash类型的数据操作ListOperations针对list类型的数据操作 二、创建项目 自行创建一个 SpringBoot 项目 三、添加依赖 dependencies!--spring-data-redis依赖--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency!-- commons-pool2 对象池依赖 --dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-pool2/artifactId/dependency!--web组件--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!--test组件--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scopeexclusionsexclusiongroupIdorg.junit.vintage/groupIdartifactIdjunit-vintage-engine/artifactId/exclusion/exclusions/dependency/dependencies 四、添加application.yml配置文件 spring:redis: #redis配置# Redis服务器地址host: 192.168.136.160# Redis服务器端口port: 6379# Redis服务器密码password: root# Redis服务器0号数据库database: 0# 连接超时时间timeout: 10000mslettuce:pool:# 最大连接数默认8max-active: 1024# 最大连接阻塞等待时间单位毫秒默认-1msmax-wait: 10000ms# 最大空闲连接默认8max-idle: 200# 最小空闲连接默认0min-idle: 5 五、Lettuce和Jedis的区别 Jedis 是一个优秀的基于 Java 语言的 Redis 客户端但是其不足也很明显 Jedis 在实现上是直接连接 RedisServer在多个线程间共享一个 Jedis 实例时是线程不安全的 如果想要在多线程场景下使用 Jedis 需要使用连接池每个线程都使用自己的 Jedis 实例 当连接数量增多时会消耗较多的物理资源。 Lettuce 则完全克服了其线程不安全的缺点 Lettuce 是基于 Netty 的连接StatefulRedisConnection Lettuce 是一个可伸缩的线程安全的 Redis 客户端支持同步、异步和响应式模式。 多个线程可以共享一个连接 实例而不必担心多线程并发问题。 它基于优秀 Netty NIO 框架构建支持 Redis 的高级功能如 Sentinel集 群流水线自动重新连接和 Redis 数据模型。 六、测试环境测试环境是否搭建成功 RunWith(SpringRunner.class) SpringBootTest(classes SpringDataRedisApplication.class) public class SpringDataRedisApplicationTests {Autowiredprivate RedisTemplate redisTemplate;Autowiredprivate StringRedisTemplate stringRedisTemplate;Testpublic void initconn() {ValueOperationsString, String ops stringRedisTemplate.opsForValue();ops.set(username,lisi);ValueOperationsString, String value redisTemplate.opsForValue();value.set(name,wangwu);System.out.println(ops.get(name));} } 七、SpringDataRedis序列化模板 1. 序列化问题 默认情况下的模板 RedisTemplate 默认序列化使用的是JdkSerializationRedisSerializer存储二进制字节码。 这时需要自定义模板当自定义模板后又想存储 String 字符串时可以使StringRedisTemplate的方式他们俩 并不冲突。 要把 domain object 做为 key-value 对保存在 redis 中就必须要解决对象的序列化问题。 Spring Data Redis给我们 提供了一些现成的方案 2. 序列化解决方案 1. JdkSerializationRedisSerializer使用JDK提供的序列化功能。 优点是反序列化时不需要提供类型信息(class) 但缺点是序列化后的结果非常庞大是JSON格式的5倍左右这样就会消耗 Redis 服务器的大量内存。 2. Jackson2JsonRedisSerializer 使用 Jackson 库将对象序列化为JSON字符串 优点是速度快序列化后的字符串短小精悍。 缺点也非常致命那就是此类的构造函数中有一个类型参数必须提供要序列化对象的类型信息(.class对象)。 通过查看源代码发现其只在反序列化过程中用到了类型信息。 3. GenericJackson2JsonRedisSerializer通用型序列化这种序列化方式不用自己手动指定对象的 Class Configuration public class RedisConfig {Beanpublic RedisTemplateString,Object redisTemplate(LettuceConnectionFactory redisConnectionFactory){RedisTemplateString,Object redisTemplate new RedisTemplate();//为string类型key设置序列器redisTemplate.setKeySerializer(new StringRedisSerializer());//为string类型value设置序列器redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());//为hash类型key设置序列器redisTemplate.setHashKeySerializer(new StringRedisSerializer());//为hash类型value设置序列器redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());redisTemplate.setConnectionFactory(redisConnectionFactory);return redisTemplate;} } //序列化 Test public void testSerial(){User user new User();user.setId(1);user.setUsername(张三);user.setPassword(111);ValueOperationsString, Object value redisTemplate.opsForValue();value.set(userInfo,user);System.out.println(value.get(userInfo)); } 3. 自定义序列化 RedisTemplate可以接收任意Object作为值写入Redis 只不过写入前会把Object序列化为字节形式默认是采用JDK序列化得到的结果是这样的 缺点 可读性差内存占用较大 我们可以自定义RedisTemplate的序列化方式代码如下 Configuration public class RedisConfig {Beanpublic RedisTemplateString, Object redisTemplate(RedisConnectionFactory connectionFactory){// 创建RedisTemplate对象RedisTemplateString, Object template new RedisTemplate();// 设置连接工厂template.setConnectionFactory(connectionFactory);// 创建JSON序列化工具GenericJackson2JsonRedisSerializer jsonRedisSerializer new GenericJackson2JsonRedisSerializer();// 设置Key的序列化template.setKeySerializer(RedisSerializer.string());template.setHashKeySerializer(RedisSerializer.string());// 设置Value的序列化template.setValueSerializer(jsonRedisSerializer);template.setHashValueSerializer(jsonRedisSerializer);// 返回return template;} } 这里采用了JSON序列化来代替默认的JDK序列化方式。最终结果如图 整体可读性有了很大提升并且能将Java对象自动的序列化为JSON字符串 并且查询时能自动把JSON反序列化为Java对象。 不过其中记录了序列化时对应的class名称目的是为了查询时实现自动反序列化。 这会带来额外的内存开销。 4. StringRedisTemplate 为了节省内存空间我们可以不使用JSON序列化器来处理value而是统一使用String序列化器要求只能存储 String类型的key和value。当需要存储Java对象时手动完成对象的序列化和反序列化。 因为存入和读取时的序列化及反序列化都是我们自己实现的SpringDataRedis就不会将class信息写入Redis了。 这种用法比较普遍因此SpringDataRedis就提供了RedisTemplate的子类StringRedisTemplate 它的key和value的序列化方式默认就是String方式。 省去了我们自定义RedisTemplate的序列化方式的步骤而是直接使用 Autowired private StringRedisTemplate stringRedisTemplate; // JSON序列化工具 private static final ObjectMapper mapper new ObjectMapper();Test void testSaveUser() throws JsonProcessingException {// 创建对象User user new User(虎哥, 21);// 手动序列化String json mapper.writeValueAsString(user);// 写入数据stringRedisTemplate.opsForValue().set(user:200, json);// 获取数据String jsonUser stringRedisTemplate.opsForValue().get(user:200);// 手动反序列化User user1 mapper.readValue(jsonUser, User.class);System.out.println(user1 user1); }八、SpringData操作Redis 1. 操作string数据类型 // 1.操作String Test public void testString() {ValueOperationsString, Object valueOperations redisTemplate.opsForValue();// 添加一条数据valueOperations.set(username, zhangsan);valueOperations.set(age, 18);//redis中以层级关系、目录形式存储数据valueOperations.set(user:01, lisi);valueOperations.set(user:02, wangwu);// 添加多条数据MapString, String userMap new HashMap();userMap.put(address, bj);userMap.put(sex, 1);valueOperations.multiSet(userMap);// 获取一条数据Object username valueOperations.get(username);System.out.println(username);// 获取多条数据ListString keys new ArrayList();keys.add(username);keys.add(age);keys.add(address);keys.add(sex);ListObject resultList valueOperations.multiGet(keys);for (Object str : resultList) {System.out.println(str);}// 删除redisTemplate.delete(username); } 2. 操作hash数据类型 // 2.操作Hash Test public void testHash() {HashOperationsString, String, String hashOperations redisTemplate.opsForHash();/** 添加一条数据* 参数一redis的key* 参数二hash的key* 参数三hash的value*/hashOperations.put(userInfo,name,lisi);// 添加多条数据MapString, String map new HashMap();map.put(age, 20);map.put(sex, 1);hashOperations.putAll(userInfo, map);// 获取一条数据String name hashOperations.get(userInfo, name);System.out.println(name);// 获取多条数据ListString keys new ArrayList();keys.add(age);keys.add(sex);ListString resultlist hashOperations.multiGet(userInfo, keys);for (String str : resultlist) {System.out.println(str);}// 获取Hash类型所有的数据MapString, String userMap hashOperations.entries(userInfo);for (EntryString, String userInfo : userMap.entrySet()) {System.out.println(userInfo.getKey() -- userInfo.getValue());}// 删除 用于删除hash类型数据hashOperations.delete(userInfo, name); } 3. 操作list数据类型 // 3.操作list Test public void testList() {ListOperationsString, Object listOperations redisTemplate.opsForList();// 左添加(上)// listOperations.leftPush(students, Wang Wu);// listOperations.leftPush(students, Li Si);// 左添加(上) 把value值放到key对应列表中pivot值的左面如果pivot值存在的话// listOperations.leftPush(students, Wang Wu, Li Si);// 右添加(下)// listOperations.rightPush(students, Zhao Liu);// 获取 start起始下标 end结束下标 包含关系ListObject students listOperations.range(students, 0,2);for (Object stu : students) {System.out.println(stu);}// 根据下标获取Object stu listOperations.index(students, 1);System.out.println(stu);// 获取总条数Long total listOperations.size(students);System.out.println(总条数 total);// 删除单条 删除列表中存储的列表中几个出现的Li Si。listOperations.remove(students, 1, Li Si);// 删除多条redisTemplate.delete(students); } 4. 操作set数据类型 // 4.操作set-无序 Test public void testSet() {SetOperationsString, Object setOperations redisTemplate.opsForSet();// 添加数据String[] letters new String[]{aaa, bbb, ccc, ddd, eee};//setOperations.add(letters, aaa, bbb, ccc, ddd, eee);setOperations.add(letters, letters);// 获取数据SetObject let setOperations.members(letters);for (Object letter: let) {System.out.println(letter);}// 删除setOperations.remove(letters, aaa, bbb); } 5. 操作sortedset数据类型 // 5.操作sorted set-有序 Test public void testSortedSet() {ZSetOperationsString, Object zSetOperations redisTemplate.opsForZSet();ZSetOperations.TypedTupleObject objectTypedTuple1 new DefaultTypedTupleObject(zhangsan, 7D);ZSetOperations.TypedTupleObject objectTypedTuple2 new DefaultTypedTupleObject(lisi, 3D);ZSetOperations.TypedTupleObject objectTypedTuple3 new DefaultTypedTupleObject(wangwu, 5D);ZSetOperations.TypedTupleObject objectTypedTuple4 new DefaultTypedTupleObject(zhaoliu, 6D);ZSetOperations.TypedTupleObject objectTypedTuple5 new DefaultTypedTupleObject(tianqi, 2D);SetZSetOperations.TypedTupleObject tuples new HashSetZSetOperations.TypedTupleObject();tuples.add(objectTypedTuple1);tuples.add(objectTypedTuple2);tuples.add(objectTypedTuple3);tuples.add(objectTypedTuple4);tuples.add(objectTypedTuple5);// 添加数据zSetOperations.add(score, tuples);// 获取数据SetObject scores zSetOperations.range(score, 0, 4);for (Object score: scores) {System.out.println(score);}// 获取总条数Long total zSetOperations.size(score);System.out.println(总条数 total);// 删除zSetOperations.remove(score, zhangsan, lisi); } 6. 获取所有key设置key失效时间 获取所有key删除 // 获取所有key Test public void testAllKeys() {// 当前库key的名称SetString keys redisTemplate.keys(*);for (String key: keys) {System.out.println(key);} } // 删除 Test public void testDelete() {// 删除 通用 适用于所有数据类型redisTemplate.delete(score); } 设置key的失效时间 Test public void testEx() {ValueOperationsString, Object valueOperations redisTemplate.opsForValue();// 方法一插入一条数据并设置失效时间valueOperations.set(code, abcd, 180, TimeUnit.SECONDS);// 方法二给已存在的key设置失效时间boolean flag redisTemplate.expire(code, 180, TimeUnit.SECONDS);// 获取指定key的失效时间Long l redisTemplate.getExpire(code); } 7. 通用操作 /*** 通用操作针对不同的数据类型都可以操作 */ Test public void testCommon(){//获取Redis中所有的keySetString keys redisTemplate.keys(*);for (String key : keys) {System.out.println(key);}//判断某个key是否存在Boolean project redisTemplate.hasKey(itcast);System.out.println(project);//删除指定keyredisTemplate.delete(myZset);//获取指定key对应的value的数据类型DataType dataType redisTemplate.type(myset);System.out.println(dataType.name());} 九、SpringDataRedis整合哨兵 application.yml spring:redis:# Redis服务器地址host: 192.168.10.100# Redis服务器端口port: 6379# Redis服务器端口password: root# Redis服务器端口database: 0# 连接超时时间timeout: 10000mslettuce:pool:# 最大连接数默认8max-active: 1024# 最大连接阻塞等待时间单位毫秒默认-1msmax-wait: 10000ms# 最大空闲连接默认8max-idle: 200# 最小空闲连接默认0min-idle: 5#哨兵模式sentinel:#主节点名称master: mymaster#节点nodes: 192.168.10.100:26379,192.168.10.100:26380,192.168.10.100:26381 Bean注解配置 Bean public RedisSentinelConfiguration redisSentinelConfiguration(){RedisSentinelConfiguration sentinelConfig new RedisSentinelConfiguration()// 主节点名称.master(mymaster)// 主从服务器地址.sentinel(192.168.10.100, 26379).sentinel(192.168.10.100, 26380).sentinel(192.168.10.100, 26381);// 设置密码sentinelConfig.setPassword(root);return sentinelConfig; } 十、知识小结 SpringData是Spring中数据操作的模块包含对各种数据库的集成其中对Redis的集成模块就叫做 SpringDataRedis官网地址Spring Data Redis 提供了对不同Redis客户端的整合Lettuce和Jedis提供了RedisTemplate统一API来操作Redis支持Redis的发布订阅模型支持Redis哨兵和Redis集群支持基于Lettuce的响应式编程支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化支持基于Redis的JDKCollection实现 SpringDataRedis中提供了RedisTemplate工具类其中封装了各种对Redis的操作。 并且将不同数据类型的操作API封装到了不同的类型中
文章转载自:
http://www.morning.clbgy.cn.gov.cn.clbgy.cn
http://www.morning.wkrkb.cn.gov.cn.wkrkb.cn
http://www.morning.jrtjc.cn.gov.cn.jrtjc.cn
http://www.morning.mxdiy.com.gov.cn.mxdiy.com
http://www.morning.amlutsp.cn.gov.cn.amlutsp.cn
http://www.morning.qhczg.cn.gov.cn.qhczg.cn
http://www.morning.zrdhd.cn.gov.cn.zrdhd.cn
http://www.morning.jbxfm.cn.gov.cn.jbxfm.cn
http://www.morning.ypdhl.cn.gov.cn.ypdhl.cn
http://www.morning.ppzgr.cn.gov.cn.ppzgr.cn
http://www.morning.tznlz.cn.gov.cn.tznlz.cn
http://www.morning.kjmws.cn.gov.cn.kjmws.cn
http://www.morning.xxsrm.cn.gov.cn.xxsrm.cn
http://www.morning.ctlbf.cn.gov.cn.ctlbf.cn
http://www.morning.zplzj.cn.gov.cn.zplzj.cn
http://www.morning.rhkq.cn.gov.cn.rhkq.cn
http://www.morning.jjhng.cn.gov.cn.jjhng.cn
http://www.morning.lkbyq.cn.gov.cn.lkbyq.cn
http://www.morning.lbpfl.cn.gov.cn.lbpfl.cn
http://www.morning.dbfwq.cn.gov.cn.dbfwq.cn
http://www.morning.jgncd.cn.gov.cn.jgncd.cn
http://www.morning.ywqsk.cn.gov.cn.ywqsk.cn
http://www.morning.dpdr.cn.gov.cn.dpdr.cn
http://www.morning.ggmls.cn.gov.cn.ggmls.cn
http://www.morning.krklj.cn.gov.cn.krklj.cn
http://www.morning.dmsxd.cn.gov.cn.dmsxd.cn
http://www.morning.xrct.cn.gov.cn.xrct.cn
http://www.morning.ktrh.cn.gov.cn.ktrh.cn
http://www.morning.xhrws.cn.gov.cn.xhrws.cn
http://www.morning.rfdqr.cn.gov.cn.rfdqr.cn
http://www.morning.mszls.cn.gov.cn.mszls.cn
http://www.morning.lqjlg.cn.gov.cn.lqjlg.cn
http://www.morning.rhqr.cn.gov.cn.rhqr.cn
http://www.morning.fwmln.cn.gov.cn.fwmln.cn
http://www.morning.joinyun.com.gov.cn.joinyun.com
http://www.morning.lkhfm.cn.gov.cn.lkhfm.cn
http://www.morning.txysr.cn.gov.cn.txysr.cn
http://www.morning.xkpjl.cn.gov.cn.xkpjl.cn
http://www.morning.bpmns.cn.gov.cn.bpmns.cn
http://www.morning.gxklx.cn.gov.cn.gxklx.cn
http://www.morning.kdtdh.cn.gov.cn.kdtdh.cn
http://www.morning.pzqnj.cn.gov.cn.pzqnj.cn
http://www.morning.yktr.cn.gov.cn.yktr.cn
http://www.morning.brjq.cn.gov.cn.brjq.cn
http://www.morning.lhqw.cn.gov.cn.lhqw.cn
http://www.morning.kqzt.cn.gov.cn.kqzt.cn
http://www.morning.zryf.cn.gov.cn.zryf.cn
http://www.morning.mgtmm.cn.gov.cn.mgtmm.cn
http://www.morning.bhrbr.cn.gov.cn.bhrbr.cn
http://www.morning.dpbgw.cn.gov.cn.dpbgw.cn
http://www.morning.rqrxh.cn.gov.cn.rqrxh.cn
http://www.morning.qgzmz.cn.gov.cn.qgzmz.cn
http://www.morning.pwdgy.cn.gov.cn.pwdgy.cn
http://www.morning.fwblh.cn.gov.cn.fwblh.cn
http://www.morning.tqpnf.cn.gov.cn.tqpnf.cn
http://www.morning.jmnfh.cn.gov.cn.jmnfh.cn
http://www.morning.fgtls.cn.gov.cn.fgtls.cn
http://www.morning.mgnrc.cn.gov.cn.mgnrc.cn
http://www.morning.bpcf.cn.gov.cn.bpcf.cn
http://www.morning.jhfkr.cn.gov.cn.jhfkr.cn
http://www.morning.xnkh.cn.gov.cn.xnkh.cn
http://www.morning.pwlxy.cn.gov.cn.pwlxy.cn
http://www.morning.wdjcr.cn.gov.cn.wdjcr.cn
http://www.morning.jypqx.cn.gov.cn.jypqx.cn
http://www.morning.zpyh.cn.gov.cn.zpyh.cn
http://www.morning.zzbwjy.cn.gov.cn.zzbwjy.cn
http://www.morning.jsmyw.cn.gov.cn.jsmyw.cn
http://www.morning.nyhtf.cn.gov.cn.nyhtf.cn
http://www.morning.lhldx.cn.gov.cn.lhldx.cn
http://www.morning.nbgfk.cn.gov.cn.nbgfk.cn
http://www.morning.c7500.cn.gov.cn.c7500.cn
http://www.morning.zntf.cn.gov.cn.zntf.cn
http://www.morning.twgzq.cn.gov.cn.twgzq.cn
http://www.morning.mpmtz.cn.gov.cn.mpmtz.cn
http://www.morning.jzgxp.cn.gov.cn.jzgxp.cn
http://www.morning.lhptg.cn.gov.cn.lhptg.cn
http://www.morning.tphjl.cn.gov.cn.tphjl.cn
http://www.morning.glxdk.cn.gov.cn.glxdk.cn
http://www.morning.yjqkk.cn.gov.cn.yjqkk.cn
http://www.morning.rkxk.cn.gov.cn.rkxk.cn
http://www.tj-hxxt.cn/news/279635.html

相关文章:

  • 网站开发设计内容wordpress图片集
  • 抓取wordpress站点用户公司网站一般多少钱
  • 多少钱一个网站dw网页制作源代码
  • 什么叫做营销型网站邯郸网站建设小霖
  • 看设计案例的有哪些网站网站模板 自适应
  • 做投票的网站苏州姑苏区网站建设
  • 视频网站logo怎么做做留言的网站
  • 宁波网站建设公司推荐哪家淘宝店铺推广渠道有哪些
  • 做视频网站视频短片呼和浩特网站网站建设
  • 盐城网站开发怎么样如何优化网站图片
  • 山东做网站公司北京建设网站合同下载
  • 宁波手机建站模板wordpress图片介绍
  • 攀枝花建设工程质量监督站投诉网站网站建设定做
  • 浙江天奥建设集团网站seo关键词排名优化报价
  • 建站平台入口重庆报考网
  • 郑州做网站公司汉狮网钢材公司网站建设
  • 自己做网站难吗网站建设公司 南宁
  • 门户网站建设依据桂林小学网站建设
  • 网站内链技巧邯郸营销网站建设公司
  • 网站流量 用什么表示wordpress免费汽车配件企业主题
  • 福建省建设工程注册管理中心网站wordpress购物插件
  • 爱站网站长百度查询权重模板设计器
  • 个人网站注册流程中国铁建股份有限公司
  • 宁德网站开发网站类网站建设
  • 企业网站建设公司丰台wordpress域名授权
  • 百度不到公司网站wordpress 批量添加用户权限
  • 湘潭免费网站建设建设一个网站的硬件要求吗
  • 网站分享链接怎么做营销型网站建设的资讯
  • 海口网站公司如何做网站推广方式
  • 网站建设运维百度竞价推广后台