redis常见命令
Redis数据结构介绍
Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样:
redis通用命令
通用指令是部分数据类型的,都可以使用的指令,常见的有:
- KEYS:查看符合模板的所有key
- DEL:删除一个指定的key
- EXISTS:判断key是否存在
- EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
- TTL:查看一个KEY的剩余有效期
- KEYS
127.0.0.1:6379> keys * 1) "name" 2) "age" 127.0.0.1:6379> # 查询以a开头的key 127.0.0.1:6379> keys a* 1) "age" 127.0.0.1:6379>
- DEL
127.0.0.1:6379> help del DEL key [key ...] summary: Delete a key since: 1.0.0 group: generic 127.0.0.1:6379> del name #删除单个 (integer) 1 #成功删除1个 127.0.0.1:6379> keys * 1) "age" 127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3 #批量添加数据 OK 127.0.0.1:6379> keys * 1) "k3" 2) "k2" 3) "k1" 4) "age" 127.0.0.1:6379> del k1 k2 k3 k4 (integer) 3 #此处返回的是成功删除的key,由于redis中只有k1,k2,k3 所以只成功删除3个,最终返回 127.0.0.1:6379> 127.0.0.1:6379> keys * #再查询全部的key 1) "age" #只剩下一个了 127.0.0.1:6379>
- EXISTS
127.0.0.1:6379> help EXISTS EXISTS key [key ...] summary: Determine if a key exists since: 1.0.0 group: generic 127.0.0.1:6379> exists age (integer) 1 127.0.0.1:6379> exists name (integer) 0
- EXPIRE
127.0.0.1:6379> expire age 10 (integer) 1 127.0.0.1:6379> ttl age (integer) 8 127.0.0.1:6379> ttl age (integer) 6 127.0.0.1:6379> ttl age (integer) -2 127.0.0.1:6379> ttl age (integer) -2 #当这个key过期了,那么此时查询出来就是-2 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> set age 10 #如果没有设置过期时间 OK 127.0.0.1:6379> ttl age (integer) -1 # ttl的返回值就是-1
String类型
String类型,也就是字符串类型,是Redis中最简单的存储类型。
其value是字符串,不过根据字符串的格式不同,又可以分为3类:
- string:普通字符串
- int:整数类型,可以做自增、自减操作
- float:浮点类型,可以做自增、自减操作
String的常见命令
String的常见命令有:
- SET:添加或者修改已经存在的一个String类型的键值对
- GET:根据key获取String类型的value
- MSET:批量添加多个String类型的键值对
- MGET:根据多个key获取多个String类型的value
- INCR:让一个整型的key自增1
- INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2
- INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
- SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
- SETEX:添加一个String类型的键值对,并且指定有效期
- SET 和GET: 如果key不存在则是新增,如果存在则是修改
127.0.0.1:6379> set name Rose //原来不存在 OK 127.0.0.1:6379> get name "Rose" 127.0.0.1:6379> set name Jack //原来存在,就是修改 OK 127.0.0.1:6379> get name "Jack"
- MSET和MGET
127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3 OK 127.0.0.1:6379> MGET name age k1 k2 k3 1) "Jack" //之前存在的name 2) "10" //之前存在的age 3) "v1" 4) "v2" 5) "v3"
- INCR和INCRBY和DECY
127.0.0.1:6379> get age "10" 127.0.0.1:6379> incr age //增加1 (integer) 11 127.0.0.1:6379> get age //获得age "11" 127.0.0.1:6379> incrby age 2 //一次增加2 (integer) 13 //返回目前的age的值 127.0.0.1:6379> incrby age 2 (integer) 15 127.0.0.1:6379> incrby age -1 //也可以增加负数,相当于减 (integer) 14 127.0.0.1:6379> incrby age -2 //一次减少2个 (integer) 12 127.0.0.1:6379> DECR age //相当于 incr 负数,减少正常用法 (integer) 11 127.0.0.1:6379> get age "11"
- SETNX
127.0.0.1:6379> help setnx SETNX key value summary: Set the value of a key, only if the key does not exist since: 1.0.0 group: string 127.0.0.1:6379> set name Jack //设置名称 OK 127.0.0.1:6379> setnx name lisi //如果key不存在,则添加成功 (integer) 0 127.0.0.1:6379> get name //由于name已经存在,所以lisi的操作失败 "Jack" 127.0.0.1:6379> setnx name2 lisi //name2 不存在,所以操作成功 (integer) 1 127.0.0.1:6379> get name2 "lisi"
- SETEX
127.0.0.1:6379> setex name 10 jack OK 127.0.0.1:6379> ttl name (integer) 8 127.0.0.1:6379> ttl name (integer) 7 127.0.0.1:6379> ttl name (integer) 5
Key结构
Redis没有类似MySQL中的Table的概念,因此我们可以通过给key添加前缀加以区分,不过这个前缀不是随便加的,有一定的规范:
Redis的key允许有多个单词形成层级结构,多个单词之间用’:'隔开,格式如下:
项目名:业务名:类型:id
这个格式并非固定,也可以根据自己的需求来删除或添加词条。这样以来,我们就可以把不同类型的数据区分开了。从而避免了key的冲突问题。
例如我们的项目名称叫 onenewcode,有user和product两种不同类型的数据,我们可以这样定义key:
- user相关的key:onenewcode:user:1
- product相关的key:onenewcode:product:1
如果Value是一个Java对象,例如一个User对象,则可以将对象序列化为JSON字符串后存储:
KEY | VALUE |
onenewcode:user:1 | {“id”:1, “name”: “Jack”, “age”: 21} |
onenewcode:product:1 | {“id”:1, “name”: “小米11”, “price”: 4999} |
redis笔记 一 redis中的常用命令(二)https://developer.aliyun.com/article/1391908