数据类型
基础数据类型
- 字符串 String abc
- Map集合 Hsah {name:"zhangsan",age:18}
- 列表 List [a, b, c, d]
- Set集合 Set {a,b,c}
- 有序Set集合 SortSet {a:1,b:2,c:3}
特殊数据类型
- GEO 地理坐标 {A:(100.2,35.1)}
- BitMap 位图,只存储0和1 01101011101
- HyperLog 基数,两个数据集不重复元素的个数 01101011101
通用命令
-
KEYS 查看符合条件的KEY
127.0.0.1:6379[1]> KEYS *
- "zhangsan"
- "lisi"
- "wangwu"
-
DEL 删除指定的KEY,可跟多个参数
127.0.0.1:6379[1]> DEL zhangsan
(integer) 1
127.0.0.1:6379[1]> KEYS *- "lisi"
- "wangwu"
-
EXISTS 判断KEY是否存在,可跟多个参数
127.0.0.1:6379[1]> EXISTS zhangsan
(integer) 0
127.0.0.1:6379[1]> EXISTS lisi wangwu
(integer) 2 -
EXPIRE:给KEY设置一个过期时间
-
TTL:查看KEY的剩余有效期(过期后返回-2)
127.0.0.1:6379[1]> EXPIRE lisi 20
(integer) 1
127.0.0.1:6379[1]> TTL lisi
(integer) 16
127.0.0.1:6379[1]> EXISTS lisi
(integer) 1
127.0.0.1:6379[1]> TTL lisi
(integer) -2
127.0.0.1:6379[1]> EXISTS lisi
(integer) 0
127.0.0.1:6379[1]> KEYS *- "wangwu"
String类型
字符串类型,value为字符串,格式有三种,本质上都是字符串
-
string:普通字符串
-
int:整数类型,可以做自增、自减操作
-
float:浮点类型,可以做自增、自减操作
String类型常见命令
-
SET 添加String类型键值对,如果已存在KEY则修改VALUE
127.0.0.1:6379[1]> KEYS *
- "wangwu"
127.0.0.1:6379[1]> SET zhangsan 20
OK
127.0.0.1:6379[1]> KEYS * - "zhangsan"
- "wangwu"
127.0.0.1:6379[1]> SET zhangsan 15
OK
127.0.0.1:6379[1]> GET zhangsan
"15"
- "wangwu"
-
GET 根据KEY值获取对应VALUE
127.0.0.1:6379[1]> GET wangwu
"18" -
MSET 批量添加String类型键值对
127.0.0.1:6379[1]> KEYS *
- "zhangsan"
- "wangwu"
127.0.0.1:6379[1]> MSET lisi 20 zhangsan 25 zhaoliu 22
OK
127.0.0.1:6379[1]> KEYS * - "zhangsan"
- "lisi"
- "zhaoliu"
- "wangwu"
-
MGET 批量获取VALUE
127.0.0.1:6379[1]> MGET zhangsan lisi zhaoliu
- "25"
- "20"
- "22"
-
INCR 让一个整形的KEY自增1
127.0.0.1:6379[1]> GET zhangsan
"25"
127.0.0.1:6379[1]> INCR zhangsan
(integer) 26
127.0.0.1:6379[1]> INCR zhangsan
(integer) 27 -
INCRBY 让一个整形KEY自增指定数
127.0.0.1:6379[1]> GET zhangsan
"27"
127.0.0.1:6379[1]> INCRBY zhangsan 2
(integer) 29
127.0.0.1:6379[1]> INCRBY zhangsan -1
(integer) 28
127.0.0.1:6379[1]> INCRBY zhangsan -1
(integer) 27 -
INCRBYFLOAT 让一个浮点类型自增指定数
127.0.0.1:6379[1]> SET float 17.5
OK
127.0.0.1:6379[1]> GET float
"17.5"
127.0.0.1:6379[1]> INCRBYFLOAT float 1.5
"19"
127.0.0.1:6379[1]>
127.0.0.1:6379[1]> INCRBYFLOAT float 1.5
"20.5" -
SETNX 添加一个String类型的键值对,前提是这个key不存在,否则不执行
127.0.0.1:6379[1]> KEYS *
- "zhangsan"
- "lisi"
- "zhaoliu"
- "wangwu"
127.0.0.1:6379[1]> SETNX zhangsan 11
(integer) 0
127.0.0.1:6379[1]> GET zhangsan
"27"
127.0.0.1:6379[1]> SETNX child 11
(integer) 1
127.0.0.1:6379[1]> GET child
"11"
-
SETEX 添加一个String类型的键值对,并且指定有效期 参数为key second value
127.0.0.1:6379[1]> SETEX tom 10 aaa
OK
127.0.0.1:6379[1]> TTL tom
(integer) 5
KEY结构
如果想存储两个相同的KEY,可以用:隔开多个单词形成层级结构,在图形化的页面上可以看到层级结构
127.0.0.1:6379[1]> set com:redisStudy1:zhangsan 20
OK
127.0.0.1:6379[1]> set com:redisStudy2:zhangsan 22
OK
127.0.0.1:6379[1]> set com:redisStudy1:lisi 20
OK
127.0.0.1:6379[1]> set com:redisStudy2:lisi 30
OK
HASH类型
Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时需要将整个字符串替代,很不方便。Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD。
Hash类型常见命令
-
HSET key field value [field value ...]添加或修改hash类型key的field的值
127.0.0.1:6379[2]> hset zhangsan age 18 sex 0
(integer) 2
127.0.0.1:6379[2]> KEYS *- "zhangsan"
-
HGET key field 获取hash类型key的field值
127.0.0.1:6379[2]> HGET zhangsan age
"18" -
HMSET 批量添加一个hash类型的多个key和field,redis 4.0.0之后已被弃用,用HSET也可达到相同效果
-
HGETALL 获取一个hash类型的所有key和field值
127.0.0.1:6379[2]> HGETALL zhangsan
- "age"
- "18"
- "sex"
- "0"
-
HKEYS 列出hash类型key的所有field值
127.0.0.1:6379[2]> HKEYS zhangsan
- "age"
- "sex"
-
HVALS 列出hash类型key的所有field的值
127.0.0.1:6379[2]> HVALS zhangsan
- "18"
- "0"
-
HINCRBY 让一个hash类型的key的field的value值按指定数增长
127.0.0.1:6379[2]> HINCRBY zhangsan age 1
(integer) 19
127.0.0.1:6379[2]> HINCRBY zhangsan age 1
(integer) 20 -
HSETNX 添加一个hash类型的key的field的value值,前提是这个field不存在,否则不执行
List类型
Redis中的list类型类似双向链表结构,支持正向搜索和反向搜索。特点:
- 有序
- 元素可以重复
- 插入和删除快
- 查询速度一般
List类型常见命令
-
LPUSH 在list左侧插入元素,如果没有,则创建list再插入,注意是左侧插入,所以顺序和输入的属性相反
127.0.0.1:6379[3]> LPUSH namelist zhangsan lisi
(integer) 2
127.0.0.1:6379[3]> LRANGE namelist 0 1- "lisi"
- "zhangsan"
-
LPOP 移除并返回list左侧第一个元素,如果没有返回nil
127.0.0.1:6379[3]> LPOP namelist
"lisi"
127.0.0.1:6379[3]> LRANGE namelist 0 2- "zhangsan"
-
RPUSH 在list右侧插入元素
127.0.0.1:6379[3]> RPUSH namelist wangwu zhangsan zhaoliu
(integer) 4
127.0.0.1:6379[3]> LRANGE namelist 0 5- "zhangsan"
- "wangwu"
- "zhangsan"
- "zhaoliu"
-
RPOP 移除并返回list右侧第一个元素,如果没有返回nil
-
127.0.0.1:6379>
>127.0.0.1:6379[3]> RPOP namelist
"zhaoliu"
127.0.0.1:6379[3]> LRANGE namelist 0 5
1) "zhangsan"
2) "wangwu"
3) "zhangsan"
-
LRANGE 返回范围内的所有list元素,左闭右闭
127.0.0.1:6379[3]> LRANGE namelist 0 5
- "zhangsan"
- "wangwu"
- "zhangsan"
-
BLPOP 移除并返回list左侧第一个元素,可以设置等待时间,在没有元素时先等待一段时间,不会立刻返回
-
BRPOP 移除并返回list右侧第一个元素,可以设置等待时间,在没有元素时先等待一段时间,不会立刻返回
-
LSET value index element 设置list下标为index的元素为element
127.0.0.1:6379[3]> LRANGE namelist 0 5
- "lisi"
- "zhangsan"
127.0.0.1:6379[3]> LSET namelist 0 wangwu
OK
127.0.0.1:6379[3]> LRANGE namelist 0 5 - "wangwu"
- "zhangsan"
SET类型
set可以看做一个value都为空的hashMap,set类型特点:
- 无序
- 不可重复
- 查找快
- 支持交集、并集、差集
SET类型常见命令
-
SADD 往SET类型里面添加元素
127.0.0.1:6379[4]> SADD zhangsan lisi wangwu
(integer) 2
127.0.0.1:6379[4]> SADD lisi wangwu zhangsan zhaoliu mazi
(integer) 4
127.0.0.1:6379[4]> SMEMBERS zhangsan- "lisi"
- "wangwu"
127.0.0.1:6379[4]> SMEMBERS lisi - "zhangsan"
- "mazi"
- "zhaoliu"
- "wangwu"
-
SREM 从SET类型中移除元素
127.0.0.1:6379[4]> SREM zhangsan wangwu
(integer) 1
127.0.0.1:6379[4]> SMEMBERS zhangsan- "lisi"
-
SCARD 返回SET中元素个数
127.0.0.1:6379[4]> SCARD lisi
(integer) 4 -
SISMEMBER 判断元素是否存在
127.0.0.1:6379[4]> SISMEMBER zhangsan wangwu
(integer) 0
127.0.0.1:6379[4]> SISMEMBER lisi wangwu
(integer) 1 -
SMEMBERS 获取SET类型中的所有元素
127.0.0.1:6379[4]> SMEMBERS lisi
- "zhangsan"
- "mazi"
- "zhaoliu"
- "wangwu"
-
SINTER 求交集
127.0.0.1:6379[4]> SINTER zhangsan lisi
(empty array) -
SDIFF 求差集
127.0.0.1:6379[4]> SDIFF zhangsan lisi
- "lisi"
127.0.0.1:6379[4]> SDIFF lisi zhangsan - "zhangsan"
- "wangwu"
- "zhaoliu"
- "mazi"
- "lisi"
-
SUNION 求并集
127.0.0.1:6379[4]> SUNION zhangsan lisi
- "zhangsan"
- "lisi"
- "zhaoliu"
- "mazi"
- "wangwu"
ZSET类型
ZSET是一个可排序的SET,SET里面的每一个元素有一个score属性,可以根据score属性排序,ZSET特点:
- 可排序
- 元素不重复
- 查询速度快
ZSET常被用来实现排行榜功能
ZSET类型常见命令
-
ZADD key score member 给ZSET添加元素
127.0.0.1:6379[5]> ZADD nameset 100 zhangsan 98 lisi
(integer) 2 -
ZREM 删除ZSET中的元素
127.0.0.1:6379[5]> ZREM nameset zhangsan
(integer) 1 -
ZSCORE 获取ZSET元素的score值
127.0.0.1:6379[5]> ZSCORE nameset lisi
"98" -
ZRANK 获取ZSET中指定元素的排名,从0开始,正序
-
ZREVRANK 获取ZSET中指定元素的排名,从0开始,逆序
127.0.0.1:6379[5]> ZRANGEBYSCORE nameset 1 100
- "wangwu"
- "zhangsan"
- "zhaoliu"
- "mazi"
- "lisi"
127.0.0.1:6379[5]> ZRANK nameset mazi
(integer) 3
127.0.0.1:6379[5]> ZREVRANK nameset mazi
(integer) 1
-
ZCARD 获取ZSET中元素数量
127.0.0.1:6379[5]> ZCARD nameset
(integer) 5 -
ZCOUNT key min max 获取score值在min和max之间的元素数量
127.0.0.1:6379[5]> ZCOUNT nameset 0 100
(integer) 5 -
ZINCRBY 让ZSET中的指定元素按照指定数递增
127.0.0.1:6379[5]> ZSCORE nameset zhangsan
"66"
127.0.0.1:6379[5]> ZINCRBY nameset 2 zhangsan
"68"
127.0.0.1:6379[5]> ZINCRBY nameset 2 zhangsan
"70" -
ZRANGE key min max 获取排序之后的下标从 min到max的元素,正序
-
ZREVRANGE key start end 获取排序之后的下标从start到end的元素,逆序
127.0.0.1:6379[5]> ZRANGE nameset 0 3
- "wangwu"
- "zhangsan"
- "zhaoliu"
- "mazi"
127.0.0.1:6379[5]> ZREVRANGE nameset 0 3 - "lisi"
- "mazi"
- "zhaoliu"
- "zhangsan"
-
ZRANGEBYSCORE key min max 获取排序后的score值再min和max之间的元素,正序
-
ZREVRANGEBYSCORE key max min 获取排序后的score值再min和max之间的元素,逆序,注意参数不同
127.0.0.1:6379[5]> ZRANGEBYSCORE nameset 0 100
- "wangwu"
- "zhangsan"
- "zhaoliu"
- "mazi"
- "lisi"
127.0.0.1:6379[5]> ZREVRANGEBYSCORE nameset 100 0 - "lisi"
- "mazi"
- "zhaoliu"
- "zhangsan"
- "wangwu"
-
ZINTER,ZDIFF,ZUNION 交集,差集,并集