目录
Redis 5之前一共有六个主要数据结构:key、string、list、set、hash、sorted-set(zset),还有由string衍生出来的bitmaps、由zset衍生出来的geo。key类型实际就是byte数组,因此可以将任何二进制序列作为key使用,虽然key最大可以为512MB,不过最好还是尽量小一点,一般约定redis的key形式如:user:0001:name,代表id为0001的用户的姓名,这种命名方式兼顾可读性和性能。
Redis 5新增了stream类型。
0.key
下面是一些通用操作(或者说是对于key类型的操作):
- keys pattern:显示匹配到的key,keys *就是显示所有key
- exists key ...:检查key是否存在
- expire key seconds:设置key在seconds秒后过期,pexpire是expire的毫秒版本
- expireat key timestamp:设置key在到达timestamp时过期,pexpireat是expireat的毫秒版本
- ttl key:查询key的过期时间,如返回-1则代表未设置过期时间,-2则代表键不存在,pttl是ttl的毫秒版本
- persist key:移除key上设置的过期时间
- del key:删除一个键值对
- type key:查询元素类型
- object subcommand [args...]:执行一些子命令,如:
- refcount key:返回引用计数
- encoding key:查询内部编码
- idletime key:返回数据有多久没被访问过
- freq key:返回数据访问频率计数
- help:返回帮助信息
- info:显示服务器信息
- ping:测试连通性,成功则返回pong
- config set config_name value 、config rewrite:前者用来修改配置,后者用于确认修改
- move key db:移动key到另一个数据库
- randomkey:随机返回一个对象的key
- rename key newkey:重命名key
- renamenx key newkey:重命名key,newkey必须不存在
- dump key:将值序列化
- restore key ttl serialized-value option:将序列化的值自动反序列化,然后插入数据库,option有以下可选值:
- replace:如果key存在则替换
- absttl:如果使用该选项,ttl必须是timestamp,相当于从expire变成了expireat
- idletime seconds:参见object
- freq frequency:参见object
- migrate host port key option 或 migrate host port "" timeout option: 从远程服务器迁移数据到本机,option有:
- copy:仅复制数据,而不是移动数据
- replace:当本机有同名数据时,进行覆盖
- keys key ...:适用于第二种形式,指定要迁移的key
- touch key ...:更新指定key的访问时间
- sort key option:对list、set、zset进行排序,option如下:
- by pattern:使用外部键作为排序依据,例如list中有三个值 1 2 3,若pattern为weight_*,则会根据weight_1、weight_2、weight_3的值来排序,而不是根据字面值排序。pattern可以是不存在的键,这样就相当于没排序。
- limit offset count:限制返回值数目
- get pattern [get pattern...]:不返回排序数据本身,而是返回匹配的外部键的值,例如pattern为object_*,则返回object_1、object_2、object_3的值,而非字面值,get #就是返回被排序的数据
- asc|desc:升序还是降序排序
- alpha:对字符串按字典序排序
- store destination:将排序结果输出
- scan cursor [match pattern] [count count]:渐进式便利,返回下一个cursor值和本次遍历的键,与之作用相似的还有sscan、zscan、hscan,不做赘述,下面是个例子:
127.0.0.1:6379> scan 0
1) "15"
2) 1) "key3"
2) "key2"
3) "key6"
4) "key9"
5) "key4"
6) "key1"
7) "key10"
8) "key7"
9) "key8"
10) "key5"
127.0.0.1:6379> scan 15
1) "0"
2) (empty list or set)
可以看到,第一次执行scan 0后,返回的新cursor是15,表示这一批最多遍历了15个数据,下一次执行scan需要从15开始,不过因为数据不够,所以执行scan 15后,cursor又回到了0。
- wait num_of_replicas timeout:阻塞客户端直到上一次写入操作的结果传播到了num_of_replicas个副本处,或者超时
- unlink key ...:相当于del,只不过会忽略不存在的键
此外还有一些Redis管理命令:
- auth password:设置密码
- echo message:显示给定消息,没什么具体作用
- ping [message]:ping服务器,如果设置了message,ping成功后会返回这个message
- quit:关闭客户端,断开连接
- select db:更换数据库,例如 select 0就是切换到db0
- swapdb db_1 db_2:交换两个数据库
以上命令只是一部分,Redis的所有命令可以查看官方文档:https://redis.io/commands
1.string
string可以用来表示3种值:字符串、正数、浮点数,可以自动进行转换,它支持的操作如下:
- set key value option:用于设置键值对,key代表键,value代表值,option有以下可选项:
- ex seconds:设置过期时间,单位秒
- px milliseconds:设置毫秒级过期时间
- nx:只有待设置的key不存在才会执行
- xx:只有待设置的key存在才会执行
- get key:获取值
- mset key value [key value...]:同时设置多个键值对(至少一个)
- mget key [key...]:同时获取多个值
- getset key value:将key对应的值设置为value,并返回之前的值
- setex key seconds value:相当于 set key value ex seconds