Redis(三)------五大数据类型、三种特殊数据类型
-
Redis是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件MQ
-
它支持多种类型的数据结构,如:字符串(String)、散列(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)与范围查询,基数统计(Hyperloglogs),位图场景(Bitmaps)和地理空间(Geospatial)索引半径查询
-
Redis内置了复制(Replication)、LUA脚本(Lua Scripting)、LRU驱动事件(LRU Eviction)、事务(Transactions)和不同级别的磁盘持久化
5、Redis-Key
127 .0.0.1:6379> keys * # 查看所有的key
(empty list or set)
127 .0.0.1:6379> set name zzz # set key
OK
127 .0.0.1:6379> keys *
1 ) "name"
127 .0.0.1:6379> set age 1
OK
127 .0.0.1:6379> keys *
1 ) "age"
2 ) "name"
127 .0.0.1:6379> EXISTS name # 判断当前的key是否存在,返回1说明存在
(integer) 1
127 .0.0.1:6379> EXISTS name1 # 返回0说明不存在
(integer) 0
127 .0.0.1:6379> move name 1 # 移动当前的key到指定数据库
(integer) 1
127 .0.0.1:6379> keys *
1 ) "age"
127.0.0.1:6379> select 1 # 切换到数据库1
OK
127.0.0.1:6379[1]> keys *
1) "name"
127.0.0.1:6379[1]> get name
"zzz"
127.0.0.1:6379[1]> select 0 # 切换到数据库0
OK
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> set name zzz
OK
127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> get name
"zzz"
127.0.0.1:6379> EXPIRE name 10 #设置key的过期时间,单位是秒
(integer) 1
127.0.0.1:6379> ttl name # 查看当前key的剩余时间
(integer) 4
127.0.0.1:6379> ttl name
(integer) 3
127.0.0.1:6379> ttl name
(integer) 2
127.0.0.1:6379> ttl name
(integer) 1
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> get name # 就会自动删除 keys *也就没了
(nil) # 表示为空
127.0.0.1:6379> type name # 查看当前key的一个类型!
string
127.0.0.1:6379> type age
string
- 其他命令操作可以在官网查看学习:Redis命令中心(Redis commands) – Redis中国用户组(CRUG)
6、五大数据类型
6.1 String类型
6.1.1 基本用法
命令 | 描述 |
---|---|
set key value | 设置值 |
get key | 获得值 |
key * | 获得所有key |
EXISTS key | 判断key是否存在,1存在,0不存在 |
APPEND key “字符串” | 追加字符串,key不存在为set key value |
STRLEN key | 获取字符串长度 |
incr key | 自增1 |
decr key | 自减1 |
INCRBY key 增加量 | 批量增加 |
DECRBY key 减少量 | 批量减少 |
- 实践
------------ SET GET ------------
# 设置值
127.0.0.1:6379> set name zzz
# 获得值
127.0.0.1:6379> get name
# 获得所有的key
127.0.0.1:6379> keys *
------------ EXIST ------------
# 判断某一个key是否存在 1为存在 0为不存在
127.0.0.1:6379> EXISTS name
(integer) 1
------------ APPEND ------------
# 追加字符串,如果当前key不存在,就相当于set key value
127.0.0.1:6379> APPEND name "hehe"
# 7就是name的值的长度
(integer) 7
127.0.0.1:6379> get name
"zzzhehe"
------------ STRLEN ------------
# 获取字符串的长度
127.0.0.1:6379> STRLEN name
(integer) 7
# i++
# 步长 i+=
# 初始浏览量为 0
127.0.0.1:6379> set views 0
OK
# 查看浏览量
127.0.0.1:6379> get views
"0"
------------ incr ------------
# 自增1 浏览量+1
127.0.0.1:6379> incr views
(integer) 1
127.0.0.1:6379> incr views
(integer) 2
127.0.0.1:6379> get views
"2"
------------ decr ------------
# 自减1 浏览量-1
127.0.0.1:6379> decr views
(integer) 1
127.0.0.1:6379> decr views
(integer) 0
127.0.0.1:6379> decr views
(integer) -1
127.0.0.1:6379> get views
"-1"
------------ INCRBY ------------
# 可以设置步长,指定增量!
127.0.0.1:6379> INCRBY views 10
(integer) 9
127.0.0.1:6379> INCRBY views 10
(integer) 19
------------ DECRBY ------------
# 减少量
127.0.0.1:6379> DECRBY views 5
(integer) 14
6.1.2 字符串范围range
命令 | 描述 |
---|---|
GETRANGE key n1 n2 | 截取字符串[n1,n2] |
GETRANGE key 0 -1 | 获取全部字符串,相当于get key |
SETRANGE key n 字符串 | 替换n开始的字符串,写多少换多少 |
- 实践
# 设置 key1 的值
127.0.0.1:6379> set key1 "hello,zzz"
OK
------------ GETRANGE ------------
# 截取字符串 [0,3]
127.0.0.1:6379> GETRANGE key1 0 3
"hell"
# 获取全部的字符串 和 get key 是一样的
127.0.0.1:6379> GETRANGE key1 0 -1
"hello,zzz"
------------ SETRANGE ------------
127.0.0.1:6379> set key2 abcdefg
OK
127.0.0.1:6379> get key2
"abcdefg"
#替换指定位置开始的字符串!替换下标1开始往后的字符串,写了几个替换几个
127.0.0.1:6379> SETRANGE key2 1 xx
(integer) 7
127.0.0.1:6379> get key2
"axxdefg"
6.1.3 设置set的过期时间
命令 | 描述 |
---|---|
setex key n vlaue | 设置key值为value,n秒后过期 |
setnx key “字符串” | 如果不存在,再设置key值为字符串,成功返回1,失败0,如果存在创建失败 |
ttl key | 查看过期时间 |
mset k1 v1 k2 v2 k3 v3… | 同时设置多个值 |
mget k1 k2 k3… | 同时获取多个值 |
msetnx k1 v1 k4 v4 | 若都不存在,同时创建,为原子性操作,一起成功或一起失败 |
getset key value | 先get再set,不存在则创建,存在则替换原值 |
key:{id}:{field} value | 例如:user:1:name zzz,一号user的name为zzz |
- 实例
# 设置过期时间
setex (set with expire)
# 如果