Redis基础知识-基于《Redis深度历险》

目录

Redis基础介绍

用途

Redis 5种基本数据类型

string

list

hash

set

zset

总结


上一篇博客已经介绍了Redis的安装与集群, 但是安装好了应该怎么使用呢?? 接下来简单介绍下Redis的使用      

Redis基础介绍

用途

关于Redis的介绍, 查看上一篇博客内容, 这块我们主要来看看Redis可以用在那些方面

  • 缓存用户信息
  • 如果ID是整数自增的话, 那么可以通过Redis来实现
  • 缓存广告访问信息
  • 消息队列
  • 统计访问网站的独立IP

等等。。。

当然还有很多方面的应用, 不过在数据访问不大的情况下,程序一般都是直接访问数据库,只有在数据访问高的时候, 一些数据就必须放在Redis中, 提高访问的速率。

Redis 5种基本数据类型

Redis中可以存放5种类型, 分别是:string(字符串),list(列表),hash(字典),set(集合)和zset(有序集合), 这5中类型是Redis中的基础, 也是Redis中最重要的

string

string是Redis中最简单, 最基本的类型,如下, string的内部是一个可以修改的字符数组

HELLOWORLD

相当于Java中的ArrayList, 采用预分配冗余空间的方式来减少频繁的分配空间。 且内部分配空间的实际长度capacity大于字符串的实际长度, 当需要扩容分配空间时

  1. 当当前字符串的实际长度 < 1MB时, 扩容当前一倍的空间
  2. 当当前字符串的实际长度 > 1MB时, 每次扩容1MB的空间

注意: string类型最大长度为512M

反思: Java中 ArrayList 是怎么扩容的呢??

string最常用的是存放用户信息, 将用户信息通过JSON序列化为字符串, 将之存放到Redis中, 当然取信息的时候多一个反序列化的过程

【键值对】

【批量键值对】

mget得到的是一个字符串集合

【过期时间和set的扩展】

【计数】

如果value是一个整数, 可以对它进行自增/自减, 计数会有一个范围在signed long的最大和最小之间, 超出这个范围会出错

 更多相关的命令:https://redis.io/commands

list

list相当于Java中的LinkedList, 所以list在插入/删除的效率很高, 时间复杂度为(1), 但是在索引检索方面的效率很低, 时间复杂度为O(n)。 并且list设置了双向指针顺序, 支持前向后向来遍历list, 如下  (不专业画图30年)

list常用于处理异步队列, 将需要延后处理的任务消息体序列成字符串, 然后塞进list中, 另一个线程通过轮询的方式处理消息

【右进左出:队列】

队列是一种先进先出的数据结构, 常用于消息队列处理, 异步逻辑处理, 保证了数据访问顺序的一致性

 

【右进右出:栈】

栈是一种先进后出的一种数据结构

当list中的最后一个元素被取出, 该数据结构被删除, 内存被回收

hash

 hash 可以理解为Java中的HashMap, 也是数组+链表的形式。 不一样的是Redis中的hash都是字符串, 而且它们rehash的方式不一样

Java: HashMap在字典很大时,需要一次性全部加载出来(rehash是一个耗时性操作)

Redis: hash为了提高性能, 不堵塞服务, 所以采用渐进式rehash策略

什么是渐进式rehash策略?

渐进式rehash在rehash的同时, 保留新旧两个hash的结构, 然后会同时查询两个hash结构, 然后在后续的定时任务以及hash操作的过程中, 循序渐进的将旧hash的内容一点点的搬迁到新的hash中, 搬迁完成后, 新的hash就会替代旧的hash结构

hash 可以用在保存用户信息, 将用户每个信息单独存储, 可以避免网络流量的浪费。 同单独存储字符串之间的差距在于:存储消耗要高于单个字符串

set

 set 集合相当与Java中的HashSet, 内部键值对都是无序, 唯一的,并且set中是不允许存在重复元素

zset

zset 相当于Java中SortedSet + HashMap, 一方面set的属性, 另一方面,它可以给每个value设置score, 代表这个value的排序权重

总结

 关于list,set,hash, zset有一下两点共同点

  • 如果容器不存在, 就创建一个再进行操作
  • 如果容器没有元素, 就立即删除容器, 释放内存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值