Redis

基于内存key-value 键值对 数据库

应用程序和数据库之间的 Redis 相当于 CPU 和内存之间的 Cache。

  • 基于内存,读写性能高
  • 适合存储热点数据

使用AnotherRedisDesktopManager图形化管理界面

123465

注意:

使用配置文件,则在启动时必须指定所使用的配置文件。如果不使用配置文件,Redis 会使用默认参数运行;

1. 5种常用数据类型

key-value 键值对:key 是字符串类型,value有5常用数据类型:

  • 字符串(string):普通字符串,Redis中最简单的数据类型(细分为string,int,float)
  • 哈希(hash):也叫散列,类似于Java中的HashMap结构
  • 列表(list):按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList
  • 集合(set):无序集合,没有重复元素,类似于Java中的HashSet
  • 有序集合(sorted set/zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素

2. Redis常用命令

2.1 字符串类型常用命令

  • SET key value 设置指定key的值
  • GET key 获取指定key的值
  • SETEX key seconds value 设置指定key的值,并将 key 的过期时间设为 seconds 秒
  • SETNX key value 只有在 key 不存在时设置 key 的值

2.2 哈希操作命令

Redis hash 是一个string类型的 field 和 value 的映射表,hash特别适合用于存储对象,常用命令:

  • HSET key field value 将哈希表 key 中的字段 field 的值设为 value
  • HGET key field 获取存储在哈希表中指定字段的值
  • HDEL key field 删除存储在哈希表中的指定字段
  • HKEYS key 获取哈希表中所有字段
  • HVALS key 获取哈希表中所有值

2.3 列表操作命令

Redis 列表是简单的字符串列表,按照插入顺序排序,常用命令:

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

2.4 集合操作命令

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

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

2.5 有序集合操作命令

Redis有序集合是string类型元素的集合,且不允许有重复成员。每个元素都会关联一个double类型的分数。常用命令:

常用命令:

  • ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员
  • ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员
  • ZINCRBY key increment member 有序集合中对指定成员的分数加上增量 increment
  • ZREM key member [member …] 移除有序集合中的一个或多个成员

2.6 通用命令

Redis的通用命令是不分数据类型的,都可以使用的命令:

  • KEYS pattern 查找所有符合给定模式( pattern)的 key
  • EXISTS key 检查给定 key 是否存在
  • TYPE key 返回 key 所储存的值的类型
  • DEL key 该命令用于在 key 存在时删除 key

3 在java中操作Redis

3.1 Redis的Java客户端:

  • Jedis
  • lettuce
  • Spring Data Redis

3.2 Spring Data Redis

使用步骤:

  1. 导入Spring Data Redis 的maven坐标(一般带上jedis)
  2. 配置Redis数据源
  3. 编写配置类,创建RedisTemplate对象
  4. 通过RedisTemplate对象操作Redis
    • 通过redisTemplate对象实例获取所需数据类型的对象,再进行所需操作。

配置类:(序列化器可优化)

@Configuration
@Slf4j
public class RedisConfiguration {
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        log.info("开始创建Redis模版对象");
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置redis的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        //设置redis key的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());

        return redisTemplate;
    }
}

为什么这样写?

  1. 设置连接工厂RedisTemplate需要一个RedisConnectionFactory来建立与 Redis 服务器的连接,因此需要将其设置到RedisTemplate中。
  2. 设置键的序列化器:Redis 是一个键值对存储系统,键和值 在传输和存储时需要进行序列化。StringRedisSerializer是 Spring Data Redis 提供的一个序列化器,用于将键序列化为字符串,这样可以方便地在 Redis 中存储和查询。默认的序列化导致可读性差、内存占用大

API返回值类型说明
redisTemplate.opsForValue()ValueOperations操作 String 类型数据
redisTemplate.opsForHash()HashOperations操作 Hash 类型数据
redisTemplate.opsForList()ListOperations操作 List 类型数据
redisTemplate.opsForSet()SetOperations操作 Set 类型数据
redisTemplate.opsForZSet()ZSetOperations操作 SortedSet 类型数据
redisTemplate通用的命令

对象存储的序列化问题:

1.自动序列化:
将存储对象的序列化器设置为json对象存储,但是存到redis里为了自动转换会将类的全路径同时存入,造成资源大量浪费,不推荐

2.手动序列化:
解决上述问题,一般手动序列化存储的对象,都已string的类型json的格式存入,如下

示例代码:

@Service
public class UserService {

@Autowired
private RedisTemplate<String, String> redisTemplate;

//springboot依赖传递 jackson 里的序列化工具类
@Autowired
private ObjectMapper objectMapper;

public void saveUser(String key, User user) {
    
    // 手动将对象序列化为 JSON 字符串
    String json = objectMapper.writeValueAsString(user);
    redisTemplate.opsForValue().set(key, json);
}

public User getUser(String key) {
    String json = redisTemplate.opsForValue().get(key);
    if (json != null) { 
        // 手动将 JSON 字符串反序列化为对象
        return objectMapper.readValue(json, User.class);
    }
    return null;
}

}

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇