#对于Java一直再进行学习,但是从未将每人的学习总结下来导致学了忘,忘了学,昨天看到一个博主介绍了一个方法说可以将自己的体会写下来,决定从今天开始试一试#

1.redis常用数据结构(在redis中有八种原生数据结构,但作为小白平常学的就是五种基础数据结构,甚至只有string数据结构,在这里就分享一下最近复盘总结的对于五种常见数据结构的理解把)

string(字符串)

也是最基础的一种数据类型,在平常使用中的常用场景是单值缓存和对象缓存

SET key valueGET key

对象缓存

SET user:1001 '{"id":1001,"name":"张三","age":30,"email":"zhangsan@example.com"}' EX 3600

第一种方式就是在我们将对象存储为json格式数据,但是当我们需要对对象中的一个值进行修改时会非常的麻烦,第二种方式就比较友好,同时第一种方式在反序列化时也需要花费大量事件

Hash

hash存储形式的存储结构类似于key-filed-value,类似于Java中的hashmap

HSET user:1001 name "张三" age 28 email "zhangsan@example.com" status "active"

redis使用hash的优缺点

使用hash将同类数据归属于一个key方便管理,但是过期功能只能使用与key而非filed,同时在集群架构下不适于使用大量使用hash结构

List结构

redis的List是一种有序的字符串集合,允许对List集合的两头进行操作,底层使用双向链表,非常适合实现队列,栈,消息列表等,在List集合中元素有序且可重复,允许从两头插入和删除元素,通过索引访问元素,底层自动优化存储

LPUSH key val 向列表左侧添加元素
RPUSH key val 向列表右侧添加元素
LPOP key 从列表左侧删除并返回元素
RPOP key 从列表右侧删除并返回元素
LRANGE key start end 获取指定范围的元素(0 为头,-1 为尾)
LLEN key 获取列表长度

实际应用场景比如说当我微博关注了一个博主,那么当这个博主发布新闻时,会将该信息的id进行push,当我登录之后我从队列的前几条数据获取到id并查询到详细信息

Set

redis的set是一种无序字符串集合,实现了自动去重,适用于无序但需快速判断的场景

SADD tags:article:1001 "技术" "编程" "Redis"  # 给文章1001添加标签
SADD tags:article:1001 "技术"  # 重复添加"技术",无效果

比如说我们常见的抽奖功能就能使用set集合进行实现,当我们参与抽奖就是将用户id存入这个集合,当我们查看全部参与抽奖的用户就是查看这个set集合的全吧数据,当我们选出几名用户抽奖,就是从set集合取出n条数据,因为set是无序的,所以抽出的数据也是无序的,同时我们还可以对set集合进行交集,差集,并集等运算

Zset

简单来说就是有序的set集合,底层通过跳表和hash表实现,哈希实现了元素唯一,跳表实现了元素有序

ZADD ranking:game 85 "玩家A"  # 玩家A得分85
ZADD ranking:game 92 "玩家B"  # 玩家B得分92
ZADD ranking:game 78 "玩家C"  # 玩家C得分78
ZADD ranking:game 92 "玩家D"  # 允许相同分数(玩家D也得92分)

比如说我们某些软件的热搜功能可以使用Zset数据结构进行实现,我们可以对于数据按点击量进行排序

以上是我对于redis简单数据类型的一个简单总结,其实就算是这些数据类型展开讲每一个可以说的都太多太多。路漫漫其修远兮,吾将上下而求索。有一个博主说的很好,通过输出倒逼输入,希望自己可以坚持下来,无名大学生的一员

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐