redis 是 key-value 的数据结构,每条数据都是⼀个键值对,键的类型是字符串,键不能重复。
值的类型分为五种:
字符串 string:字符串类型是 Redis 中最为基础的数据存储类型,一个 key 对应一个 value。
string 类型在 Redis 中是二进制安全的。这便意味着该类型可以接受任何格式的数据,比如 JPEG 图像数据或 JSON 对象描述信息等。在 Redis 中字符串类型的 Value 最多可以容纳的数据长度是 512M。
哈希 hash:是一个键值 (key=>value) 对集合。特别适合用于存储对象。
列表 list:简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部 (左边) 或者尾部 (右边)。
集合 set:string 类型的无序集合。通过哈希表实现的,添加,删除,查找的复杂度都是 O (1)。
有序集合 zset:和 set 一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。zset 的成员是唯一的,但分数 (score) 却可以重复。
# 设置键值: set key value 127.0.0.1:6379> set name xiaoming # 设置键值过期时间,单位为秒: setex key1 seconds value 127.0.0.1:6379> setex name 3 xiaoming # 设置多个键值 mset key1 value1 key2 value2 127.0.0.1:6379> mset name xiaoming age 18 # 追加值 append key value 127.0.0.1:6379> append name ge (integer) 10 127.0.0.1:6379> get name "xiaomingge" # 获取: 根据键获取值,不存在返回 null get key 127.0.0.1:6379> get name # 获取: 根据多个键返回多个值 mget key1 key2 127.0.0.1:6379> mget name age 1) "xiaomingge" 2) "18" # 查看所有键 127.0.0.1:6379> keys * 1) "name" 2) "age" # 查找键,支持正则表达式: keys pattern 127.0.0.1:6379> keys n* 1) "name" # 判断键是否存在,如果存在返回 1,不存在返回 0:exists key 127.0.0.1:6379> exists name (integer) 1 127.0.0.1:6379> exists aa (integer) 0 # 查看键对应的类型 127.0.0.1:6379> type name string # 删除键及对应的值 del key1 key2 127.0.0.1:6379> del name age (integer) 2 # 对已有的键设置过期时间 -1: 代表永不过期 -2:代表已过期删除 127.0.0.1:6379> set name a OK 127.0.0.1:6379> expire name 20 (integer) 1 127.0.0.1:6379> ttl name (integer) 17 # 过期时间还剩17秒 127.0.0.1:6379> ttl name (integer) -2 # 表示该键值已过期被删除
# 设置单个属性: hset key field value 127.0.0.1:6379> hset user name xiaoming (integer) 1 # 设置多个属性: hmset key field1 value1 field2 value2 127.0.0.1:6379> hset user name xiaoming age 18 (integer) 1 # 获取指定键所有的属性: hkeys key 127.0.0.1:6379> hkeys user 1) "name" 2) "age" # 获取一个属性的值: hget key field 127.0.0.1:6379> hget user name "xiaoming" # 获取多个属性的值: hmget key field1 field2 127.0.0.1:6379> hmget user name age 1) "xiaoming" 2) "18" # 获取所有属性的值: hvals key 127.0.0.1:6379> hvals user 1) "xiaoming" 2) "18" # 删除整个hash 键及其值,使用 del # 删除属性,属性对应的值会被一起删除: hdel key diled1 dile2 127.0.0.1:6379> hdel user name age (integer) 2
# 在左侧插入数据: lpush key value1 value2 (倒序) 127.0.0.1:6379> lpush name a b (integer) 2 # 在右侧插入数据: rpush key value1 value2 (正序) 127.0.0.1:6379> rpush name c d (integer) 4 # 在指定元素的前后插入新元素: linsert key before或after 现有元素 新元素 127.0.0.1:6379> linsert name before a xiaoming # 在 a 元素前面添加一个新元素 xiaoming (integer) 5 # 获取 - 返回列表里指定范围内的元素: lrange key start stop, 第一个元素为 0,-1 表示最后一个元素 ## 获取name 列表所有元素 127.0.0.1:6379> lrange name 0 -1 1) "b" 2) "xiaoming" 3) "a" 4) "c" 5) "d" # 设置指定所以位置的元素值: lset key index value ## 索引从左侧开始,第⼀个元素为 0。索引可以是负数,表示尾部开始计数,如 - 1 表示最后⼀个元素 127.0.0.1:6379> lset name 4 a # 这样设置相当于将索引wei 4 的元素 修改为 a OK 127.0.0.1:6379> lrange name 0 -1 1) "b" 2) "xiaoming" 3) "a" 4) "c" 5) "a" # 原先是 d 被修改 # 删除 - 删除指定元素:lrem key count value ## 将列表中前count次出现的值为value的元素移除,count > 0: 从头往尾移除,count < 0: 从尾往头移除,count = 0: 移除所有 127.0.0.1:6379> lrem name 0 b # 删除元素 b (integer) 1
# 添加元素:sadd key member1 member2 ... 127.0.0.1:6379> sadd name 1 2 (integer) 2 # 获取所有的元素: smembers key 127.0.0.1:6379> smembers name 1) "1" 2) "2" # 删除指定元素: srem key 127.0.0.1:6379> srem name 1 (integer) 1 127.0.0.1:6379> smembers name 1) "2"
# 添加: zadd key score1 member1 score2 member2 127.0.0.1:6379> zadd name 2 xiaom 1 xiaoh (integer) 2 # 获取 - 返回指定范围内的元素: zrange key start stop 127.0.0.1:6379> zrange name 0 -1 1) "xiaoh" 2) "xiaom" ## 返回score值在min 和max 之间的成员: zrangebyscore key min max 127.0.0.1:6379> zrangebyscore name 1 2 1) "xiaoh" 2) "xiaom" ## 返回成员memberd score值: zscore key member 127.0.0.1:6379> zscore name xiaom "2" # 删除 - 删除指定元素: zrem key member1 member2 ... 127.0.0.1:6379> zrem name xiaom (integer) 1 ## 删除权重在指定范围内的元素: zremrangebyscore key min max 127.0.0.1:6379> zremrangebyscore name 0 2 (integer) 1