Redis基础知识

  • redis的介绍
  • 1、String数据类型的介绍和命令:
  • 2、Hash类型的介绍和命令
  • 3、List类型的介绍和命令
  • 4、Set数据类型的介绍和命令:
  • 5、ZSet数据类型的介绍和命令


redis的介绍

Redis是C语⾔开发的⼀个开源的(遵从BSD协议)⾼性能键值对(key-value)的内存数据库,可以⽤作数据库、缓存、消息中间件等。它是⼀种NoSQL(not-only sql,泛指⾮关系型数据库)的数据库。

Redis作为⼀个内存数据库的优点:

  1. 性能优秀,数据在内存中,读写速度⾮常快,⽀持并发10W QPS;
  2. 单进程单线程,是线程安全的,采⽤IO多路复⽤机制;
  3. 丰富的数据类型,⽀持字符串(string)、散列(hash)、列表(list)、集合(set)、有序集合(sorted set)等;
  4. ⽀持数据持久化。可以将内存中数据保存在磁盘中,重启时加载;
  5. 可配置主从复制,哨兵,⾼可⽤;
  6. 可以⽤作分布式锁;
  7. 可以作为消息中间件使⽤,⽀持发布订阅

1、String数据类型的介绍和命令:

1.1 介绍
string是redis最基本的类型,可以理解成与memcached⼀模⼀样的类型,⼀个key对应⼀个value。value不仅是
string,也可以是数字。string类型是⼆进制安全的,意思是redis的string类型可以包含任何数据,⽐如jpg图⽚或者序
列化的对象。string类型的值最⼤能存储512M

1.2 Redis中 String数据类型 的命令

如果操作的数据类型不是String数据类型的,会返回错误信息!!

序号

命令

描述

1

set key value

设置key的value,即设置键值对

2

setnx key value

setnx是『SET if Not eXists』(如果不存在,则 SET)的简写,即只有在key不存在时候,将key 设置为value

3

setex key seconds value

设置键值对的同时,设置key的过期时间,单位是秒(s)

4

psetex key milliseconds value

设置键值对的同时,设置key的过期时间,单位是秒(ms)

5

get key

返回key的值,如果不存在返回nil

6

getset key value

先返回旧值,再设置新值

7

strlen key

返回键 key 储存的字符串值的长度。

8

append key value

在key的值末尾追加字符value

9

setrange key offset value

从偏移量offset开始用value发生key中的字符串

10

getrange key start end

返回索引strat 和 end 直接的字符串(含strat和end)

11

incr key

将key中的数字值+1

12

incrby key increment

将key中的数字值加上指定的值

13

incrbyfloat key increment

将key中的数字值加上浮点数增量 increment

14

decr key

将键 key 储存的数字值减去一

14

decrby key decrement

将键 key 储存的数字值减去decrement

15

mset key value [key value …]

同时为多个键设置值

16

msetnx key value [key value …]

当且仅当所有给定键都不存在时, 为所有给定键设置值。

17

mget key [key …]

返回给定的一个或多个字符串键的值。

2、Hash类型的介绍和命令

2.1 介绍
Hash是⼀个键值(key-value)的集合。redis的hash是⼀个string的key和value的映射表,Hash特别适合存储对象。

2.2 Redis中 hash数据类型 的命令

序号

命令

描述

1

hset hash field value

将哈希表 hash 中域 field 的值设置为 value

2

hsetnx hash field value

当且仅当域 field 尚未存在于哈希表的情况下, 将它的值设置为 value

3

hget hash field

返回哈希表中给定域的值

4

hexists hash field

检查给定域 field 是否存在于哈希表 hash 当中

5

hdel key field [field …]

删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。

6

hlen key

返回哈希表 key 中域的数量

7

hstrlen key field

返回哈希表 key 中, 与给定域 field 相关联的值的字符串长度(string length)

8

hincrby key field increment

为哈希表 key 中的域 field 的数字值加上增量 increment

9

hincrbyfloat key field increment

为哈希表 key 中的域 field 加上浮点数增量 increment

10

hmset key field value [field value …]

同时将多个 field-value (域-值)对设置到哈希表 key 中

11

hget key field [field …]

返回哈希表 key 中,一个或多个给定域的值。

12

hkeys key

返回哈希表 key 中的所有域

13

hvals key

返回哈希表 key 中所有域的值。

14

hgetall key

返回哈希表 key 中,所有的域和值。

3、List类型的介绍和命令

3.1 介绍

list列表是简单的字符串列表,按照插⼊顺序排序。可以添加⼀个元素到列表的头部(左边)或者尾部(右边) 常⽤命令:lpush、rpush、lpop、rpop、lrange(获取列表⽚段)等。应⽤场景:list应⽤场景⾮常多,也是Redis最重要的数据结构之⼀,⽐如微博的关注列表,粉丝列表都可以⽤list结构来实现。数据结构:list就是链表,可以⽤来当消息队列⽤。redis提供了List的push和pop操作,还提供了操作某⼀段的api,可以直接查询或者删除某⼀段的元素。
实现⽅式:redis list的是实现是⼀个双向链表,既可以⽀持反向查找和遍历,更⽅便操作,不过带来了额外的内存开销

3.2 Redis中 List数据类型 的命令

序号

命令

描述

1

lpush key value [value …]

将一个或多个值 value 插入到列表 key 的表头

2

lpushx key value

将值 value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表

3

rpush key value [value …]

将一个或多个值 value 插入到列表 key 的表尾(最右边)

4

rpushx key value

将值 value 插入到列表 key 的表尾,当且仅当 key 存在并且是一个列表。

5

lpop key

移除并返回列表 key 的头元素。

6

rpop key

移除并返回列表 key 的尾元素。

7

rpoplpush source destination

将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端,将 source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素

8

lrem key count value

根据参数 count 的值,移除列表中与参数 value 相等的元素

9

llen key

返回列表 key 的长度

10

lindex key index

返回列表 key 中,下标为 index 的元素

11

linsert key before/after pivot value

将值 value 插入到列表 key 当中,位于值 pivot 之前或之后

12

lset key index value

将列表 key 下标为 index 的元素的值设置为 value

13

lrange key start stop

返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定

14

ltrim key start stop

对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除

15

blpop key [key …] timeout

它是 LPOP key 命令的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被 BLPOP 命令阻塞,直到等待超时或发现可弹出元素为止

16

brpop key [key …] timeout

它是 RPOP key 命令的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被 BRPOP 命令阻塞,直到等待超时或发现可弹出元素为止。

17

brpoplpush source destination timeout

BRPOPLPUSH 是 RPOPLPUSH source destination 的阻塞版本,当给定列表 source 不为空时, BRPOPLPUSH 的表现和 RPOPLPUSH source destination 一样

4、Set数据类型的介绍和命令:

4.1 介绍
set是string类型的⽆序集合。集合是通过hashtable实现的。set中的元素是没有顺序的,⽽且是没有重复的。常⽤
命令:sdd、spop、smembers、sunion等。应⽤场景:redis set对外提供的功能和list⼀样是⼀个列表,特殊之处在于
set是⾃动去重的,⽽且set提供了判断某个成员是否在⼀个set集合中。

4.2 Redis中 Set数据类型 的命令

序号

命令

描述

1

sadd key member [member …]

将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略

2

sismember key member

判断 member 元素是否集合 key 的成员。

3

spop key

移除并返回集合中的一个随机元素

4

srandmember key [count]

如果命令执行时,只提供了 key 参数,那么返回集合中的一个随机元素。

5

srem key member [member …]

移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略

6

smove source destination member

将 member 元素从 source 集合移动到 destination 集合。

7

scard key

返回集合 key 的基数(集合中元素的数量)。

8

smembers key

返回集合 key 中的所有成员。

9

sinter key [key …]

返回一个集合的全部成员,该集合是所有给定集合的交集。

10

sinterstore destination key [key …]

这个命令类似于 SINTER key [key …] 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。

11

sunion key [key …]

返回一个集合的全部成员,该集合是所有给定集合的并集。

12

sunionstore destination key [key …]

这个命令类似于 SUNION key [key …] 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。

13

sdiff key [key …]

返回一个集合的全部成员,该集合是所有给定集合之间的差集。

14

sdiffsotre destination key [key …]

这个命令的作用和 SDIFF key [key …] 类似,但它将结果保存到 destination 集合,而不是简单地返回结果集

5、ZSet数据类型的介绍和命令

5.1 介绍

zset和set⼀样是string类型元素的集合,且不允许重复的元素。常⽤命令:zadd、zrange、zrem、zcard等。使⽤场景:sorted set可以通过⽤⼾额外提供⼀个优先级(score)的参数来为成员排序,并且是插⼊有序的,即⾃动排序。

当你需要⼀个有序的并且不重复的集合列表,那么可以选择sorted set结构。和set相⽐,sorted set关联了⼀个double类型权重的参数score,使得集合中的元素能够按照score进⾏有序排列,redis正是通过分数来为集合中的成员进⾏从⼩到⼤的排序。

实现⽅式:Redis sorted set的内部使⽤HashMap和跳跃表(skipList)来保证数据的存储和有序,

HashMap⾥放的是成员到score的映射,⽽跳跃表⾥存放的是所有的成员,排序依据是HashMap⾥存的score,使⽤跳跃表的结构可以获得⽐较⾼的查找效率,并且在实现上⽐较简单

5.2 Redis中 Set数据类型 的命令

序号

命令

描述

1

zadd key score member [[score member] [score member] …]

将一个或多个 member 元素及其 score 值加入到有序集 key 当中。

2

zscore key member

返回有序集 key 中,成员 member 的 score 值。

3

zincrby key increment member

为有序集 key 的成员 member 的 score 值加上增量 increment 。

4

zcard key

返回有序集 key 的基数。

5

zcount key min max

返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量

6

zrange key start stop [withscores]

返回有序集 key 中,指定区间内的成员,其中成员的位置按 score 值递增(从小到大)来排序。

7

zrange key start stop [withscores]

返回有序集 key 中,指定区间内的成员。

8

zrangebycore key min max [withscores] [limit offset count]

返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列

9

zrevrangebyscore key max min [withscores] [limit offset count]

返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员。有序集成员按 score 值递减(从大到小)的次序排列。

10

zrank key member

返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列

11

zrevrank key member

返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递减(从大到小)排序。

12

zrem key member [member …]

移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。

13

zremrangebyrank key start stop

移除有序集 key 中,指定排名(rank)区间内的所有成员。

14

zremrangebyscore key min max

移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。

15

zrangebylex key min max [LIMIT offset count]

当有序集合的所有成员都具有相同的分值时, 有序集合的元素会根据成员的字典序(lexicographical ordering)来进行排序, 而这个命令则可以返回给定的有序集合键 key 中, 值介于 min 和 max 之间的成员。

16

zlexcount key min max

于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会返回该集合中, 成员介于 min 和 max 范围内的元素数量。

17

zremrangebylex key min max

对于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会移除该集合中, 成员介于 min 和 max 范围内的所有元素。