Spring注解方式整合Redis缓存及其五大数据类型常用命令

Spring注解方式整合Redis缓存及其五大数据类型常用命令的使用
摘要由CSDN通过智能技术生成

在这里插入图片描述

Redis

​ ​ redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。

​ redis安装后,在src和/usr/local/bin下有几个以redis开头的可执行文件,称为redis shell。

Redis执行命令 说明
redis-server 启动redis
redis-cli redis命令行工具
redis-benchmark 基准测试工具
redis-check-aof AOF持久化文件检测工具和修复工具
redis-check-dump RDB持久化文件检测工具和修复工具
redis-sentinel 启动redis-sentinel

简述Redis的运行速度为何快?

  • 基于内存操作,手动持久化到硬盘
  • 高效数据结构,数据操作简单
  • 单线程,避开多线程上下文切换的操作
  • 多路I/O复用模型,非阻塞I/O
  • 底层模型不同,底层实现方式及与客户端之间通信的应用协议不一样
  • Redis直接自己构建了VM 机制 ,一般系统调用函数会浪费时间移动和请求

(一)五大数据类型

1、String-字符串

​ ​ String的数据结构为简单动态字符串。是可以修改的字符串,内部结构实现上类似于Java的ArrayList,最大value值为512M,可以包含任何数据,比如jpg图片(生成二进制)或者序列化的对象。

  • 应用场景:计数场景,用户的访问次数、热点文章的点赞转发数量。

  • 常用命令:set,get,strlen,exists,dect,incr,setex

    • set设置键值,使用get获取,使用getset命令获取当前键值并更新value值

      127.0.0.1:6379> set name zhangsan
      OK
      127.0.0.1:6379> get name
      "zhangsan"
      127.0.0.1:6379> getset name lisi
      "zhangsan"
      127.0.0.1:6379> get name
      "lisi"
      
    • strlen命令可获得当前键值对应value值的字节长度

      127.0.0.1:6379> strlen name
      (integer) 4
      
    • incr命令可将 key 中储存的数字值增一,incrby命令可将 key 中储存的数字增加任意数值

      127.0.0.1:6379> incr id
      (integer) 57
      127.0.0.1:6379> incrby id 10
      (integer) 67
      
    • decr命令可将 key 中储存的数字值减一,decrby命令可将 key 中储存的数字减少任意数值

      127.0.0.1:6379> decr id
      (integer) 66
      127.0.0.1:6379> decr by id
      (integer) 56
      
    • exists 命令用于检查给定 key 是否存在,存在为1,不存在为0.

      127.0.0.1:6379> exists name
      (integer) 1
      127.0.0.1:6379> exists na
      (integer) 0
      
    • setex为指定的 key 设置值及其过期时间,ttl命令查看当前时间

      127.0.0.1:6379> setex name 20 zhangsan
      OK
      127.0.0.1:6379> get name
      "zhangsan"
      127.0.0.1:6379> ttl name
      (integer) 11
      127.0.0.1:6379> ttl name
      (integer) 3
      127.0.0.1:6379> get name
      (nil)
      
    • setnx在指定的 key 不存在时,为 key 设置指定的值。

      127.0.0.1:6379> setnx name lisi
      (integer) 1
      127.0.0.1:6379> setnx name liwu
      (integer) 0
      
    • mset命令设置多个键值对,mget命令取多个键值。

      127.0.0.1:6379> mset name lisi sex nan
      OK
      127.0.0.1:6379> mget name sex
      1) "lisi"
      2) "nan"
      
    • append命令追加value值。

      127.0.0.1:6379> append name 123456789
      (integer) 13
      127.0.0.1:6379> get name
      "lisi123456789"
      

2、List-列表

​ ​ 链表是一种非常常见的数据结构,特点是易于数据元素的插入和删除并且且可以灵活调整链表长度,但是链表的随机访问困难。一个存储空间保存多个数据,且通过数据可以体现进入顺序。

  • 应用场景: 发布与订阅、消息队列、慢查询。

  • 常用命令:rpush,lpop,lpush,rpop,lrange、llen

    • rpush添加一个或多个值、lpush在头部添加一个或多个值。

      127.0.0.1:6379> lpush people lida wanger zhangsan
      (integer) 3
      127.0.0.1:6379> rpush people liqi wangba zhangjiu
      (integer) 6
      
    • lindex获得指定索引的元素,lrange获取指定范围的元素。

      127.0.0.1:6379> lindex people 2
      "lida"
      127.0.0.1:6379> lrange people 0 2
      1) "zhangsan"
      2) "wanger"
      3) "lida"
      
    • lpop移出并获取列表的第一个元素、rpop移除并获取列表最后一个元素。

      127.0.0.1:6379> lpop people
      "zhangsan"
      127.0.0.1:6379> rpop people
      "zhangjiu"
      127.0.0.1:6379>
      
    • llen获取当前长度

      127.0.0.1:6379> llen people
      (integer) 4
      

    • lrem移除列表元素

      127.0.0.1:6379> lrem people 1 wanger
      (integer) 1
      127.0.0.1:6379> lrange people 0 5
      1) "lida"
      2) "liqi"
      3) "wangba"
      
    • ltrim保留指定区间内的元素,移除其他所有元素

      127.0.0.1:6379> ltrim people 1 4
      OK
      127.0.0.1:6379> lrange people 0 10
      1) "wanger"
      2) "lisi"
      3) "zhangsan"
      4) "lida"
      
    • linsert在列表的元素前或者后插入元素

      127.0.0.1:6379> linsert people before lisi lier
      (integer) 5
      127.0.0.1:6379> lrange people 0 10
      1) "wanger"
      2) "lier"
      3) "lisi"
      4) "zhangsan"
      5) "lida"
      

3、Hash-哈希

​ ​ hash 类似于 JDK1.8 前的 HashMap,内部实现也差不多(数组 + 链表)。

​ ​ hash 是一个 string 类型的 field 和 value 的映射表,特别适合用于存储对象,后续操作的时候,你可以直接仅仅修改这个对象中的某个字段的值。

  • 应用场景:对象数据存储、电商网站购物车设计与实现。

  • 常用命令:hset,hmset,hexists,hget,hgetall,hkeys,hvals

    • hset将哈希表 key 中的字段 field 的值设为 value 。hget获取存储在哈希表中指定字段的值。

      127.0.0.1:6379> hset student name lisi
      (integer) 0
      127.0.0.1:6379> hget student name
      "lisi"
      
    • hmset将多个 field-value (域-值)对设置到哈希表 key 中、hmget获取所有给定字段的值。

      127.0.0.1:6379> hmset student name zhangsan age 24 sex
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值