0
点赞
收藏
分享

微信扫一扫

最适合新手的 Redis 基础

RockYoungTalk 2021-09-28 阅读 146

1. 什么是Redis

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

简而言之,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可以节省大量时间,提升效率。举个例子:

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

5. 安装Redis

工欲善其事必先利其器,学习Redis的第一步肯定就是安装Redis。由于我的环境是Windows系统,就只演示Windows下安装Redis。如果你不想安装Redis,但想体验一番,可以去官网提供的在线测试网站,里面也附有简单的介绍和教程。

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

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

redis-server.exe redis.windows.conf。

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

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

redis-cli.exe -h 127.0.0.1 -p 6379

存入一个键值对:

set firstkey "hello redis"

取出键值对:

get firstkey

关闭连接:

quit

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

6. Redis数据结构

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

  1. 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"
    

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

    > strlen mykey(integer) 11
    

    > append mykey ", hello redis"24>get mykey"hello world, hello redis"
    

    > set incr_num 10OK>get incr_num"10">incr incr_num(integer) 11
    

    > incrby incr_num 4(intrger) 15
    

    > incrbyfloat incr_num 0.515.5
    

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

    > decrby decr_num 4(integer) 5
    
  • decrby key decrement:整数值减少给定整数值(decrement)
  • decr key:整数值-1
  • incrbyfloat key increment:数字值增加给定浮点值(increment)
  • incrby key increment:整数值增加给定整数值(increment)
  • incr key:整数值+1
  • append key value:如果可以已存在且是一个字符串,则将指定value添加到原值末尾,会返回操作后字符串长度
  • strlen key:返回键所存储的字符串值的长度
  • getset key value:设置指定键的新值,并返回旧值
  • getrange key start end:返回key中字符串的子串
  • get key:获取指定键的值
  • set key value:设置指定键的值
  1. 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
    

    > hmset myhash age "20" country "China"OK
    

    > hexists myhash name(integer) 1> hexists myhash phone(integer) 0
    

    > hmget myhash name age phone1) "NPC"2) "20"3) (nil)
    

    > hgetall myhash1) "name"2) "NPC"3) "age"4) "20"5) "country"6) "China"
    

    > hkeys myhash1) "name"2) "age"3) "country"
    

    > hvals myhash1) "NPC"2) "20"3) "China"
    

    > hlen myhash3
    

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

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

    > llen mylist(integer) 4
    

    > lrange mylist 0 -11) "b"2) "a"3) "c"4) "d"> lrange mylist 1 -21) "a"2) "c"
    

    > lindex mylist 0"b"
    

    > lpop mylist"b"> rpop mylist"d"
    

    > rpush rem "hello" "hello" "redis" "hello"(integer) 4> lrange rem 0 -11) "hello"2) "hello"3) "redis"4) "hello"> lrem rem -2 "hello"(integer) 2>lrange rem 0 -11) "hello"2) "redis"
    
  • 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]:将一个或多个值插入到列表尾部(右边)
  1. SetSet(集合)存储string类型的值,集合不允许重复元素,但集合里面的元素没有先后顺序。集合中最大的成员数为232>-1(4294967295,40多亿)。

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

    > scard myset12
    

    > smembers myset11) "hello"2) "redis"
    

    > sadd myset2 "hello" "world"(integer) 2> sdiff myset1 myset21) "redis"> sdiff myset2 myset11) "world"
    

    > sinter myset1 myset21) "hello"
    

    > sunion myset1 myset21) "hello"2) "redis"3) "world"
    

    > sadd myset1 "NPC"(integer) 1>spop myset1"redis">smembers myset11) "NPC"2) "hello"
    
  • spop key:移除并返回集合中的一个随机元素
  • sunion key1 [key2]:返回所有给定集合的并集
  • sinter key1 [key2]:返回所有给定集合的交集
  • sdiff key1 [key2]:返回所有给定集合的差集
  • smembers key:返回集合中的所有成员
  • scard key:获取集合成员数量
  • sadd key member1 [member2]:向集合添加一个或多个成员
  1. SortedSet除了无序集合(Set),Redis还提供了有序集合(SortedSet),有序集合不允许重复的成员,且每个不同的成员都关联一个double类型的分数,redis通过这些分数对成员进行从小到大排序。有序集合有时也被称为ZSet,因为其命令都是以字母Z开头的。

    > zadd myzset 10 "one" 20 "two" 30 "three"(integer) 3
    

    > zcard myzset3
    

    > zscore myzset "one"10.0
    
    > zrange myzset 0 -11) "one"2) "two"3) "three"> zrange myzset 0 -1 withscores1) "one"2) 10.03) "two"4) 20.05) "three"6) 30.0> zrevrange myzset 0 -1 withscores1) "three"2) 30.03) "two"4) 20.05) "one"6) 10.0
    

    > zrank myzset "one"0>zrank myzset "three"2> zrevrank myzset "one"2> zrevrank myzset "three"0
    

    > zcount myzset 15 402
    

    > zrange myzset 0 -1 withscores1) "one"2) 10.03) "two"4) 20.05) "three"6) 30.0> zincrby myzset 40 "one"50.0> zrange myzset 0 -1 withscores1) "two"2) 20.03) "three"4) 30.05) "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]:向有序集合中添加一个或多个成员,或者更新已有成员分数
举报

相关推荐

0 条评论