搜索
首页数据库RedisRedis基础知识点有哪些
Redis基础知识点有哪些May 30, 2023 am 09:38 AM
redis

1. 什么是Redis

我们先看看Redis官网给的介绍:

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.

简而言之,Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种数据类型,功能挺强。

2. Redis之父

Redis之父是Salvatore Sanfilippo,一名来自意大利西西里岛的程序员,大家更习惯称呼他Antirez。如果你对他感兴趣,你可以游览他的博客或者追踪他的GitHub。

3. Redis有什么优势

  •  速度快:Redis使用内存来存储数据集,且支持Pipelining命令,可以一次发送多条命令。

  •  持久化:可以把内存中的数据保存在磁盘中,在重启时可重新加载使用。

  •  原子性:所有操作都是原子性的,同时支持事务。

  •  数据结构丰富:支持字符串、列表、哈希、集合及有序集合,满足大多数使用需求。

  •  支持多种语言:Redis支持许多语言,如C、C++、C#、Go、Java、JavaScript、PHP等等。

  •  多种特性:Redis还支持publish/subscribe, 通知, key 过期等特性。

4. Redis能做什么

因为Redis交换数据速度快,所以常在服务器中被用于存储一些需要频繁调取的数据,相比于直接读取磁盘来获得数据,使用Redis可以节省大量时间,提升效率。举个例子:

某视频网站每天有100万人访问首页推荐视频专栏,如果都从数据库查询读取,那么每天都至少要多出100万次数据库查询请求。若使用了Redis,将常被调取的数据存到内存中,每次节约0.1秒,100万次就有10万秒,极大程度提高了速度与开销。

总之,Redis的应用场景十分广泛,且价值极高,现在就开始学学基础。

5. 安装Redis

若想做好工作,就必须先准备好工具;想要学习Redis,那么第一步当然就是安装Redis了。只展示在Windows系统下安装Redis,因为我正在使用Windows操作系统。要尝试Redis,但不想安装它时,您可以使用官方提供的在线测试网站,其中还有简单的介绍和教程。

  •  Windows下安装Redis这里我们下载Redis-x64-3.2.100.zip压缩包文件(如果有更新版本,可以下载最近更新的稳定版本)。

Redis基础知识点有哪些

download

下载好之后解压到自己的文件夹中。例如我解压到D:\redis中。

Redis基础知识点有哪些

unzip

打开一个cmd窗口,使用cd命令切换目录到解压后的文件夹路径(例如我切换目录到D:\redis),然后运行命令:

redis-server.exe redis.windows.conf。

输入之后会显示如下界面:

Redis基础知识点有哪些

redis-server

我们成功启动了 Redis 服务端,如图所示,可看到端口号为 6379 等相关信息。在使用redis服务端时,我们需要在新开一个cmd窗口,同时保持原来的窗口不关闭,否则将无法访问服务端。同样将路径切换到redis目录下,然后运行:

redis-cli.exe -h 127.0.0.1 -p 6379

存入一个键值对:

set firstkey "hello redis"

取出键值对:

get firstkey

关闭连接:

quit

Redis基础知识点有哪些

first_use

我们成功在Windows操作系统下安装了Redis,并且首次体验了Redis的键值对存储模式。

6. Redis数据结构

Redis支持五种数据结构:String(字符串)、Hash(哈希)、List(列表)、Set(集合)以及SortedSet(有序集合)。下面我们简单介绍下每一种数据结构以及他们的基本命令。

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2.  StringString是Redis最基本的数据结构,也是任何存储系统都必备的数据类型。String类型是二进制安全的,简单来说,基本上你什么都能用字符串存储,你可以把图片文件的内容或者序列化的对象作为字符串来存储。String类型的值最大可以存512MB,确实基本什么都够存了。 

> set mykey "hello world"  OK
> gey mykey    "hello world"
> getrange mykey 6 10      "world"      > getrange mykey 0 20      "hello world"      > getrange mykey 0 -1      "hello world"

Tips:从上面几个实例,我们不难看出字符串起始从0开始;若end大于字符串长度时返回完整字符串;而当end为-1时,end为字符串最后一个字符。 

> getset database "mysql"      (nil)      > get database      "mysql"      > getset database "redis"      "mysql"      > get database      "redis"

Tips: 当键未设置时,会返回(nil)。 

> strlen mykey     (integer) 11
> append mykey ", hello redis"    24    >get mykey    "hello world, hello redis"
> set incr_num 10     OK     >get incr_num     "10"     >incr incr_num     (integer) 11
> incrby incr_num 4  (intrger) 15
> incrbyfloat incr_num 0.5   15.5

Tips:整数值会显示为integer,当变为浮点型后并不会提示为float 

> set decr_num 10     OK     > get decr_num     "10"     > decr decr_num     (integer) 9
> decrby decr_num 4     (integer) 5

Tips:redis并没有数字值减少给定浮点值的命令,如果我们想要decr_num减少2.5,可以用incrbyfloat命令执行incrbyfloat decr_num -2.5。   

> incrbyfloat decr_num -2.5        2.5
  •   decrby key decrement:整数值减少给定整数值(decrement)

  •   decr key:整数值-1

  •   incrbyfloat key increment:数字值增加给定浮点值(increment)

  •   incrby key increment:整数值增加给定整数值(increment)

  •    ncr key:整数值+1

  •   append key value:如果可以已存在且是一个字符串,则将指定value添加到原值末尾,会返回操作后字符串长度

  •   strlen key:返回键所存储的字符串值的长度

  •   getset key value:设置指定键的新值,并返回旧值

  •   getrange key start end:返回key中字符串的子串

  •   get key:获取指定键的值

  •   set key value:设置指定键的值

  2.   HashHash存储的是field和value的映射关系,适合用户存储对象。比如要存储一个用户的姓名、年龄、地址等,就可以使用Hash。每个Hash可以存储232>-1个field-value对(4294967295,40多亿)。

> hset myhash name "test"    (integer) 1    > hget myhash name    "NPC"    > hset myhash name "NPC"    (integer) 0

Tips:使用hset命令,新建字段并设置值成功后返回1,如果修改已有字段的值则返回0。

> hmset myhash age "20" country "China"    OK
> hexists myhash name      (integer) 1      > hexists myhash phone      (integer) 0

Tips:哈希表key中含有字段field返回1,不含有或对应key不存在返回0。 

> hmget myhash name age phone     1) "NPC"     2) "20"     3) (nil)
> hgetall myhash     1) "name"     2) "NPC"     3) "age"     4) "20"     5) "country"     6) "China"
> hkeys myhash     1) "name"     2) "age"     3) "country"
> hvals myhash     1) "NPC"     2) "20"     3) "China"
> hlen myhash   3
> hdel myhash age      (integer) 1
  •   hdel key field1:删除哈希表key中一个field

  •   hlen key:获取哈希表key中字段的数量

  •   hvals key:获取哈希表key中所有value

  •   hkeys key:获取哈希表key中所有field

  •   hgetall key:获取哈希表key中所有field-value对

  •   hmget key field1 [field2]:获取哈希表key中所有给定field的value

  •   hexists key field:查看field是否存在于哈希表key中

  •   hmset key field1 value1 [field2 value2]:同时设置哈希表key中的多个field-value对。

  •   hset key field value:设置哈希表中key中field的值为value

  •   hget key field:获取哈希表key中field对应的value

  3.  ListRedis的List类型是简单的字符串列表,在底层实现上相当于一个链表,我们可以在列表的头部(左边)或尾部(右边)添加值。列表最多可以存储232>-1个元素(4294967295,40多亿)。 

> lpush mylist "a" "b"     (integer) 2     > rpush mylist "c" "d"     (integer) 4

Tips:执行lpush和rpush命令后返回列表的长度。

> llen mylist    (integer) 4
> lrange mylist 0 -1    1) "b"    2) "a"    3) "c"    4) "d"    > lrange mylist 1 -2    1) "a"    2) "c"

Tips:由上述例子我们不难看出lrange命令中的start和end参数都是索引值,其中0代表第一个元素,-1表示最后一个元素。 

> lindex mylist 0     "b"
> lpop mylist  "b"  > rpop mylist  "d"
> rpush rem "hello" "hello" "redis" "hello"     (integer) 4     > lrange rem 0 -1     1) "hello"     2) "hello"     3) "redis"     4) "hello"     > lrem rem -2 "hello"     (integer) 2     >lrange rem 0 -1     1) "hello"     2) "redis"

在列表中从左到右搜索,移除数量为count且与value相等的元素。count<0:从右往左搜索列表,移除与value相等的元素,数量为count的绝对值。count=0:移除列表中所有与value相等的元素。

  • lrem key count value:根据count的值,移除列表中与参数value相等的元素

  • lpop key:移除并获取列表头部的值

  • rpop key:移除并获取列表尾部的值

  • lindex key index:通过索引获取列表中元素

  • lrange key start end:获取列表指定范围内的值

  • llen key:获取列表长度

  • lpush key value1 [value2]:将一个或多个值插入到列表头部(左边)

  • rpush key value1 [value2]:将一个或多个值插入到列表尾部(右边)

4. SetSet(集合)存储string类型的值,集合不允许重复元素,但集合里面的元素没有先后顺序。集合中最大的成员数为232>-1(4294967295,40多亿)。

> sadd myset1 "hello" "redis"    (integer) 2    > sadd myset1 "hello"    (integer) 0

Tips:当向集合添加重复成员时,返回0

> scard myset1  2
> smembers myset1    1) "hello"    2) "redis"
> sadd myset2 "hello" "world"    (integer) 2    > sdiff myset1 myset2    1) "redis"    > sdiff myset2 myset1    1) "world"
> sinter myset1 myset2     1) "hello"
> sunion myset1 myset2    1) "hello"    2) "redis"    3) "world"
> sadd myset1 "NPC"     (integer) 1     >spop myset1     "redis"     >smembers myset1     1) "NPC"     2) "hello"
  •   spop key:移除并返回集合中的一个随机元素

  •   sunion key1 [key2]:返回所有给定集合的并集

  •   sinter key1 [key2]:返回所有给定集合的交集

  •   sdiff key1 [key2]:返回所有给定集合的差集

  •   smembers key:返回集合中的所有成员

  •   scard key:获取集合成员数量

  •   sadd key member1 [member2]:向集合添加一个或多个成员

  5.  SortedSet除了无序集合(Set),Redis还提供了有序集合(SortedSet),有序集合不允许重复的成员,且每个不同的成员都关联一个double类型的分数,redis通过这些分数对成员进行从小到大排序。有序集合有时也被称为ZSet,因为其命令都是以字母Z开头的。

> zadd myzset 10 "one" 20 "two" 30 "three"   (integer) 3
> zcard myzset  3
> zscore myzset "one"  10.0
> zrange myzset 0 -1     1) "one"     2) "two"     3) "three"     > zrange myzset 0 -1 withscores     1) "one"     2) 10.0     3) "two"     4) 20.0     5) "three"     6) 30.0     > zrevrange myzset 0 -1 withscores     1) "three"     2) 30.0     3) "two"     4) 20.0     5) "one"     6) 10.0
> zrank myzset "one"    0    >zrank myzset "three"    2    > zrevrank myzset "one"    2    > zrevrank myzset "three"    0
> zcount myzset 15 40    2
> zrange myzset 0 -1 withscores    1) "one"    2) 10.0    3) "two"    4) 20.0    5) "three"    6) 30.0    > zincrby myzset 40 "one"    50.0    > zrange myzset 0 -1 withscores    1) "two"    2) 20.0    3) "three"    4) 30.0    5) "one"    6) 50.0
  •   zincrby key increment member:将指定成员的分数增加increment

  •   zcount key min max:返回分数在min和max之间的成员数量

  •   zrank key member:返回指定成员的排名,从小到大排序

  •   zrevrank key member:返回指定成员的排名,从大到小排序

  •   zrange key start end [withscores]:通过索引start和end从小到大返回成员

  •   zrevrange key start end [withscores]:通过索引start和end从大到小返回成员

  •   zscore key member:返回指定成员的分数

  •   zcard key:获取有序集合的成员数量

  •   zadd key score1 member1 [score2 member2]:向有序集合中添加一个或多个成员,或者更新已有成员分数 

以上是Redis基础知识点有哪些的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:亿速云。如有侵权,请联系admin@php.cn删除
es和redis区别es和redis区别Jul 06, 2019 pm 01:45 PM

Redis是现在最热门的key-value数据库,Redis的最大特点是key-value存储所带来的简单和高性能;相较于MongoDB和Redis,晚一年发布的ES可能知名度要低一些,ES的特点是搜索,ES是围绕搜索设计的。

一起来聊聊Redis有什么优势和特点一起来聊聊Redis有什么优势和特点May 16, 2022 pm 06:04 PM

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了关于redis的一些优势和特点,Redis 是一个开源的使用ANSI C语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式存储数据库,下面一起来看一下,希望对大家有帮助。

实例详解Redis Cluster集群收缩主从节点实例详解Redis Cluster集群收缩主从节点Apr 21, 2022 pm 06:23 PM

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis Cluster集群收缩主从节点的相关问题,包括了Cluster集群收缩概念、将6390主节点从集群中收缩、验证数据迁移过程是否导致数据异常等,希望对大家有帮助。

Redis实现排行榜及相同积分按时间排序功能的实现Redis实现排行榜及相同积分按时间排序功能的实现Aug 22, 2022 pm 05:51 PM

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis实现排行榜及相同积分按时间排序,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,希望对大家有帮助。

详细解析Redis中命令的原子性详细解析Redis中命令的原子性Jun 01, 2022 am 11:58 AM

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了关于原子操作中命令原子性的相关问题,包括了处理并发的方案、编程模型、多IO线程以及单命令的相关内容,下面一起看一下,希望对大家有帮助。

一文搞懂redis的bitmap一文搞懂redis的bitmapApr 27, 2022 pm 07:48 PM

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了bitmap问题,Redis 为我们提供了位图这一数据结构,位图数据结构其实并不是一个全新的玩意,我们可以简单的认为就是个数组,只是里面的内容只能为0或1而已,希望对大家有帮助。

实例详解Redis实现排行榜及相同积分按时间排序功能的实现实例详解Redis实现排行榜及相同积分按时间排序功能的实现Aug 26, 2022 pm 02:09 PM

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis实现排行榜及相同积分按时间排序,本文通过实例代码给大家介绍的非常详细,下面一起来看一下,希望对大家有帮助。

redis error什么意思redis error什么意思Jun 17, 2019 am 11:07 AM

redis error就是redis数据库和其组合使用的部件出现错误,这个出现的错误有很多种,例如Redis被配置为保存数据库快照,但它不能持久化到硬盘,用来修改集合数据的命令不能用。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版