一 数据类型
redis支持以下5种数据类型:
1.string(字符串) 基本数据类型,二进制安全,可以包含任何数据(序列号图片等),最大能存在512MB
2.hash(哈希) 键值对的集合,适合用于储存对象,每个 hash 可以存储 232 -1 键值对(40多亿)
3.list(列表) 简单字符串列表,按照传入顺序排序,可添加元素到头部或尾部,最多储存列表最多可存储232 - 1个元素
4.set(集合) string类型的无需集合,通过哈希表实现的,集合中最大的成员数为 232 - 1个
5.zset(sorted set 有序集合) 有序set,每个元素关联一个double类型的分数,通过分数排序来实现有序
应用场景及特性:
命令:
基本命令:command keyname
命令 键值key
del key : key存在时删除key
keys pattern : 查找所有符合给定模式(pattern)的key
sort key : 排序
dump key : 序列化key,并返回序列化的值
exists key : 检查给定key是否存在
expire key seconds: 为给定key设置过期时间,以秒计
expireat key timestamp : 为给定key设置过期时间,以timestamp类型计
pexpire key milliseconds : 为给定key设置过期时间,以毫秒计
move key db : 将当期数据库的key移动到给定的数据库db中
persist key : 移除key的过期时间,key将持久保持
pttl key :以毫秒为单位返回key的剩余过期时间
ttl key : 以秒为单位返回key的剩余过期时间
pandomkey : 从当期数据库随机返回一个key
rename key newkeyname : 修改key的名称
renamenx key newkeyname : 当newkeyname不存在时
type key : 返回key所存储的数据类型
- SCAN 命令用于迭代当前数据库中的数据库键。
- SSCAN 命令用于迭代集合键中的元素。
- HSCAN 命令用于迭代哈希键中的键值对。
- ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。
以上列出的四个命令都支持增量式迭代, 它们每次执行都只会返回少量元素, 所以这些命令可以用于生产环境, 而不会出现像 KEYS 命令、 SMEMBERS 命令带来的问题 —— 当 KEYS 命令被用于处理一个大的数据库时, 又或者 SMEMBERS 命令被用于处理一个大的集合键时, 它们可能会阻塞服务器达数秒之久。
SCAN 命令是一个基于游标的迭代器(cursor based iterator): SCAN 命令每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。
当 SCAN 命令的游标参数被设置为 0 时, 服务器将开始一次新的迭代, 而当服务器向用户返回值为 0 的游标时, 表示迭代已结束。
以下是一个 SCAN 命令的迭代过程示例:
redis 127.0.0.1:6379> scan 0
1) "17"
2) 1) "key:12"
2) "key:8"
3) "key:4"
4) "key:14"
5) "key:16"
6) "key:17"
7) "key:15"
8) "key:10"
9) "key:3"
10) "key:7"
11) "key:1"
redis 127.0.0.1:6379> scan 17
1) "0"
2) 1) "key:5"
2) "key:18"
3) "key:0"
4) "key:2"
5) "key:19"
6) "key:13"
7) "key:6"
8) "key:9"
9) "key:11"
在上面这个例子中, 第一次迭代使用 0 作为游标, 表示开始一次新的迭代。
第二次迭代使用的是第一次迭代时返回的游标, 也即是命令回复第一个元素的值 —— 17 。
从上面的示例可以看到, SCAN 命令的回复是一个包含两个元素的数组, 第一个数组元素是用于进行下一次迭代的新游标, 而第二个数组元素则是一个数组, 这个数组中包含了所有被迭代的元素。
在第二次调用 SCAN 命令时, 命令返回了游标 0 , 这表示迭代已经结束, 整个数据集(collection)已经被完整遍历过了。
String 命令:
Hash命令:
List命令 :
Set集合:
Sorted set :