在什么网站做推广最好,网站建设是啥工作,pc网站开发语言,阿里巴巴做网站营销有没有用文章目录 1. string2. list3. hash4. set5. sorted set 你可以自己本机安装 redis 或者通过 redis 官网提供的在线 redis 环境。 1. string 介绍 #xff1a;string 数据结构是简单的 key-value 类型。虽然 Redis 是用 C 语言写的#xff0c;但是 Redis 并没有使用 C 的字符串… 文章目录 1. string2. list3. hash4. set5. sorted set 你可以自己本机安装 redis 或者通过 redis 官网提供的在线 redis 环境。 1. string 介绍 string 数据结构是简单的 key-value 类型。虽然 Redis 是用 C 语言写的但是 Redis 并没有使用 C 的字符串表示而是自己构建了一种 简单动态字符串simple dynamic stringSDS。相比于 C 的原生字符串Redis 的 SDS 不光可以保存文本数据还可以保存二进制数据并且获取字符串长度复杂度为 O(1)C 字符串为 O(N),除此之外,Redis 的 SDS API 是安全的不会造成缓冲区溢出。 常用命令: set,get,strlen,exists,dect,incr,setex 等等。 应用场景 一般常用在需要计数的场景比如用户的访问次数、热点文章的点赞转发数量等等。 作业 去深入探究 sds的结构
下面我们简单看看它的使用
普通字符串的基本操作
127.0.0.1:6379 set key value #设置 key-value 类型的值
OK
127.0.0.1:6379 get key # 根据 key 获得对应的 value
value
127.0.0.1:6379 exists key # 判断某个 key 是否存在
(integer) 1
127.0.0.1:6379 strlen key # 返回 key 所储存的字符串值的长度。
(integer) 5
127.0.0.1:6379 del key # 删除某个 key 对应的值
(integer) 1
127.0.0.1:6379 get key
(nil)批量设置 :
127.0.0.1:6379 mset key1 value1 key2 value2 # 批量设置 key-value 类型的值
OK
127.0.0.1:6379 mget key1 key2 # 批量获取多个 key 对应的 value
1) value1
2) value2计数器字符串的内容为整数的时候可以使用
127.0.0.1:6379 set number 1
OK
127.0.0.1:6379 incr number # 将 key 中储存的数字值增一
(integer) 2
127.0.0.1:6379 get number
2
127.0.0.1:6379 decr number # 将 key 中储存的数字值减一
(integer) 1
127.0.0.1:6379 get number
1过期
127.0.0.1:6379 expire key 60 # 数据在 60s 后过期
(integer) 1
127.0.0.1:6379 setex key 60 value # 数据在 60s 后过期 (setex:[set] [ex]pire)
OK
127.0.0.1:6379 ttl key # 查看数据还有多久过期
(integer) 562. list
介绍 list 即是 链表。链表是一种非常常见的数据结构特点是易于数据元素的插入和删除并且且可以灵活调整链表长度但是链表的随机访问困难。许多高级编程语言都内置了链表的实现比如 Java 中的 LinkedList但是 C 语言并没有实现链表所以 Redis 实现了自己的链表数据结构。Redis 的 list 的实现为一个 双向链表即可以支持反向查找和遍历更方便操作不过带来了部分额外的内存开销。常用命令: rpush,lpop,lpush,rpop,lrange、llen 等。应用场景: 发布与订阅或者说消息队列、慢查询。
下面我们简单看看它的使用
通过 rpush/lpop 实现队列
127.0.0.1:6379 rpush myList value1 # 向 list 的头部右边添加元素
(integer) 1
127.0.0.1:6379 rpush myList value2 value3 # 向list的头部最右边添加多个元素
(integer) 3
127.0.0.1:6379 lpop myList # 将 list的尾部(最左边)元素取出
value1
127.0.0.1:6379 lrange myList 0 1 # 查看对应下标的list列表 0 为 start,1为 end
1) value2
2) value3
127.0.0.1:6379 lrange myList 0 -1 # 查看列表中的所有元素-1表示倒数第一
1) value2
2) value3通过 rpush/rpop 实现栈
127.0.0.1:6379 rpush myList2 value1 value2 value3
(integer) 3
127.0.0.1:6379 rpop myList2 # 将 list的头部(最右边)元素取出
value3如下图来理解 通过 lrange 查看对应下标范围的列表元素
127.0.0.1:6379 rpush myList value1 value2 value3
(integer) 3
127.0.0.1:6379 lrange myList 0 1 # 查看对应下标的list列表 0 为 start,1为 end
1) value1
2) value2
127.0.0.1:6379 lrange myList 0 -1 # 查看列表中的所有元素-1表示倒数第一
1) value1
2) value2
3) value3通过 lrange 命令你可以基于 list 实现分页查询性能非常高
通过 llen 查看链表长度
127.0.0.1:6379 llen myList
(integer) 33. hash
介绍 hash 类似于 JDK1.8 前的 HashMap内部实现也差不多(数组 链表)。不过Redis 的 hash 做了更多优化。另外hash 是一个 string 类型的 field 和 value 的映射表特别适合用于存储对象后续操作的时候你可以直接仅仅修改这个对象中的某个字段的值。 比如我们可以 hash 数据结构来存储用户信息商品信息等等。常用命令 hset,hmset,hexists,hget,hgetall,hkeys,hvals 等。应用场景: 系统中对象数据的存储。
下面我们简单看看它的使用
127.0.0.1:6379 hset userInfoKey name guide description dev age 24
OK
127.0.0.1:6379 hexists userInfoKey name # 查看 key 对应的 value中指定的字段是否存在。
(integer) 1
127.0.0.1:6379 hget userInfoKey name # 获取存储在哈希表中指定字段的值。
guide
127.0.0.1:6379 hget userInfoKey age
24
127.0.0.1:6379 hgetall userInfoKey # 获取在哈希表中指定 key 的所有字段和值
1) name
2) guide
3) description
4) dev
5) age
6) 24
127.0.0.1:6379 hkeys userInfoKey # 获取 key 列表
1) name
2) description
3) age
127.0.0.1:6379 hvals userInfoKey # 获取 value 列表
1) guide
2) dev
3) 24
127.0.0.1:6379 hset userInfoKey name GuideGeGe # 修改某个字段对应的值
127.0.0.1:6379 hget userInfoKey name
GuideGeGe4. set
介绍 set 类似于 Java 中的 HashSet 。Redis 中的 set 类型是一种无序集合集合中的元素没有先后顺序。当你需要存储一个列表数据又不希望出现重复数据时set 是一个很好的选择并且 set 提供了判断某个成员是否在一个 set 集合内的重要接口这个也是 list 所不能提供的。可以基于 set 轻易实现交集、并集、差集的操作。比如你可以将一个用户所有的关注人存在一个集合中将其所有粉丝存在一个集合。Redis 可以非常方便的实现如共同关注、共同粉丝、共同喜好等功能。这个过程也就是求交集的过程。常用命令 sadd,spop,smembers,sismember,scard,sinterstore,sunion 等。应用场景: 需要存放的数据不能重复以及需要获取多个数据源交集和并集等场景
下面我们简单看看它的使用
127.0.0.1:6379 sadd mySet value1 value2 # 添加元素进去
(integer) 2
127.0.0.1:6379 sadd mySet value1 # 不允许有重复元素
(integer) 0
127.0.0.1:6379 smembers mySet # 查看 set 中所有的元素
1) value1
2) value2
127.0.0.1:6379 scard mySet # 查看 set 的长度
(integer) 2
127.0.0.1:6379 sismember mySet value1 # 检查某个元素是否存在set 中只能接收单个元素
(integer) 1
127.0.0.1:6379 sadd mySet2 value2 value3
(integer) 2
127.0.0.1:6379 sinterstore mySet3 mySet mySet2 # 获取 mySet 和 mySet2 的交集并存放在 mySet3 中
(integer) 1
127.0.0.1:6379 smembers mySet3
1) value25. sorted set
介绍 和 set 相比sorted set 增加了一个权重参数 score使得集合中的元素能够按 score 进行有序排列还可以通过 score 的范围来获取元素的列表。有点像是 Java 中 HashMap 和 TreeSet 的结合体。常用命令 zadd,zcard,zscore,zrange,zrevrange,zrem 等。应用场景 需要对数据根据某个权重进行排序的场景。比如在直播系统中实时排行信息包含直播间在线用户列表各种礼物排行榜弹幕消息可以理解为按消息维度的消息排行榜等信息。https://blog.csdn.net/qq_38545713/article/details/105439688
127.0.0.1:6379 zadd myZset 3.0 value1 # 添加元素到 sorted set 中 3.0 为权重
(integer) 1
127.0.0.1:6379 zadd myZset 2.0 value2 1.0 value3 # 一次添加多个元素
(integer) 2
127.0.0.1:6379 zcard myZset # 查看 sorted set 中的元素数量
(integer) 3
127.0.0.1:6379 zscore myZset value1 # 查看某个 value 的权重
3
127.0.0.1:6379 zrange myZset 0 -1 # 顺序输出某个范围区间的元素0 -1 表示输出所有元素
1) value3
2) value2
3) value1
127.0.0.1:6379 zrange myZset 0 1 # 顺序输出某个范围区间的元素0 为 start 1 为 stop
1) value3
2) value2
127.0.0.1:6379 zrevrange myZset 0 1 # 逆序输出某个范围区间的元素0 为 start 1 为 stop
1) value1
2) value2