Redis的学习1之Redis的介绍和5种数据类型的命令

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 范围内的所有元素。

猜你喜欢

转载自blog.csdn.net/Hicodden/article/details/103573490