公司网站引导页,建设银行网站怎么登录密码忘了怎么办,南京制作网站公司网站,wordpress模板商业用博客计划 #xff0c;我们从redis开始#xff0c;主要是因为这一块内容的重要性不亚于数据库#xff0c;但是很多人往往对redis的问题感到陌生#xff0c;所以我们先来研究一下。
本篇#xff0c;我们先看一下redis的基础数据类型详解和应用案例。 1.redis概述
以mysql为…博客计划 我们从redis开始主要是因为这一块内容的重要性不亚于数据库但是很多人往往对redis的问题感到陌生所以我们先来研究一下。
本篇我们先看一下redis的基础数据类型详解和应用案例。 1.redis概述
以mysql为代表的数据库相信很多人都非常熟悉这是数据持久化存储的最佳方式。但是在更新频繁或者访问强度高的场景下数据库的性能捉襟见肘这时候我们使用Redis作为缓存更加合适。缓存是redis最主要的功能此外redis还在分布式锁、异步消息队列等方面有重要应用。
Redis 是一个开源的在内存中存储数据的结构化键值数据库它支持多种类型的数据结构如字符串、列表、集合、哈希、有序集合等。此外Redis还支持事务、持久化、LUA脚本、LRU清除、自动故障转移等功能。
Redis特点
性能高效Redis能读的速度是110000次/s写的速度是81000次/s因此被广泛应用于缓存场景。支持多种数据类型Redis支持最常见的数据类型为复杂的应用提供了广泛的可能性。数据持久化Redis可以将数据保存在磁盘上重启后可以再次加载进行使用。支持消息队列Redis还可以用作消息队列使用它提供了发布/订阅等相关功能。支持事务Redis支持事务可以一次执行多个命令中间不会被其他命令插入。高可用和分布式通过Redis的Sentinel系统和Cluster集群模式可以构建高可用、分布式的Redis系统。
redis安装与启动方法
在linux或者mac下安装redis是非常容易的我们可以先下载redis的源码然后make安装即可不过Redis是用C语言实现的要想编译需要提前安装gcc等工具。编译redis的基本过程是
wget http://download.redis.io/releases/redis-5.0.3.tar.gz
tar xzf redis-5.0.3.tar.gz
cd redis-5.0.3
make
如果没有安装wget使用curl等工具也是可以的。
之后启动redis服务端的命令如下
src/redis-server这样就成功启动了Redis服务器。要连接到这个服务器可以打开另一个终端窗口然后输入 src/redis-cli
不过这样的话使用的时候需要先定位到安装位置比较麻烦为了方便使用我们可以将上述地址配置到环境变量里这样使用时只需要输入下面的命令即可
redis-cli
如图所示 这样我们就可以开心地使用Redis了。
2.Redis基础数据类型
在运行起来redis之后接下来我们的重点就是熟悉redis提供给我们的五种典型的数据结构不同结构是针对不同的应用场景我们这里分别介绍这几种结构的特征、用法、应用案例等等。对于用法所有的结构我们需要掌握的无非是“增删改查“以及判断长度、有无等等。
在工作中我们一般通过java代码来调用redis提供的api接口来间接管理redis但是这样比较繁琐我们在后面会详细介绍如何使用这些api工具这里我们先使用redis-cli来快速掌握redis相关的命令。
2.1 感受一下redis命令
在介绍redis的数据类型之前我们先来感受一下如何通过命令来操作redis。redis命令的基本格式是 KEYS pattern pattern是通配符这个与sql语言里的字符串匹配等是一样的 常见的有
符号含义?匹配一个字符*匹配人任意个(包括0个)字符[]匹配括号间的任一字符可以使用-表示范围例如a[b-d]可以匹配ab、ac、ad这几种情况\x匹配字符x用于转义符号。如要匹配?就要使用“\?”
在打开redis-cli的窗口里我们首先建立第一个键
set haitao 1然后再输入:
KEYS *此时的截图由于我之前还有其他操作内容会多一些 如果我们想判断某个键是否存在直接输入如下命令“exists haitao”即可 如果返回结果是1表示存在如果是0表示不存在。
如果想删除某个键 使用“del key”命令即可而且还可以删除多个键后面返回的参数就是实际删除的键的个数示例如下 另外我们还可以获取一下键的类型常见的类型就是前面提到的五大类型string(字符串类型)、hash(散列类型)、list(列表类型)、set(集合类型)、zset(有序集合)例如 2.2 字符串类型
String类型是Redis最基础的数据类型是二进制安全的。它可以包含任何数据例如jpeg图片或者序列化的对象或者就简单的文本数据。String类型的value最大能存储512MB的数据。
字符串类型是其他4种数据类型的基础其他数据类型和字符串类型的差别其实主要是组织字符串的方式不同例如列表类型就是以列表的形式组织字符串等等。我们在后面会详细分析这几种数据类型的底层结构会对此有更加深入的理解。
接下来我们看一下字符串操作的常见命令。
1.SET
SET命令用于设置指定键的值如果键已经存在则覆盖旧的值。
SET name haitao
执行结果OK。命令执行成功则返回OK。
2.GET
GET命令用于获取指定键的值。
GET name
执行结果haitao。如果键存在则返回其对应的值否则返回nil。 3.INCR
INCR命令用于将指定键的值增加1。如果键不存在那么在操作前会先将其设置为0然后再执行加1操作。
SET counter 100
INCR counter
执行结果101。INCR命令返回执行操作后的值。
4. DECR
DECR命令用于将指定键的值减少1。同样如果键不存在那么在操作前会先将其设置为0然后再执行减1操作。
DECR counter
执行结果100。DECR命令返回执行操作后的值。
应用举例
在这里我们就想到redis的一种典型应用了统计计数。例如我们想统计课程直播间实时在线人数就可以使将数据先写到redis里也就是
set student_counter 100
redis里的数据不像数据表一样相互之间独立而是都在一个空间里而在实际中我们同时上课的直播间不止一个我们可能还要统计某个直播间最高观看人数、当前在线人数、平均人数等等所以我们会通过增加前缀的方式来区分例如我们的规则是统计的时候每个键按照如下规则设置 科目Id_统计类型 人数 例如采取如下的方式就可以将各个业务的数据都存放起来了
set math:101:max_student 100
set math:101:cur_student 50
set math:101:avg_student 60set english:102:max_student 80
set english:102:cur_student 50
set english:102:cur_student 40
正因为字符串的这个功能我们还可以用来统计文章的访问量、课程的热度等等。另外我们可以还在微服务场景下还可以redis来生成全局唯一的自增Id等重要功能。
2.3 List类型
List类型是Redis的一种复杂的数据类型也是Redis的重要特性之一。Redis的List类型实际上是一个双向链表所以添加一个新的元素到List的头部或者尾部的复杂度是O(1)。同时由于采用链表实现可以利用索引下标来获取元素或者进行范围查询这个操作的复杂度是O(N)。
如果list中存储的元素非常多我们可以想象到要获取首尾的元素仍然非常快而要获取中间位置的元素则非常慢。这就决定了list适合处理”新鲜事、最新消息、最新评论、最新留言“这类的问题 例如在一个即时通讯应用中我们一般都更关心最新的消息因此可以使用List类型存储聊天记录每次发送的消息都会添加到List中。 命令示例
LPUSH chat:room1 Hello
LPUSH chat:room1 How are you?
LRANGE chat:room1 0 -1 这里的L就是left左侧的意思一般理解为队列的头部对应的还有个R就是right右侧的意思第对应的就是队列的尾部。push就是放入的意思pop就是弹出元素的意思。通过不同的组合我们可以构造出非常丰富的功能
1. LPUSH
LPUSH命令用于将一个或多个值插入到列表头部
LPUSH mylist World
LPUSH mylist Hello执行结果2。
LPUSH命令返回此时列表的长度。
执行命令
LRANGE mylist 0 -1
查看列表结果为 127.0.0.1:6379 LRANGE mylist 0 -1 1) Hello 2) World 2. RPUSH
RPUSH命令用于将一个或多个值插入到列表的尾部
RPUSH mylist Redis执行结果3。RPUSH命令返回此时列表的长度。
执行LRANGE mylist 0 -1命令查看列表结果为 1) Hello 2) World 3) Redis 3. LPOP
LPOP命令用于移除并返回列表的第一个元素
LPOP mylist执行结果Hello。LPOP命令返回被移除的元素的值。
执行LRANGE mylist 0 -1命令查看列表结果为 1) World 2) Redis 4. RPOP
RPOP命令用于移除并返回列表的最后一个元素 RPOP mylist 执行结果Redis。RPOP命令返回被移除的元素的值。
执行LRANGE mylist 0 -1命令查看列表结果为1) World
以上即为Redis List类型的常用命令示例以及它们的执行结果。
2.4 Set类型
Set类型也是Redis的一种复杂数据类型它是一种无序的、元素不重复的集合。由于集合中的元素是唯一的所以可以使用Set类型来存储一些集合元素并进行交集、并集、差集等操作。
对于set的应用最典型的是记录社交网络中的用户之间的关系可以使用Set类型存储用户的好友列表以便进行好友关系的管理。 命令示例
SADD user:1:friends user:2
SADD user:1:friends user:3
SMEMBERS user:1:friends可以看到此时可以找到user1的两个朋友user2和user3。同样在线培训系统中老师与课程、课程与学生、老师与学生一般都是多对多的复杂关系我们可以采用上面方式来轻松记录。
常用命令示例
1. SADD:
SADD命令用于向集合添加一个或多个成员。
SADD myset Hello
SADD myset World执行结果1。SADD命令返回添加成功的元素数量。
执行SMEMBERS myset命令查看集合结果为 1) Hello 2) World 2. SREM:
SREM命令用于移除集合中一个或多个成员。
SREM myset World
执行结果1。SREM命令返回移除成功的元素数量。
执行SMEMBERS myset命令查看集合结果为
1) Hello
3. SISMEMBER:
SISMEMBER命令用于判断成员元素是否是集合的成员。
SISMEMBER myset World
SISMEMBER myset Hello执行结果0 和 1。SISMEMBER命令返回元素是否在集合中0表示不在1表示在。
2.5 Hash类型
Hash类型是Redis的一种复杂数据类型它相当于一种简单的二级字典第一级的key对应一个新的字典这个新的字典就是Hash的内部结构拥有自己的key-value对。Hash类型适合用于存储对象。
Hash结构虽然略复杂但确是我们使用redis进行缓存的核心结构因为缓存的内容我们经常需要根据键来快速获取某个特定的对象。例如某个网站需要存储用户的个人信息可以使用Hash类型存储用户的姓名、年龄、性别等字段。 命令示例
HSET user:1 name haitao
HSET user:1 age 25
HSET user:1 gender Male
HGETALL user:1常用命令示例
1. HSET:
HSET命令用于为哈希表中的字段赋值。
HSET myhash field1 Hello
HSET myhash field2 World执行结果1。HSET命令返回操作成功的数量。
执行HGETALL myhash命令查看哈希表结果为 1) field1 2) Hello 3) field2 4) World 2. HGET:
HGET命令用于获取存储在哈希表中指定字段的值。
HGET myhash field1
执行结果Hello。HGET命令返回字段的值。
3. HGETALL:
HGETALL命令用于获取在哈希表中指定key的所有字段和值。
HGETALL myhash2.6 Sorted Set类型
Sorted Set是Redis的一种复杂数据类型也是集合的一种能够存储一组数据并且每个数据都有一个得分。数据是唯一的但是得分(score)可以重复。集合是通过哈希表实现的所以添加删除查找的复杂度都是O(1)。而得分的值是通过跳跃表来进行排序的。
有序set最典型的场景是热榜例如微博可以使用Sorted Set类型存储热门新闻的排名以便展示热门文章在培训系统中可以根据点击量来判断哪些课时或者内容更受欢迎等等。命令示例
ZADD news:popular 1000 Article1
ZADD news:popular 800 Article2
ZADD news:popular 600 Article3
ZREVRANGE news:popular 0 -1 WITHSCORES常用命令示例
1. ZADD:
ZADD命令用于向有序集合添加一个或多个成员或者更新已存在成员的分数。
ZADD myzset 1 one
ZADD myzset 2 two 3 three执行结果1。ZADD命令返回被成功添加的新成员的数量。
执行
ZRANGE myzset 0 -1 WITHSCORES
命令查看有序集合结果为 127.0.0.1:6379 ZRANGE myzset 0 -1 WITHSCORES 1) one 2) 1 3) two 4) 2 5) three 6) 3 2. ZSCORE:
ZSCORE命令返回有序集中成员的分数值。
ZSCORE myzset one执行结果1。ZSCORE命令返回成员的分数值。
3. ZRANGE:
ZRANGE命令用于返回有序集中指定区间内的成员。
ZRANGE myzset 0 -1本文我们介绍了redis最重要的五种数据类型的特征、使用方法和典型应用场景为我们后面的学习打下坚实的基础