Redis的初步入门
Redis是一个基于内存的
key-value
结构的数据库
- 基于内存存储,读写性能高
- 适合储存热点数据(热点商品、咨询、新闻 等)
- 热点数据:短时间内大量用户进行访问
- 企业应用广泛
- 应用场景
- 缓存
- 任务队列
- 消息队列
- 分布式锁
Redis使用C语言开发,是一个开源的高姓名键值对数据库,可以达到100000+的QPS(每秒内的查询次数)
他的储存类型比较丰富,因此也叫做“结构化的NoSql数据库”
NoSql(Not Only SQL),不仅仅是SQL,泛指非关系型数据库,是关系型数据库的补充
Redis的设置
1、设置Redis在后台运行
将Redis配置文件中的daemonize
属性值改为yes
2、初始化Redis的密码
在Redis配置文件中的,下图位置后
加入:requirepass password
3、进入本地Redis
./redis-cli -h localhost -p 6379 -a password
4、开启Redis的远程连接
Redis中的数据类型
Redis中存储的是
key-value
结构的数据其中
key
是字符串,value
的值有五种常用的数据类型
- 字符串
string
- 最常用,存储普通字符串
- 哈希
hash
- 适合存储对象
- 列表
list
- 按照插入顺序排序
- 集合
set
- 无序集合,没有重复元素
- 有序集合
sorted set
- 有序集合,没有重复元素
Redis的常用命令
字符串string的操作命令
命令 | 含义 |
---|---|
SET key value | 设置指定key的值 |
GET key | 获取指定key的值 |
SETEX key seconds value | 设置指定key的值,并将key的过期时间设置为seconds秒 |
SETNX key seconds | 只有在key不存在时设置key的值 |
哈希hash的操作命令
命令 | 说明 |
---|---|
HSET key field value | 将哈希表key中的字段field的值设置为value |
HGET key field | 获取存储在哈希表中指定字段的值 |
HDEL key field | 删除存储在哈希表中指定的字段 |
HKEYS key | 获取哈希表中所有的字段 |
HVALS key | 获取哈希表中所有的值 |
HGETALL key | 获取在哈希表中指定key的所有字段和值 |
列表list的操作命令
命令 | 说明 |
---|---|
LPUSH key value1 [values] | 将一个或多个值插入到列表的头部 |
LRANGE key start stop | 获取列表指定范围内的元素 |
RPOP key | 移除并获取列表最后一个元素 |
LLEN key | 获取列表长度 |
BRPOP key1 [key2] timeout | 移除并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时 或 发现可弹出元素为止 |
集合set的操作命令
命令 | 说明 |
---|---|
SADD key member1 [member2] | 向集合添加一个或多个成员 |
SMEMBERS key | 返回集合中的所有成员 |
SCARD key | 获取集合的成员数 |
SINTER key1 [key2] | 返回给定所有集合的交集 |
SUNION key1 [key2] | 返回所有给定集合的并集 |
SDIFF key1 [key2] | 返回给定所有集合的差集 |
SREM key1 member1 [member2] | 移除集合中一个或多个成员 |
有序集合sorted set的操作命令
命令 | 说明 |
---|---|
ZADD key score1 memver1 [score2 member2] | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 |
ZRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合中指定区间内的成员 |
ZINCRBY key increment member | 有序集合中对指定成员分数加上增量increment |
ZREM key member [member…] | 移除有序集合中的一个或多个成员 |
通用命令
命令 | 说明 |
---|---|
KEYS pattren | 查找所有符合给定模式(pattern)的key |
EXISTS key | 检查给定key是否存在 |
TYPE key | 返回key所储存的值的类型 |
TTL key | 返回给定key的剩余生存时间(TTL, time to live), 以秒为单位 |
DDL key | 在key存在时删除key |
使用Java操作Redis数据库
Redis官方推荐的客户端:
- Jedis
- Lettuce
- Redission
Spring对Redis客户端也进行了整合,提供了Spring Data Redis
Jedis操作Redis数据库
- 获取连接
- 执行操作
- 关闭连接
Spring Data Redis
在spring中,提供了一个高度封装的类:RedisTemplate,针对Jedis客户端中的大量api进行归类封装,将同一类型操作封装为operation接口
ValueOperations
:简单K-V操作SetOperations
:set类型数据操作ZSetOperations
:zset类型操作HashOperations
:针对map类型的数据操作ListOperations
:针对list类型的数据操作
注意:
-
通过RedisTemplate对Redis进行操作的时候,Spring会对传入的数据进行序列化
-
进而发生以下在redis官方客户端中,存入的格式不一样
-
解决:通过自定义Redis配置类,更改序列化方式
package com.solider.config; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.StringRedisSerializer; /** * @author Solider * @version 1.0 * @Date 2023/10/26 16:17 * @since 1.0 */ @Configuration public class RedisConfig extends CachingConfigurerSupport { @Bean public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>(); // 默认的Key序列化器为:JdkSerializationRedisSerializer redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setConnectionFactory(redisConnectionFactory); return redisTemplate; } }