Redis 基础数据结构
2018-09-16 本文已影响98人
我是曾经那个少年
系列文章基于Redis2.8版本
1:Redis学习资料收集
2:Redis基础数据结构
3:Redis实现分布式锁
2.1 String
2.1.1 小知识
Redis 的字符串是动态字符串,是可以修改的字符串,内部结构实现上类似于Java的ArrayList,
需要注意的是字符串最大长度为 512M。
2.1.2 SET GET 赋值,取值
SET key value [EX seconds] [PX milliseconds] [NX|XX]
如果KEY已存在,就覆盖旧值
[EX seconds] 设置键的过期时间 秒
SET key value EX second == SETEX key second value
[PX milliseconds] 设置键的过期时间 毫秒
SET key value PX millisecond == PSETX key millisecond value
NX 只有在键不存在的时候,才对键进行设置
SET key value NX == SETNX key value
XX 只在键已存在的时候,才对键进行设置
GET key
返回key所关联的字符串值
2.1.3 MSET MGET 批量操作
同时设置一个或多个key-value
MSET key1 value1 key2 value2 key value3
MGET key1 key2 key3
2.1.4 自增 自减
INCR key 将key存储的数字增1
INCRBY key increment 将key存储的数字增increment
INCRBYFLOAT key increment 将key存储的数字增加浮点数increment
DECR key 将key存储的数字减1
DECRBY key decrement 将key存储的数字减decrement
2.1.5 value字符处理
SETRANGE key offset value 用value参数覆盖给定key 从偏移量offset开始
STRLEN key 返回key所存储的字符串值得长度
GETRANGE key start end 返回key字符串中的子串 -1表示最后个字符
APPEND key value 将value追加到原来的value的末尾
2.1.6 操作
赋值,取值
> set name liuawei
OK
> get name
"liuawei"
> set name liuawei2 NX
(nil)
> get name
"liuawei"
> set exkey exvalue EX 6
OK
> get exkey
"exvalue"
> get exkey
(nil)
自增,自减
> set key 18
OK
> set age 18
OK
> incr age
(integer) 19
> incrby age 5
>(integer) 24
> decr age
(integer) 23
> decrby age 5
(integer) 18
> incrbyfloat age 1.5
19.5
批量操作
> mset key1 value1 key2 value2 key3 value3
OK
> mget key1 key2 key3
1) "value1"
2) "value2"
3) "value3"
value字符串操作
> set str 'hello world'
OK
> setrange str 6 redis
11
> get str
"hello redis"
> strlen str
(integer) 11
> append str 'v2.0'
15
> get str
>"hello redisv2.0"
> getrange str 0 -1
"hello redisv2.0"
> getrange str 0 5
"hello "
> getrange str -4 -1
"v2.0"
2.2 List列表操作
2.2.1 增加,取出元素
LPUSH key value [value...]
将一个或多个值value插入到列表key的头部
LPUSHX key value
将值value插入到列表表头,当且仅当key存在并且是一个列表
LPOP key
移除并返回列表key的头元素
RPUSH kye value [value...]
将一个或多个值value插入到列表key的尾部
RPUSHX
将值value插入到列表key的表尾,当且仅当key存在并且是一个列表
RPOP
移除并返回列表key的微元素
2.2.2 value操作
LSET key index value
将列表key下标为index的元素值设置为value
LTRIM key start stop
让列表保留制定区间内的元素,不在指定区间的元素被删除
LREM key count value
根据参数count的值,移出列表中与参数value相等的元素
LRANGE key start stop
返回列表元素中指定区间内的元素
LLEN key
返回列表key的长度
LINSERT key BEFORE|AFTER pivot value
将值 value插入到列表key当中,位于值pivot之前或之后。
LINDEX key index
返回列表key中,下标为index的
2.2.3 阻塞
BLPOP key [key ...] timeout
列表阻塞式的弹出
BRPOP key [key ...] timeout
BRPOP 是列表的阻塞式(blocking)弹出原语。
2.2.4 特性
RPOPLPUSH source destination
BRPOPLPUSH source destination timeout
2.2.5 操作
右边进左边出:队列
右边进右边出:栈
增加,取出元素:
> lpush list value1
(integer) 3
> del list
(integer) 0
> lpush list value1 value2
(integer) 2
> rpush list value3 value4
(integer) 4
> lrange list 0 -1
1) "value2"
2) "value1"
3) "value3"
4) "value4"
value操作
2.3 hash
2.3.1 设值取值
HSET key field value
将Hash表key中的field的值设置value。
HMSET key field value [field value ...]
同时将多个field-value(域-值)对设置到哈希表key中
HGET key field
返回哈希表 key 中给定域 field 的值。
HGETALL key
返回哈希表 key 中,所有的域和值。
HVALS key
返回哈希表key中所有域的值。
HKEYS key
返回哈希表key中的所有域。
2.3.2 其他操作
HDEL key field [field ...]
删除哈希表key中的一个或多个指定域,不存在的域将被忽略。
HEXISTS key field
查看哈希表key中,给定域 field 是否存在。
HLEN key
返回哈希表 key 中域的数量。
2.4 set集合
2.4.1 添加 移除,遍历 基础操作
SADD key member [member ...]
将一个或多个member元素加入到集合key当中,已经存在于集合的member元素将被忽略。
SPOP key
移除并返回集合中的一个随机元素。
SREM key member [member ...]
移除集合key中的一个和多个元素
SMEMBERS key
返回集合 key 中的所有成员。
SCARD key
返回集合 key 的基数(集合中元素的数量)。
SISMEMBER key member
判断 member 元素是否集合 key 的成员。
2.4.2 集合操作
SDIFF key [ksy1...]
返回集合key的差集
SDIFFSTORE destination key [key ...]
返回集合key的差集并将结果保留在destinatio集合
SINTER key [key ...]
返回集合key的交集
SINTERSTORE destination key [key ...]
返回集合key的交集并将结果赋给destination
SMOVE source destination member
将member元素从source集合移动到destination集合
SRANDMEMBER key [count]
返回集合key里面的一个随机数
SUNION key [key ...]
返回结合key的全集
SUNIONSTORE destination key [key ...]
返回结合key的全集并将结果赋给destination
2.5 zset集合
2.5.1 添加 移除,遍历 基础操作
ZADD key score member [[score member] [score member] ...]
将一个或多个 member元素及其score值加入到有序集key当中。
ZCARD key
返回有序集 key的基数。
ZCOUNT key min max
返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。