redis学习01
我是通过vm虚拟机安装ubuntu系统来学习redis的。
一.redis的基本数据结构
redis有5种基础数据结构,分别是String、Hash、List、Set、SortedSet。除此之外还有HyperLogLog、Geo、Pub/Sub, 算是高级的数据结构。
01.String
1 | > set name cmower |
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主要就是对一个对象的多重属性(如人的姓名,性别,年龄)的存储

同样是存储字符串,Hash 与String 的主要区别?
- 把所有相关的值聚集到一个key 中,节省内存空间
- 只使用一个key,减少key 冲突
- 当需要批量获取值的时候,只需要使用一个命令,减少内存/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 相同,则按照字符串的字典顺序排序。

常用命令
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
