Redis基础知识点有哪些

52次阅读
没有评论

共计 7020 个字符,预计需要花费 18 分钟才能阅读完成。

本篇内容介绍了“Redis 基础知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

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 系统,就只演示 Windows 下安装 Redis。如果你不想安装 Redis,但想体验一番,可以去官网提供的在线测试网站,里面也附有简单的介绍和教程。

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

download

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

unzip

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

redis-server.exe redis.windows.conf。

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

redis-server

这样我们就打开了一个 redis 服务端,从图中我们可以看到一些信息,比如端口号为 6379。如果要使用 redis 服务端,我们需要再打开一个 cmd 窗口,原来的不要关闭,不然就不能访问服务端了。同样将路径切换到 redis 目录下,然后运行:

redis-cli.exe -h 127.0.0.1 -p 6379

存入一个键值对:

set firstkey  hello redis

取出键值对:

get firstkey

关闭连接:

quit

first_use

这样我们就完成了 Redis 在 Windows 下的安装并初次体验了 Redis 的 key-value 存储方式。

6. Redis 数据结构

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

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

 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 0:从左往右搜索列表,移除与 value 相等的元素,数量为 count。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 基础知识点有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-15发表,共计7020字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)