Redis
Redis:
全称:Remote Dictionarty Service
简介:
Redis是远程字典服务,是一个开源的NoSQL数据库,使用ANSI C语言编写的,它是一个基于内存的Key-Value数据库,并且支持持久化数据库。
有丰富的数据结构如:
- String (字符串)
- Hash ()
- List (双向列表)
- Set(无序列表)
- Sorten Set(有序集合)
NoSQL数据库:
非关系型数据库,放弃了统一的技术标准(sql),为某一个特定领域场景设计,使性能、容量、扩展第一实现一定的突破
特点:
- 不支持ACID
- 不遵循SQL表尊
- 远超SQL性能
- 海量数据读写
- 高并发
常见NoSQL:
- mongoDB 高性能、开源、文档型数据库
- HBase HBase支持数十亿行*数百亿列的数据库库表 是Hadoop项目的数据库
语法:
nil 指无值或不存在,Go、Lua、Object-C 为空都是nil
set key value EX 20 设置key的过期时间为20s
set key value PX 3000 设置key的过期时间为3000ms = 3s
set key value NX 如果键不存在设置新的值,否则失败
set key value XX 如果键存在就设置新的值,否则失败
NX和XX不能同时出现,因为他们语义互斥
在key中可以使用:(冒号)来做单词分离,如:user:1 或 user:2 user称为命名空间
Keys 后面加key的名字可以做模糊查询 如:key na*e:*
DEL key 可以删除一个key或多个key(危险操作)
EXISTS key 查询key是否存在(0不存在 1存在)
TYPE key 可以返回这个key的类型
RENAME key newKey 给kye进行重命名
EXPIRE key 秒 给指定key设置一个过期时间
PEXPIRE key 毫秒 给指定key设置一个毫秒过期时间
PEXPIREAT key 时间戳 给指定key设置一个时间戳 如:1714741026000
TTL key 获取key的过期前时间 如果为-1永不过期 如果为-2没有这个key
字符串:
语法
set key value 设置一个值
get key 获取一个值
append key 在字符串后凭借字符串
getrange key start end 截取字符串 start(包前) end结束,end可以是固定值也可以是-1(最后一位)
setnx key value 当key不存在时设置key的值
strlen key 获取value的长度
Hash:
hash在Redis中是一个广泛使用的概念,主要是指一种任意长度的数据(如字符串)通过Hash算法变换成固定长度的数据格式的过程,这个固定长度的数据通常被称为哈希值或哈希码。
Radis中每个Hash可以存储2^32-1个键值对 (40多亿)
语法
hset 对象名:对象ID key value key value key value
hget 对象名:对象ID 属性Key
hgetall 对象名:对象ID
hdel 对象名:对象ID 属性名 删除对应属性
hexists 对象名:对象ID 属性名 检查属性是否存在,存在返回1,否则返回0
List:
List在Redis中提供一种线性数据库结构,它可以存储一个字符串列表,按照出插入顺序排序,可以选中列表的两端推出或弹出元素。
主要元素:元素有序,支持重复元素、可以通过索引访问元素、操作复杂低(头部和尾部的时间复杂度为0(1))
常见八股文:如何使用List实现一个消息队列? 如何遍历Redis的List? Redis的List最大存储多少个元素?
一个列表最多包含2^32-1个元素(4294967295,每个列表超过40个亿元素)
语法
LPUSH key value value value 将一个或多个值插入到列表的头部
RPUSH key value value value 将一个或多个值插入到列表的尾部
LPOP key 从头部移除并获取一个元素
RPOP key 从尾部移除并获取一个元素
LLEN key 获取链表的长度
LINSERT key BEFORE|AFTER pivot value 在列表的元素前或者后插入元素(pivot 要插入的值)
Set:
Q:redis的Set数据结构能否重复?
A:Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
Q:Redis集合最大存储?
A:2^32-1
使用场景:随机抽奖、唯一性检查
语法
SADD key value value value 给Set数据机构添加内容
SMEMBERS key 获取所有元素
SPOP key 随机弹出并移除一个元素
Sorted Set
使用场景:实现排行榜系统,带权重的任务队列
语法
ZADD key 权重 值 权重 值 权重 值 添加数据到有序集合里
ZERVRANGE key 0 -1 权重从大到小获取所有元素 加WITHSCORES和权重一起返回ZRANGE key 0 -1 权重从小到大获取所有元素 加WITHSCORES和权重一起返回
SpringBoot 整合Redis
导包
<!--redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--Lettuce 连接池-->
<dependency>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
<version>6.3.2.RELEASE</version>
</dependency>
Lettuce特点:
1. **高性能** Lettuce通过使用NIO(非阻塞IO)和连接池技术,实现了高性能的数据传输与连接管理
2. **异步和响应式** 单个线程中处理多个并发请求,提高的吞吐量
3. **可靠性** 支持自动重连和故障转移
4. **可扩展性性** 支持连接池和集群模式
配置
@Configuration
public class RedisConfig {
//序列化器 redisTemplate
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String,Object> redisTemplate=new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置key的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
//设置value的序列化器
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
}
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 夏某
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果