Redis基础知识
- redis的介绍
- 1、String数据类型的介绍和命令:
- 2、Hash类型的介绍和命令
- 3、List类型的介绍和命令
- 4、Set数据类型的介绍和命令:
- 5、ZSet数据类型的介绍和命令
redis的介绍
Redis是C语⾔开发的⼀个开源的(遵从BSD协议)⾼性能键值对(key-value)的内存数据库,可以⽤作数据库、缓存、消息中间件等。它是⼀种NoSQL(not-only sql,泛指⾮关系型数据库)的数据库。
Redis作为⼀个内存数据库的优点:
- 性能优秀,数据在内存中,读写速度⾮常快,⽀持并发10W QPS;
- 单进程单线程,是线程安全的,采⽤IO多路复⽤机制;
- 丰富的数据类型,⽀持字符串(string)、散列(hash)、列表(list)、集合(set)、有序集合(sorted set)等;
- ⽀持数据持久化。可以将内存中数据保存在磁盘中,重启时加载;
- 可配置主从复制,哨兵,⾼可⽤;
- 可以⽤作分布式锁;
- 可以作为消息中间件使⽤,⽀持发布订阅
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 范围内的所有元素。 |