我是通过vm虚拟机安装ubuntu系统来学习redis的。

一.redis的基本数据结构

redis有5种基础数据结构,分别是String、Hash、List、Set、SortedSet。除此之外还有HyperLogLog、Geo、Pub/Sub, 算是高级的数据结构。

01.String

1
2
3
4
5
6
7
8
9
10
> set name cmower
OK
> get name
"cmower"
> exists name
(integer) 1
> del name
(integer) 1
> get name
(nil)

1)set 命令用来存储一个键值对,在本例中,name 为 key,cmower 为 值。

2)get 命令用来获取一个键的值。

3)exists 命令用来测试一个键值对是否存在,(integer) 1 表示存在,(integer) 0 表示不存在。

4)del 命令用来删除一个键值对,(integer) 1 表示执行成功,(integer) 0 表示执行失败。

5)当键值对删除后,再通过 get 命令获取时,结果就为 (nil)

6)keys 命令用来查找键。例:*b表示所有以b结尾的键、 cmower 若存在则返回cmower

02.List

Redis 列表由多个节点组成,每个节点包含一个字符串元素。列表可以存储任意数量的元素,而且列表中的元素可以重复。由于列表是双向链表,因此可以从列表的头部或尾部进行操作,这为实现先进先出(FIFO)或后进先出(LIFO)队列提供了基础。

常用命令
LPUSH key element [element …]

  • 描述:将一个或多个值插入到列表的头部。

  • 示例:LPUSH list1 value1 value2

RPUSH key element [element …]

  • 描述:将一个或多个值插入到列表的尾部。

  • 示例:RPUSH list1 value1 value2

LPOP key

  • 描述:移除并返回列表的第一个元素。

  • 示例:LPOP list1

RPOP key

  • 描述:移除并返回列表的最后一个元素。

  • 示例:RPOP list1

LRANGE key start stop

  • 描述:返回列表中指定范围的元素。

  • 示例:LRANGE list1 0 5,返回列表的前六个元素。

LLEN key

  • 描述:返回列表的长度。

  • 示例:LLEN list1

LINDEX key index

  • 描述:返回列表中指定位置的元素。

  • 示例:LINDEX list1 2

LREM key count value

  • 描述:移除列表中等于 value 的元素。

  • 示例:LREM list1 2 value1,从列表头部开始移除前两个等于 value1 的元素。

LTRIM key start stop

  • 描述:对一个列表进行修剪(trim),使其只保留指定区间内的元素。

  • 示例:LTRIM list1 0 10

03.Set

Redis 的 Set 集合数据 , 与 List 列表功能相似 , 唯一的区别是 Set 集合中的元素 是 不允许重复的 ;

该 Set 集合 是一个 无序集合 , 存储 String 类型数据 ;

Set 集合底层是由 Hash 表实现 的 , 本质是 字典结构 , 其 添加 , 删除 , 查找 元素的 时间复杂度 是 O(1) ;

Java 的 HashSet 集合 内部由 HashMap 实现 , 所有的 值 Value 都指向同一个实例对象 ;

Redis 的 Set 集合 内部也是由 Hash 实现 , 所有的 值 Value 都指向同一个值 ;

常用命令

添加和删除与list差不多一致 SADD, SREM

SMEMBERS key

  • 描述:获取key集合的所有元素
  • 示例:SMEMBERS name

SISMEMBER key value

  • 描述:判断key键中是否存在value值
  • 示例:SISMEMBER name Alice. 存在返回1,不存在返回0

SCARD key

  • 描述:获取集合元素的个数

  • 示例:SCARD name. 返回name中元素的个数

SINTER key1 key2

  • 描述:获取两个集合的交集

  • 示例:SINTER course1 course2

SUNION key1 key2

  • 描述:获取两个集合的并集

  • 示例:SUNION course1 course2

SDIFF key1 key2

  • 描述:获取两个结合的差集

  • 示例:SDIFF course1 course2

SMOVE key1 key2 value

  • 描述:将key集合中的value值移动到key2集合中,key1中的value消失,key2中出现key1中消失的value

  • 示例:SMOVE course1 course2 math. 若course1中不含math,则返回0;若含,则返回1

04.Hash

哈希类型是指Redis键值对中的值本身又是一个键值对结构,形如value=[{field1,value1},…{fieldN,valueN}],

Hash主要就是对一个对象的多重属性(如人的姓名,性别,年龄)的存储

image.png

同样是存储字符串,Hash 与String 的主要区别?

  1. 把所有相关的值聚集到一个key 中,节省内存空间
  2. 只使用一个key,减少key 冲突
  3. 当需要批量获取值的时候,只需要使用一个命令,减少内存/IO/CPU 的消耗

常用命令

HSET key field value

  • 描述:将哈希表key中的域field的值设置为value
  • 示例:HSET person name ldy

HGET key field

  • 描述:获取哈希表key中的域field的值
  • 示例:HGET person name

MHSET key field1 value1 field2 value2 ......

  • 描述:同时将多个field-value(字段-值)对设置到哈希表key中
  • 示例:MHSET person name ldy age 15 sex male

MHGET key field1 field2 ......

  • 描述:同时获取多个哈希表key中字段的值
  • 示例:MHGET person name age sex

HGETALL key

  • 描述:获取哈希表key中所有字段和值
  • 示例:HGETALL person

HDEL key field1 [field2、field3、... ]

  • 描述:删除哈希表key中的一个或多个指定字段,不存在的字段将被忽略,返回值为删除的字段个数
  • 示例:HDEL person name age

HLEN key

  • 描述:获取哈希表中字段的数量,当key不存在时返回0
  • 示例:HLEN person

HEXISTS key field

  • 描述:查看哈希表是否含有指定字段,有返回1,无返回或者key不存在返回0
  • 示例:HEXISTS person age

HKEYS key

  • 描述:获取哈希表中所有的字段
  • 示例:HKEYS person

HVALUES key

  • 描述:获取哈希表中所有字段的属性
  • 示例:HVALUES person

HINCRBY key field 数值

  • 描述:为哈希表中的字段值加上指定的增量
  • 示例:HINCRBY person age 10
  • 注意:增量也可以为负数,相当于对指定字段进行减法操作。如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。

HSETNX key field1 value1

  • 描述:为哈希表中不存在的字段赋值
  • 示例: HSETNX person name ldh age 33
  • 注意:如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,操作无效。如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。设置成功,返回 1 。 如果给定字段已经存在且没有操作被执行,返回 0

05.SortedSet

Sorted Sets 与 Sets 类似,是一种集合类型,集合中不会出现重复的数据(member)。区别在于 Sorted Sets 元素由两部分组成,分别是 member 和 score。

member 会关联一个 double 类型的分数(score),sorted sets 默认会根据这个 score 对 member 进行从小到大的排序,如果 member 关联的分数 score 相同,则按照字符串的字典顺序排序。

60daf3de60c4d07fa4eaecac6002acb7

常用命令

ZADD key score1 member1 [socre2 member2、... ...]

ZCARD key

ZRANGE key start stop [WITHSCORES]

ZREVRANGE key start stop [WITHSCORES]

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

ZCOUNT key min max

ZINCRBY key increment member

ZRANK key member

ZREVRANK key member

ZREM key member [member ...]

ZREMRANGEBYRANK key start stop

ZREMRANGEBYSCORE key min max

ZSCORE key member

详见网址redis数据类型SortedSet的常用命令-CSDN博客