Redis 核心:概念理解与五大数据结构

Redis(Remote Dictionary Server)

NoSQL(非关系型数据库)

非关系型数据库的数据是非结构化的 (没有固定的结构)、无关联的 (没有关系的创建和维护)、非sql (没有固定的语法)、事务特性BASE

Redis引入

Redis是一个基于内存的键值型NoSQL数据库。

特征:

  • 键值型,value支持多种不同的数据结构,功能丰富。
  • 单线程,每个命令具备原子性。
  • 低延迟,速度快(基于内存、IO多路复用、良好的编码)。
  • 支持数据的持久化。
  • 支持主从集群、分片集群。
  • 支持多语言客户端。

Redis支持的数据结构

  • 字符串 String
  • 列表 List
  • 集合 Set
  • 有序集合 Sorted Set
  • 哈希 Hash
  • 消息队列 Stream
  • 地理空间 Geospatial
  • HyperLogLog
  • 位图 Bitmap
  • 位域 Bitfield

Redis的使用方式

  • CLI(Command Line Interface) 命令行工具
  • API(Application Programming Interface) 编程语言接口
  • GUI(Graphical User Interface) 图形化界面

Redis优点

  • 性能极高
  • 数据类型丰富,单键值对最大支持512M大小的数据
  • 简单易用,支持所有主流编程语言
  • 支持数据持久化,主从复制,哨兵模式等高可用特性

Redis登录

redis-server启动服务端

redis-cli启动客户端(这里的启动的客户端得到的中文会显示二进制

redis-cli --raw启动客户端(这里启动的客户端得到的中文会显示中文

Redis的Key操作

序号 命令 描述
1 del key 用于在key存在时删除key
2 dump key 序列化给定的key,并返回被序列化的值
3 exists key 检查给定的key是否存在
4 expire key seconds 为给定的key设置过期时间,单位为秒
5 expireat key timestamp 为 key 设置过期时间。接受的时间参数是 UNIX 时间戳(Unix时间戳是从 1970年1月1日00:00:00 UTC 开始计算的秒数)
6 pexpire key milliseconnds 设置key的过期时间以毫秒计
7 pexpireat key milliseconds-timestamp 设置key过期时间的时间戳以毫秒计
8 keys pattrern 查找所有符合给定模式(pattern)的key,比如keys *
9 move key db 将当前数据库的key移动到给定的数据库db中
10 persist key 移出key的过期时间,将key持久保持
11 pttl key 以毫秒为单位返回key的剩余的过期时间
12 ttl key 以秒为单位,返回给定key的剩余生存时间ttl
13 randomkey 从当前数据库中随机返回一个key
14 rename key newkey 修改key的名称
15 renamenx key newkey 当newkey不存在时,将key改名为newkey
16 type key 返回key所储存的值的类型
17 scan n 迭代遍历key,会返回下一个迭代的起始索引和本次迭代的key,n=0,1,2,3,...
18 flushall 删除全部键
19 clear 清空命令行

Redis数据结构

字符串:

序号 命令 描述
1 set key value 设置键值
2 mset key1 value1 key2 value2... 批量设置键值
3 setnx key value 只有当键不存在时设置成功,否则不做任何操作
4 msetnx key1 value1 key2 value2 ... 只有当全部的key都不存在时设置成功,否则不做任何操作
5 setex key seconds value 设置带有过期时间的键,单位s
6 psetex key milliseconds value 设置带有过期时间的键,单位ms
7 get key 得到键值
8 mget key1 key2... 批量获取键值
9 getrange key start end 返回key中字符串值的子字符
10 getset key value 将给定的key的值设为value,并返回key的旧值
11 setrange key offset value 用value参数覆盖所存储的字符串,从offest偏移开始
12 incr key 自增1
13 incrby key n 自增n
14 incribyfloat key n 自增一个小数n
15 decr key 自减1
16 decrby key n 自减n
17 strlen key 返回key所存储的字符串值的长度
18 append key value 将指定字符串追加到key所存储的字符串末尾

列表:

序号1 命令 描述
1 lpush key value1 value2... 将一个或多个值插入到列表头部
2 rpush key value1 value2... 将一个或多个值插入到列表尾部
3 lpushx key value 将一个值插入到已存在的列表头部,列表不存在则操作无效
4 rpushx key value 将一个值插入到已存在的列表尾部,列表不存在则操作无效
5 linsert key before/after value1 value2 在列表的一个元素前或后插入元素,当指定元素不存在于列表则操作无效,当列表不存在时,不执行任何操作。
6 brpoplpush list1 list2 timeout 从list1中取最后一个值,弹出并插入到list2的头部,如果list1为空则阻塞等待timeout直到超时或有元素
7 rpoplpush list1 list2 从list1中取最后一个值,弹出并插入到list2的头部,如果list1为空则返回nil
8 blpop list1 list2... timeout 同时监听一个或多个列表,谁先有元素先从头部弹出并获取,如果没有元素阻塞等待timeout直到超时或有元素
9 brpop list1 list2... timeout 同时监听一个或多个列表,谁先有元素先从尾部弹出并获取,如果没有元素阻塞等待timeout直到超时或有元素
10 lpop key 移除并获取列表的第一个元素
11 rpop key 移除并获取列表的最后一个元素
12 lindex key index 通过索引获取列表中的元素
13 ltrim key start stop 对列表进行修剪,只保留选中区间内的元素
14 lrange key start stop 获取列表指定范围内的元素
15 llen key 获取列表长度
16 lrem key count value count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。 count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。 count = 0 : 移除表中所有与 VALUE 相等的值。
17 lset key index value 通过索引来设置一个列表的值,当索引超出范围时,返回一个错误

集合:

序号 命令 描述
1 sadd key member1 member2 向集合中添加一个或多个成员
2 scard key 获取集合的成员数
3 sdiff key1 key2... 返回第一个集合和其他集合的差集
4 sdiffstore key0 key1 key2... 返回第一个集合和其他集合的差集并存储在key0中
5 sinter key1 key2... 返回给定集合的交集
6 sinterstore key0 key1 key2... 返回给定集合的交集并存储在key0中
7 sunion key1 key2... 返回给定集合的并集
8 sunionstore key0 key1 key2... 返回给定集合的并集并存储在key0中
9 sismember key member 判断集合中是否有member元素
10 smembers key 返回集合中所有成员
11 smove key1 key2 member 将member元素从集合1移动到集合2
12 spop key 移除并返回集合中的一个随机元素
13 srandmember key [count] 返回集合中一个或多个随机元素
14 srem key member1 member2... 移除集合中一个或多个成员
15 sscan key n 迭代遍历集合中的元素

有序集合:

有序集合和集合的区别:有序集合每个元素都会关联一个分数,根据分数大小进行排序。

默认排序从小到大

序号 命令 描述
1 zadd key score1 member1 score2 member2... 向有序集合中添加一个或多个成员,或更新已经存在成员的分数
2 zcard key 获取有序集合的成员数
3 zcount key min max 计算在有序集合中指定分数区间的成员数
4 zlexcount key min max 计算在有序集合中指定字典区间的成员数
5 zrange key start stop 返回有序集合指定区间的成员,分数从低到高
6 zrangebylex key min max 返回有序集合中指定字典区间的成员
7 zrangebyscore key min max 返回有序集合中指定分数区间的成员
8 zrank key member 返回有序集合指定成员的索引
9 zincrby key n member 在有序集合中对指定成员的分数加n
10 zunionstore key0 n key1 key2... 计算给定的n个有序集合的并集并将结果存储在key0中
11 zinterstore key0 n key1 key2... 计算给定的n个有序集合的交集并将结果存储在key0中
12 zrem key member1 member2... 移除有序集合中的一个或多个成员
13 zremrangebylex key min max 移除有序集合中给定字典区间的成员
14 zremrangebyrank key start stop 移除有序集合中给定排名区间的成员
15 zremrangebyscore key min max 移除有序集合中给定分数区间的成员
16 zrevrange key start stop 返回有序集合中指定区间内的成员,分数从高到低
17 zrevrangebyscore 返回有序集合中指定分数区间内的成员,分数从高到低
18 zrevrank key member 返回有序集合中指定成员的排名,分数从高到低
19 zscore key member 返回有序集合中某个成员的分数值
20 zscan key n 迭代遍历有序集合中的元素

哈希Hash:

序号 命令 描述
1 hset key field value 将哈希表key中的字段field的值设为value
2 hsetnx key field value 当field字段不存在时,将哈希表key中的字段field设为value
3 hmset key field1 value1 field2 value2... 批量设置哈希表key中的多个字段field的值为value
4 hget key field 获取哈希表key中的字段field的值
5 hmget key field1 field2... 获取哈希表key中指定的字段的值
6 hgetall key 获取哈希表key中所有的字段和值
7 hkeys key 获取哈希表key中所有的字段
8 hvals key 获取哈希表key中所有的值
9 hdel key field1 field2... 删除哈希表key中一个或多个字段
10 hexists key field 查看哈希表key中,指定的字段是否存在
11 hlen key 获取哈希表key中字段的数量
12 hincrby key field n 为哈希表key中指定字段的整数加上n
13 hincrbyfloat key field n 为哈希表key中指定的浮点数加上小数n
14 hscan key n 迭代遍历哈希表key的键值对
相关推荐
苦藤新鸡2 小时前
39.判断对称二叉树
数据结构·力扣
小冷coding2 小时前
缓存与数据库之间数据一致性的解决方案,核心是解决“缓存数据和数据库数据不一致”的问题
数据库·缓存
新缸中之脑2 小时前
Claude Code:用Hooks自动化
数据库·python·自动化
多米Domi0112 小时前
0x3f 第41天 setnx的分布式锁和redission,白天写项目书,双指针
数据结构·分布式·python·算法·leetcode·缓存
heartbeat..2 小时前
Redis 深度剖析:结构、原理与存储机制
java·数据库·redis·缓存
coding随想2 小时前
Web SQL Database API:一段被时代淘汰的浏览器存储技术
前端·数据库·sql
wWYy.2 小时前
详解redis(14):数据结构Stream
数据库·redis·缓存
知识分享小能手2 小时前
Oracle 19c入门学习教程,从入门到精通,Oracle 表分区与索引分区 —— 语法详解与综合实践(12)
数据库·学习·oracle
翱翔的苍鹰2 小时前
智谱(Zhipu)大模型的流式使用 response.iter_lines() 逐行解析 SSE 流
服务器·前端·数据库