Redis学习记录(1)

一、前置知识

为什么会出现Redis

二、安装Redis

三、Redis的基本使用

1、Redis支持的数据类型

Redis中有许多数据类型,常见的有String(字符串)、Hashes(散列)、lists(列表)、sets(集合)、sorted sets(有序集合)、bitmap(位图)、 hyperloglogs 和 geospatial(地理空间)
在使用Redis之前,我们需要知道Redis的key是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如”foo”的简单字符串到一个JPEG文件的内容都可以。因为key本身就是byte数组没有任何编码。同时对于key的使用也有一些小建议

  • 太长的键值不是个好主意,例如1024字节的键值就不是个好主意,不仅因为消耗内存,而且在数据中查找这类键值的计算成本很高。
  • 太短的键值通常也不是好主意,如果你要用”u:1000:pwd”来代替”user:1000:password”,这没有什么问题,但后者更易阅读,并且由此增加的空间消耗相对于key object和value object本身来说很小。
  • 最好坚持一种模式。例如:”object-type🆔field”就是个不错的注意,像这样”user:1000:password”。我喜欢对多单词的字段名中加上一个点,就像这样:”comment🔢reply.to”。

翻译自官网

1.1、String

(1)首先先学习一下最常见的类型String,String作为最基本的类型同时也是使用较多的类型。Redis中的String底层是基于byte[] (字节数组)。下面我们整理一下Redis中的String类型包含有哪些命令在这里插入图片描述

(完整:http://redis.cn/commands.html#string
这里需要注意的是INCR:执行原子+1操作,在我们常规认识中字符串类型是不能做加1,例如“1”+1 应该是“11”,但是在Redis中会变成2。所以我们猜测Redis是将我们存入的“18”改了“数据类型”从字符串转成了整数类型。那么事实是否这样呢?
在这里插入图片描述

在Redis中有这么两个命令type 和OBJECT encoding用于获取value的类型已经编码。例如我们现在重新创建一个key money,value = 100
在这里插入图片描述

所以这里给出一个结论,在Redis中key和value是如下图的形式存储的。

(2)应用场景
String类型的应用场景还是非常多的,对于简单系统来说甚至可以只使用String类型来充当缓存。(毕竟可以将对象转成JSON字符串)。当然除了get/set之外,INCR和DECR也是们经常使用的。
DECR(减少1)有一个很经典的使用场景:预减库存。例如在电商业务的秒杀场景,我们就可以利用Redis的DECR来做预减库存来减少数据库的压力,即优先减少Redis中的数量,当Redis中的数量为0时表示秒杀完毕之后再多的请求都拒绝,从而能够大幅度的减少数据库层面的压力。

1.2、Lists

1、Redis中的List底层是Linked List(链表),所以在Redis的List在头尾部插入的效率是非常高的,时间复杂度为O(1)。常用的命令如下
image.png
注意点:redis中的list的最大长度为 2^32 - 1 (4,294,967,295)
2、使用场景
Redis中的List可以用于构建一些类似栈(先入后出)、队列等功能,同时也List也提供了阻塞的功能

Lists support several blocking commands. For example:

  • BLPOP removes and returns an element from the head of a list. If the list is empty, the command blocks until an element becomes available or until the specified timeout is reached.
  • BLMOVE atomically moves elements from a source list to a target list. If the source list is empty, the command will block until a new element becomes available.

列表支持多个阻塞命令。例如:
BLPOP从列表的头部删除并返回一个元素。如果列表为空,则命令会阻塞,直到元素变为可用或到达指定的超时。
BLMOVE将元素从源列表原子地移动到目标列表。如果源列表为空,该命令将阻塞,直到有新元素可用。

1.3、Sets

1、Redis中的Set是无序集合,同时带有去重功能。常用的命令如下
image.png

注意点:Redis集合的最大大小是2^32 - 1(4,294,967,295),大多数集合操作,包括添加、删除和检查项是否为集合成员,都是O(1)。但是,对于具有数十万元素或更多元素的大型集合,在运行members命令时应该谨慎。这个命令是O(n),在一个响应中返回整个集合。作为一种替代方案,可以考虑SSCAN。

四、未完待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值