赞
踩
目录
Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:
在Web应用发展的初期,那时关系型数据库受到了较为广泛的关注和应用,原因是因为那时候Web站点基本上访问和并发不高、交互也较少。而在后来,随着访问量的提升,使用关系型数据库的Web站点多多少少都开始在性能上出现了一些瓶颈,而瓶颈的源头一般是在磁盘的I/O上。而随着互联网技术的进一步发展,各种类型的应用层出不穷,这导致在当今云计算、大数据盛行的时代,对性能有了更多的需求,主要体现在以下四个方面:
为了克服这一问题,NoSQL应运而生,它同时具备了高性能、可扩展性强、高可用等优点,受到广泛开发人员和仓库管理人员的青睐。
主要是springBoot对Redis的整合,所以在介绍类型使用的时候只展示增删改查。
存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型
存储数据的格式:一个存储空间保存一个数据
存储内容:通常使用字符串,如果字符串以整形的形式展示,可作为数字操作使用
set key value
get key
del key
新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息。
需要的存储结构:一个存储空间保存多个键值对数据
hash类型:底层使用哈希表结构实现数据存储
hset key field value
eg:hset user name zhansgan
eg:hset user age 38
hget key field
hdel key field1 [field2] (可以删除多个field)
eg: hdel user name age
数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分。
需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序。
list类型:保存多个数据,底层使用双向链表存储结构实现。
lpush key value1 [value2] (从左到右存储)
eg:lpush name zhangsan lisi wangwu
rpush key value1 [value2] (从右往左存储)
eg:rpush name zhangsan lisi wangwu
lrange key start stop 下标从几到几 -1表示最后一个
eg: lrange name 0 -1
lpop key
eg:lpop name (获取并移除第一个数据)
rpop key
eg:rpop name (获取并移除最后一个数据)
lrem key count value (在一个key中从左边开始删除几个这样的值)
新的存储需求:存储大量的数据,在查询方面提供更高的效率
需要的存储结构:能够保证大量的数据,高效的内部存储机制,便于查询。
set类型:与hash存储结构完全相同,仅存储键,不存储值,并且键是不允许重复的。
sadd key member1 [member2]
eg:sadd users zhansgan lisi
eg:sadd users wangwu
smembers key
srem key member1 [member2] (可以删除多个field)
eg: srem users zhangsan
新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式
需要的存储结构:新的存储模型,可以保存可排序的数据
sorted_set类型:在se的存储结构基础上添加可排序字段
zadd key scorel member1 [ scorel member2]
eg:sadd users 19 lisi
zrange key start stop [WITHSCORES]
eg: zrange users 0 -1(从小到大获取数据的的属性)
eg: zrange users 0 -1 withscores(从小到大获取数据的编号和属性)
zrevrange key start stop [WITHSCORES]
eg: zrevrange users 0 -1(从大到小获取数据的的属性)
eg: zrevrange users 0 -1 withscores(从大到小获取数据的的属性和编号)
zrem key member1 [member2]
eg: zrem users lisi
SpringBoot版本: 2.3.4.RELEASE
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-redis</artifactId>
- </dependency>
-
-
- <!-- spring2.X集成redis所需common-pool2-->
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-pool2</artifactId>
- <version>2.6.0</version>
- </dependency>
- spring:
- redis:
- host: 自己的ip
- port: 自己的端口号 默认 6379
- #Redis使用的数据库
- database: 0
- #连接超时事件毫秒
- timeout: 18000
- lettuce:
- pool:
- #连接池最大连接数
- max-active: 20
- #最大阻塞等待时间
- max-idle: 5
- #连接池最小空闲连接
- min-idle: 0
在不使用序列化配置之前Java数据序列化底层使用的是默认序列化存入Redis中是解析过乱码的数据,存到Redis中可视化太低!使用之后可以显示中文
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
- import org.springframework.data.redis.serializer.StringRedisSerializer;
-
- @Configuration
- public class RedisConfig {
- /**
- * redis序列化的工具配置类,下面这个请一定开启配置
- * 127.0.0.1:6379 keys *
- * 1)"ord:102" 序列化过
- * 2)"\xac\xed\x00\x05t\ord:102" 没有序列化过
- * this.redisTemplate.opsForValue()//提供了操作String类型的所有方法
- * this.redisTemplate.opsForList()//提供了操作List类型的所有方法
- * this.redisTemplate.opsForSet()//提供了操作Set类型的所有方法
- * this.redisTemplate.opsForHash()//提供了操作Hash类型的所有方法
- * this.redisTemplate.opsForZSet()//提供了操作ZSet类型的所有方法
- *
- *
- * @param lettuceConnectionFactory
- * @return
- */
-
- @Bean
- public RedisTemplate<String,Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory){
- RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
- redisTemplate.setConnectionFactory(lettuceConnectionFactory);
- //设置key序列化方式String
- redisTemplate.setKeySerializer(new StringRedisSerializer());
- //设置value的序列化方式json,使用GenericJackson2JsonRedisSerializer替换默认的序列化
- redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
- redisTemplate.setHashKeySerializer(new StringRedisSerializer());
- redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
- redisTemplate.afterPropertiesSet();
- return redisTemplate;
- }
- }
下面图片就是上述代码,请忽略!
在SpringBoot中集成了两个模版一个是 RedisTemplate,另一个为 StringRedisTemplate
而虽然StringRedisTempate帮助我们做了序列化,但是存储数据的时候只能存储Sting类型的数据,而RedisTemplate可以存储Object类型,所以我们一个使用RedisTemplate比较多一些!
- @SpringBootTest
- public class RedisTest {
-
- /**
- * redis序列化的工具配置类,下面这个请一定开启配置
- * 127.0.0.1:6379 keys *
- * 1)"ord:102" 序列化过
- * 2)"\xac\xed\x00\x05t\ord:102" 没有序列化过
- * this.redisTemplate.opsForValue()//提供了操作String类型的所有方法
- * this.redisTemplate.opsForList()//提供了操作List类型的所有方法
- * this.redisTemplate.opsForSet()//提供了操作Set类型的所有方法
- * this.redisTemplate.opsForHash()//提供了操作Hash类型的所有方法
- * this.redisTemplate.opsForZSet()//提供了操作ZSet类型的所有方法
- *
- *
- * @param lettuceConnectionFactory
- * @return
- */
-
- @Autowired
- RedisTemplate redisTemplate;
-
- @Test
- public void test1(){
-
- //boundhashOps也是操作redis的一种方法,但是是低版本操作。
- //操作方式和opsForhash一样。根据个人喜好都可以
- Object content = redisTemplate.boundHashOps("content").get("1");
- System.out.println(content);
- }
-
- /**
- 存储string类型
- */
- @Test
- public void test2(){
- /**
- * redisTemplate.opsForValue()//提供了操作String类型的所有方法
- */
- Object name ="dession";
-
- redisTemplate.opsForValue().set("name",name);
- //设置过期时间1天过期
- redisTemplate.expire("name",1, TimeUnit.DAYS);
-
- System.out.println(redisTemplate.opsForValue().get("name"));
- // 结果为:dession
-
-
-
- }
-
- /**
- 存储Hash数据类型
- */
- @Test
- public void test3(){
- //单个存储
- redisTemplate.opsForHash().put("users","name","zhangsan");
- //设置过期时间
- redisTemplate.expire("users",1, TimeUnit.DAYS);
- //多只存储
- Map map = new HashMap();
- map.put("age",12);
- map.put("sex","男");
- redisTemplate.opsForHash().putAll("users",map);
-
- Object o = redisTemplate.opsForHash().get("users", "name");
- System.out.println(o);
-
-
-
- }
-
- }
好啦,以上是我操作两个最最最常用的数据类型的方式来进行的案例讲解,还有其中还有很多方法不能一一列举出来,剩下的任务传递给你,认真探索一下redis的奥秘吧!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。