一、Redis 的六大数据类型
- String(字符串):Redis 最基本的类型,可以保存字符串、整数和浮点数
- HASH(哈希):类似于 Java 中的 Map<String, Object>,是一个键值对应的无序列表
- LIST(列表):是一个链表,每一个节点都包含一个字符串,按照插入顺序排序;Redis 支持从链表的两端插入或者弹出节点
- SET(集合):是无序的,在它里面的每一个元素都是一个字符串,而且是独一无二,各不相同的
- ZSET(有序集合):Sorted Set,是一个有序集合,和 SET 一样也是 String 类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个 double 类型的分数,元素的排序正是依据分数的大小来决定的,ZSET 的成员是唯一的,但分数(score )却可以重复
- HyperLogLog(基数):作用是计算重复的值,以确定存储的数量;只提供基数的运算,不提供返回的功能,不常用
- 注:可以去 http://redisdoc.com/ 获的 Redis 常见数据类型操作命令
二、Redis 键(key)
keys \*
:列出所有 key 的名称,还支持通配符。eg:keys k?
,keys k*
等exists keyName
:判断某个 keyName 是否存在,1 代表存在,0 代表不存在move keyName index
:将 keyName 移动到第 index 号库中,当前库中就没有 keyName 了expire keyName
秒:为 keyName 设置过期时间,过期了就相当于从库中移除了ttl keyName
:查看还有多少秒过期,-1 代表永不过期,-2 表示已过期type keyName
:查看 keyName 是什么类型del keyName
:在 keyName 存在时删除 keyNamedump keyName
:序列化给定 keyName,并返回序列化的值pexpire keyName 毫秒
persist keyName
:移除 keyName 的过期时间,keyName 将持久保持pttl keyName
:以毫秒返回 keyName 的剩余时间randomkey
:从当前数据库中随机返回一个 keyrename keyName newName
:修改 keyName 的名称renamenx keyName newName
:仅当 newName 不存在时,将 keyName 改名为 newName
三、String
set / get / del
:设置、获取、删除append keyName value
:如果 keyName 存在且是一个字符串,则将 value 连接到后面strlen keyName
:返回 keyName 字符串的长度incr / decr keyName
:当 keyName 是数字时,值增加 / 减小 1incrby / decrby keyName step
:当 keyName 是数字时,值增加 / 减小 stepgetrange keyName start end
:获取指定闭区间 start 到 end 范围内的值,0 到 -1 表示获取全部setrange keyName start value
:设置从 start 开始(包含 start)后的值变为 value,若 value 的长度不足 start 后边的,则只改部分,若超过 start 后边的,则延长setex keyName 秒
:(set with expire)在创建 keyName 时就设置过期时间setnx keyName value
:(set if not exist):当 keyName 不存在时才可以设置值,即防止覆盖以前的值mset k1 v1 [k2 v2 k3 v3…]
:一次给多个 key 赋值mget k1 [k2 k3 k4…]
:一次获取多个 keymsetnx k1 v1 [k2 v2 k3 v3…]
:只要有一个存在,即所有的都创建不成功getset keyName value
:即 get keyName;set keyName value;若 keyName 一开始不存在,则获取到的是 null,然后创建并赋值;若 keyName 存在,则获取本来的值,再设置为新值
四、List
lpush listName v1 [v2 v3 v4…]
:创建 listName / 在 listName 左端插入,元素顺序为 …v4 v3 v2 v1rpush listName v1 [v2 v3 v4…]
:创建 listName / 在 listName 右端插入,元素顺序为 v1 v2 v3 v4…lrange listName start end
:同 String 的 getrangelpop / rpop listName
:将 listName 左端 / 右端(首 / 尾)的那个元素移除lindex listName index
:获取 listName[index] 的元素,元素下角标从 0 开始llen listName
:获取 listName 的长度lrem listName n m
:删除 n 个 m,n 为数字,m 为值,如果 n 大于 m 的个数,则将 m 都删除,如果 n 小于 m 的个数,则只删除前 n 个 mltrim listName start end
:截取指定闭区间 start 到 end 范围的值后再赋给 listNamerpoplpush list1 list2
:将 list1 的右端(尾)的值移动到 list2 的左端(首)lset listName index value
:将 listName[index] 的值设置为 valuelinsert listName before / after v1 v2
:在 v1 之前 / 之后插入 v2
五、Set
sadd setName v1 [v2 v3 v4…]
:创建 setName 并赋值 / 在最后添加值,如果 v1 v2 v3 v4…中有重复的,则只添加一个,多余的忽略smembers setName
:查看 setName 的值sismember setName value
:查看 setName 中是否有 valuescard setName
:获取 setName 中元素的个数srem setName value
:删除 setName 中的 valuesrandmember setName number
:从 setName 中随机选出 number 个元素spop setName
:从 setName 中随机移除一个,即随机出栈smove set1 set2 value
:将 set1 中的 value 移动到 set2 中sdiff set1 set2
:求出在 set1 内但不在 set2 内的元素sinter set1 set2
:求 set1 与 set2 的交集sunion set1 set2
:求 set1 与 set2 的并集
六、Hash
hset key field value
:创建 key 并赋值 / 在 key 中添加键值对 field, valuehget key field
:获取 key 中 field 对应的值hmset key field1 value1 [field2 value2…]
:在 key 中添加多个键值对hmget key field1 [field2…]
:获取多个 field 对应的值hgetall key
:获取 key 的所有键值对,键和值都有hdel key field1 [field2…]
:删除 key 中 field1 [field2…] 对应的值hlen key
:获取 key 中键值对的个数hexists key field
:判断 key 中有没有 field 的键值对hkeys / hvals key
:获取 key 中的所有的键 / 所有的值hincrby key field number
:将 key 中 field 对应的整数值增加 numberhincrbyfloat key field float
:将 key 中 field 对应的浮点数值增加 floathsetnx key field value
:当 key 中 field 不存在时,添加键值对 field, value
七、Zset
- 在 Set 基础上,加上一个 score 值,之前 Set 是
k1 v1 v2 v3...
,现在 Zset 是k1 score1 v1 score2 v2 score3 v3…
zadd zsetName score1 v1 [score2 v2 …]
:创建 zsetName 并赋值 / 添加一些值zrang zsetName start end [withscores]
:获取出 start 到 end 范围内的值,0 -1 取全部,加 withscores 连同 score 一起获取出来zrangebyscore zsetName startscore endscore
:在 zsetName 中获取闭区间 startscore 到 endscore 范围的值
(1)zrangebyscore zsetName startscore endscore withscores
:连同 score 一起获取出来
(2)zrangebyscore zsetName (startscore (endscore
:区间 startscore 到 endscore 是开区间
(3)zrangebyscore zsetName startscore endscore limit index step
:从获取到的 startscore 到 endscore 范围内的值中再从下角标为 index 开始取 step 个值zrem zsetName value
:删除 zsetName 中 value 值zcard zsetName
:获取 zsetName 的元素的个数,不算 scorezcount zsetName startscore endscore
:获取该闭区间的值的个数zrank zsetName value
:获取 value 所在的下角标值zscore zsetName value
:获取 value 对应的分数zrevrank zsetName value
:获取逆序 value 所在的下角标值zrerange zsetName start end [withscores]
:获取出逆序 start 到 end 范围内的值,0 -1 取全部,加 withscores 连同 score 一起获取出来zrevrangebyscore zsetName endscore startscore
:同 4 ,只不过分数范围是从大到小