数据类型介绍
- Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
- 数据是以键值对的形式存储的,也就是一个key对应一个value。
注意:上面说的五种数据类型指的是value的类型,而不是key的类型。
String(字符串)
- string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
- string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。而且不会有乱码。
Hash(哈希)
- Redis hash 是一个键值(key=>value)对集合,类似java里面的Map。
- Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
注意:指的是在Redis中存储的键值(key、value)对中的value的类型是Hash类型。Redis中存储数据本就是键值对,而这个值又可以为Hash类型,也就是Map。
List(列表)
- Redis 列表是简单的字符串列表,按照插入顺序排序。
- 可以添加一个元素到列表的头部(左边)或者尾部(右边)。
- 它底层实际是一个链表,类似于java里面的LinkedList。
Set(集合)
- Redis的Set是string类型的无序集合,集合中不能出现重复的数据。
- 它是通过哈希表实现的。
zset(sorted set:有序集合)
- Redis zset 和 set 一样也是string类型元素的集合, 且不允许重复的成员。
- 不同的是每个元素都会关联一个double类型的分数。
- redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的, 但分数(score)却可以重复。
redis常用命令
- keys * 查询所有的key
- exists key的名字,判断某个key是否存在,存在返回1,不存在返回0
- expire key 秒钟:为指定的key设置过期时间,没设置就表示永不过期
- ttl key 查看还有多少秒过期,-1 表示永不过期,-2表示已过期
- persist key 持久化某个key,让这个key永不过期
- type key 查看你的key对应的值是什么类型
- del key [key …]删除指定的key(指定多个key时,用空格隔开)
- move key db 将key移动到指定的库,默认是放在0号库。(Redis默认支持16个数据库,0~15)
- select num 切换指定的的redis数据库
- flushdb 或 flushall 清空redis数据库(仅练习时使用,工作后慎用)
- flushdb 清空当前数据库中的key
- flushall 清空所有数据库中的key
- rename key newkey 重命名key,如果新的名称存在时则覆盖
- renamenx key newkey 重命名key,新名称不存在时才能命名成功,否则什么也不做
Redis字符串String的常用命令
命令 | 描述 | 例子 |
Set | 设置/更新 key 的值 | set key value |
Set … ex … | 设置/更新 key 的值,并设置有效时间 | set key value ex seconds |
Get | 获取 key 的值 | get key |
append | 追加字符串 | append key value |
decr | 减少值(只能是对整型操作) | decr key |
incr | 增加值 | incr key |
decrby | 根据步长减少值 | decr key step |
incrby | 根据步长增加值 | incr key step |
增加:increment 减少:decrement
命令 | 描述 | 例子 |
getset | 先获取值再赋值 | getset key value |
strlen | 返回key对应value的长度 | strlen key |
setex | 设置值及有效存储时间 | setex key seconds value |
setnx | key不存在时设置值;存在则不设置 | setnx key value |
setrange | 替换指定索引开始的字符串 | setrange key start value |
getrange | 获取指定位置的字符串(含头尾) | getrange key start end |
命令 | 描述 | 例子 |
mget | 返回多个key的值 | mget key [key…] |
mset | 设置多个key、value | mset key value [key value …] |
msetnx | key不存在设置(只要有一个存在,则全部设置不成功) | msetnx key value [key value…] |
Redis列表List的常用命令
命令 | 描述 | 例子 |
lpush | 从左往右向list中添加元素 | lpush key value [value…] |
rpush | 从右往左向list中添加元素 | rpush key value [value …] |
lrange | 遍历list中指定位置的数据 | lrange key start stop |
lpushx | key存在则追加元素,不存在则不操作 | lpushx key value |
rpushx | key存在则追加元素,不存在则不操作 | rpushx key value |
lpop | 弹出最左边(头部)的元素 | lpop key |
rpop | 弹出最右边(尾部)的元素 | rpop key |
llen | 返回key对应列表中元素的个数 | llen key |
注意:当集合中所有元素都弹完后,key会被释放掉。
命令 | 描述 | 例子 |
lrem | 从左往右删除指定key中count个值为value的元素。如果count>0,从左往右删;如果count<0,从右往左删;如果等于0,则删除所有值为value的元素。 | lrem key count value |
lset | 将指定索引位置元素设置成value | lset key index value |
lindex | 获取指定索引位置的元素 | lindex key index |
ltrim | 去除指定索引位置两边的元素 | ltrim key start end |
linsert | 在某个值的前面或后面插入新的值(如果有多个值,只会在第一个值前/后插入) | linsert key before|after pivot value |
rpoplpush | 从一个集合的尾部弹出一个值,插入到另一个集合的头部 | rpoplpush source destination |
- 注意:可以用rpoplpush实现任务队列,构建循环队列。
rpoplpush sourceKey destinationKey,如果sourceKey 和 destinationKey 相同,则可以构成循环队列。
Redis哈希Hash的常用命令
命令 | 描述 | 例子 |
hset | 给key中的field字段赋值,返回键值对数量 | hset key field value [field value …] |
hget | 获取key中field字段的值 | hget key field |
hmset | 给key中的field字段赋值, 返回OK | hmset key field value [field value …] |
hmget | 获取key中多个field字段的值 | hmget key field [field …] |
hdel | 删除field字段 | hdel key field [field …] |
hexists | 判断field是否存在 | hexists key field |
hgetall | 获取key中所有的键值 | hgetall key |
hincrby | 给field按步长增加值(只能是整型) | hincrby key field inrement |
hlen | 获取key对应的容器中元素的个数 | hlen key |
hsetnx | field不存在则赋值,存在则不做修改 | hsetnx key field value |
hkeys | 获取key中所有的field | hkeys key |
hvals | 获取key中所有的value | hvals key |
集合Set的常用命令
命令 | 描述 | 例子 |
sadd | 向set集合中添加元素 | sadd key member [member …] |
smembers | 遍历集合中所有元素 | smembers key |
scard | 获取set集合中的成员数量 | scard key |
sismember | 判断某元素是否存在 | sismember key member |
srem | 删除指定的成员(元素) | srem key member [member …] |
spop | 随机弹出一个元素 | spop key |
**注意:**不管是list、hash、set、zset,只要容器中没有元素了,redis就会将这块空间回收,所以key自然也就不存在了。
命令 | 描述 | 例子 |
srandmember | 随机返回一个或多个成员,不删除原值 | srandmember key [count] |
smove | 将一个集合中的成员移到另一个集合中 | smove source destinaion member |
sdiff | 求多个集合的差集,不会改变原集合中的数据 | sdiff key [key …] |
sdiffstore | 将差集结果存到新集合中 | sdiffstore destination key [key …] |
sinter | 求多个集合的交集 | sinter key [key …] |
sinterstore | 将交集结果存到新集合中 | sinterstore destination key [key …] |
sunion | 求多个集合的并集 | sunion key [key …] |
sunionstore | 将并集结果存到新集合中 | sunionstore destination key [key …] |
集合ZSet(sortedset)的常用命令
命令 | 描述 | 例子 |
zadd | 添加排序成员 | zadd key score member [score member …] |
zcard | 获取成员数量 | zcard key |
zcount | 获取分数在min和max之间的成员个数 | zcount key min max |
zrange | 根据索引遍历成员及分数 | zrange key start stop [withscores] |
zrevrange | 遍历成员及分数 (按分数从大到小的顺序) | zrevrange key start stop [withscores] |
zincrby | 增加指定成员的分数 | zincrby key inrement member |
zrangbyscore | 获取分数在min和max之间的成员和分数 | zrangbyscore key min max [withscores] [limit offset count] |
zrevrangbyscore | 获取分数在min和max之间的成员和分数(按分数从大到小的顺序) | zrevrangbyscore key max min [withscores] [limit offset count] |
命令 | 描述 | 例子 |
zrank | 返回成员下标 | zrank key member |
zrevrank | 返回成员下标(按分数从大到小的顺序) | zrevrank key member |
zscore | 获取指定成员的分数 | zscore key member |
zrem | 删除指定成员 | zrem key member [member…] |
zremrangebyrank | 删除下标之间的数据 | zremrangebyrank key start stop |
zremrangebyscore | 删除分数在min和max之间的成员 | zremrangebyscore key start stop |