redis 获取所有值_Redis核心基础快速掌握,一文带你入门后台开发!

Redis是一个开源的Key-Value数据库,以其速度快、持久化、原子性及丰富的数据结构著称。常见用途是存储高频调取数据,以提升服务器效率。它支持String、Hash、List、Set及SortedSet等数据结构,广泛应用于后台开发。
摘要由CSDN通过智能技术生成

6a1950b1af38eefd6012e14a843c58fb.png

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

b4ae9c752acf7802987f65f3bbfb6cab.png

1. 什么是Redis

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

2. Redis有什么优势

  • 速度快:Redis使用内存来存储数据集,且支持Pipelining命令,可以一次发送多条命令。
  • 持久化:可以把内存中的数据保存在磁盘中,在重启时可重新加载使用。
  • 原子性:所有操作都是原子性的,同时支持事务。
  • 数据结构丰富:支持字符串、列表、哈希、集合及有序集合,满足大多数使用需求。
  • 支持多种语言:Redis支持许多语言,如C、C++、C#、Go、Java、JavaScript、PHP等等。
  • 多种特性:Redis还支持publish/subscribe, 通知, key 过期等特性。

3. Redis能做什么

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

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

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

4. 还没安装Redis的同学,可以私信我

5. Redis数据结构

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

  1. StringString是Redis最基本的数据结构,也是任何存储系统都必备的数据类型。String类型是二进制安全的,简单来说,基本上你什么都能用字符串存储,你可以把图片文件的内容或者序列化的对象作为字符串来存储。String类型的值最大可以存512MB,确实基本什么都够存了。
> set mykey "hello world"  OK  
> gey mykey    "hello world"    
> getset database "mysql"  
    (nil)  
    > get database  
    "mysql"  
    > getset database "redis"  
    "mysql"  
    > get database  
    "redis" 

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

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

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]:向有序集合中添加一个或多个成员,或者更新已有成员分数

e904f796af12190ff1565e2a58349c44.png

以上有不足的地方可以指出讨论,觉得不错的朋友希望能得到您的转发支持,同时可以持续关注我,每天分享Linux C/C++后台开发干货内容!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值