Redis基础

键值数据库 NoSQL 非关系型数据库
非结构化的、无关联的、非SQL、BASE
键值类型(Redis)、文档类型(MongoDB)、列类型(HBase)、Graph类型(Neo4j)

SQLNoSQL
数据结构结构化非结构化
数据关联关联的非关联的
查询方式SQL查询非SQL
事务特性ACIDBASE
存储方式磁盘内存
扩展性垂直水平
使用场景1)数据结构固定2)相关业务对数据安全性、一致性要求较高数据结构不固定;对一致性、安全性要求不高;对性能要求

Redis: 远程词典服务器
特征:
键值型、单线程、低延迟,速度快(基于内存、IO多路复用、良好的编码)、支持数据持久化、支持主从集群、分片集群、支持多语言客户端

1Redis常见命令

1.1Redis数据结构

Redis是一个key-value的数据库,key一般是String类型。
value类型:
基本类型:String、Hash、List、Set、SortedSet
特殊类型:GEO、BitMap、HyperLog
查看不同命令:https://redis.io/commands

1.2Redis通用命令

通过help [command] 可以查看一个命令的具体用法

  • KEYS:查看符合模板的所有key,不建议在生产环境设备上使用
  • DEL:删除一个指定的key
  • EXISTS:判断key是否存在
  • EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
  • TTL:查看一个key的剩余有效期

1.3String类型

根据字符串的格式不同,将String类型分为三类:

  • string:普通字符串
  • int:整数类型,可以做自增、自减操作
  • float:浮点类型,可以做自增、自减操作
    底层都是字节数组形式存储;字符串类型的最大空间不能超过512M。

String类型的常见命令

命令说明格式
SET添加或者修改已经存在的一个String类型的键值对set key value
GET根据key获取String类型的valueget key
SETNX添加一个String类型的键值对,前提是这个key不存在,否则不执行setnx key value
GETRANGE获取存储在指定key中字符串的子字符串,由start和end(均包含)决定GETRANGE key start end
MSET批量添加多个String类型的键值对key1 value1 key2 value2…
SETEX添加一个String类型的键值对,并指明有效期(单位s)setex key timeout value
DECR自减1;
key不存在,key会先被初始化为0,然后再执行;
值限制在64为有符号数字表示之内
DECR key
DECRBY将key所存储的值减去指定的减量值,返回值是减后key值DECRBY key amount
MGET根据多个key获取多个String类型的valueMGET key1…
INCR让一个整型的key自增1,限制64位INCR key
STRLEN获取长度,必须是字符串值STRLEN key
INCRBY让一个整型的key加上指定增量INCRBY key amount
INCRBYFLOAT让一个浮点类型的数字自增指定增量INCRBYFLOAT key amount

怎么区分不同类型的key?没有mysql中table的概念。

key 的结构
项目名:业务名:类型:id

1.4Hash类型

String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便。Hash节后可以将对象中的每个字段独立存储,可以对单个字段做CRUD。
在这里插入图片描述

Hash类型的常见命令

命令说明格式
HSET将哈希表 key 中的字段 field 的值设为 valueHSET key field value
HGET获取存储在哈希表中指定字段的值HGET key field
HDEL删除存储在哈希表中的指定字段HDEL key field
HKEYS获取哈希表中所有字段HKEYS key
HVALS获取哈希表中所有值HVALS key
HGETALL获取在哈希表中指定 key 的所有字段和值HGETALL key

1.5List类型

Redis 列表是简单的字符串列表,按照插入顺序排序

List类型的常见命令

命令说明格式
LPUSH将一个或多个值插入到列表头部LPUSH key value1 [value2]
LRANGE获取列表指定范围内的元素LRANGE key start stop
RPOP移除并获取列表最后一个元素RPOP key
LLEN获取列表长度LLEN key
BRPOP移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超 时或发现可弹出元素为止BRPOP key1 [key2 ] timeout

1.6set类型

Redis set 是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据

set类型的常见命令

命令说明格式
SADD向集合添加一个或多个成员SADD key member1 [member2]
SMEMBERS返回集合中的所有成员SMEMBERS key
SCARD获取集合的成员数SCARD key
SINTER返回给定所有集合的交集SINTER key1 [key2]
SUNION返回所有给定集合的并集SUNION key1 [key2]
SDIFF返回给定所有集合的差集SDIFF key1 [key2]
SREM移除集合中一个或多个成员SREM key member1 [member2]

1.7sorted set类型

Redis sorted set 有序集合是 string 类型元素的集合,且不允许重复的成员。每个元素都会关联一个double类型的分数(score) 。redis正是通过分数来为集合中的成员进行从小到大排序。有序集合的成员是唯一的,但分数却可以重复。

sorted set类型的常用命令

命令说明格式
ZADD向有序集合添加一个或多个成员,或者更新已存在成员的 分数ZADD key score1 member1 [score2 member2]
ZRANGE通过索引区间返回有序集合中指定区间内的成员ZRANGE key start stop [WITHSCORES]
ZINCRBY序集合中对指定成员的分数加上增量 incrementZINCRBY key increment member
ZREM移除有序集合中的一个或多个成员ZREM key member [member …]

2在JAVA中操作Redis

Spring 对 Redis 客户端进行了整合,提供了 Spring Data Redis,在Spring Boot项目中还提供了对应的Starter,即 spring-boot-starter-data-redis。

2.1Jedis

Jedis 是 Redis 的 Java 版本的客户端实现。
使用 Jedis 操作 Redis 的步骤:

  1. 获取连接:new Jedis(“localhost”,6379);
  2. 执行操作: jedis.
  3. 关闭连接: jedis.close();
<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>2.8.0</version>
</dependency>

2.2Spring Data Redis

Spring Data Redis 是 Spring 的一部分,提供了在 Spring 应用中通过简单的配置就可以访问 Redis 服务,对 Redis 底层开发包进行了高度封装。在 Spring 项目中,可以使用Spring Data Redis来简化 Redis 操作。

<dependency>
	<groupId>org.springframework.data</groupId>
	<artifactId>spring-data-redis</artifactId>
	<version>2.4.8</version>
</dependency>
<!--SpringBoot提供了对应的starter、maven坐标-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

Spring Data Redis中提供了一个高度封装的类:RedisTemplate,针对 Jedis 客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:

  • ValueOperations:简单K-V操作
  • SetOperations:set类型数据操作
  • ZSetOperations:zset类型数据操作
  • HashOperations:针对hash类型的数据操作
  • ListOperations:针对list类型的数据操作

使用方式

1、编写启动类@SpringBootApplication
2、配置相关yml:redis相关配置
3、提供配置类@Configuration:继承CachingConfigurerSupport,RedisTemplate成为Bean注入。默认的Key序列化器为:JdkSerializationRedisSerializer。配置类非必须,SpringBoot框架会自动装配RedisTemplate对象,但默认的key序列化器为JdkSerializationRedisSerializer,导致我们存到Redis中后的数据和原始数据有差别。
4、测试类@SpringBootTest、@RunWith(SpringRunner.class)

测试类方法基本和命令相同,但是存值前:

  • 操作字符串类型
    • ValueOperations valueOperations = redisTemplate.opsForValue();
  • 操作Hash类型
    • HashOperations hashOperations = redisTemplate.opsForHash();
  • 操作列表类型
    • ListOperations listOperations = redisTemplate.opsForList();
  • 操作集合类型
    • SetOperations setOperations = redisTemplate.opsForSet();
  • 操作有序集合类型
    • ZSetOperations zSetOperations = redisTemplate.opsForZSet();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值