Redis的五大数据类型
- String
String 类型是Redis中最基本的数据类型,是二进制安全的,它可以包含任意的数据类型,如图片。Redis中String类型的数据的上限是512M. - List
Redis的list是每个子元素都是String类型的双向链表,可以通过push和pop操作从列表的头部或者尾部添加或者删除元素,这样List即可以作为栈,也可以作为队列。 - Hash
是一个String的field和value的映射表,hash特别适合于存储对象。Redis中的每一个hash可以存储2^32-1键值对。本质上其内部就是一个HashMap,并提供了直接存取这个Map成员的接口。对象内部的key就是field,也就是对象的属性名, value值就是对象的属性值,Redis直接通过field(Map存储的对象的属性名)映射value(对象的属性value值)。 - Set
Set是String类型的无序集合。集合成员是唯一的,不允许重复。其实其内部就是一个HashMap,只不过它的value值一直为null,通过hash算法和key.equals()方法进行去重。 - Zset
存储的是一个集合,和Set类似,不同的是增加了一个权重参数score,使得集合中的元素能够按score进行有序排列,集合中的成员是唯一的,也就是说不允许重复,但是 score是可以重复的。
Redis的一些通用命令介绍
- select
在redis中默认一共有16个库,编号为0-15,正常情况下,用户登录后首先看到的是0号库,可以通过select命令手动切换库
首先进入客户端,并存入一个键值对
在可视化工具上可以看到默认一共有16个库,添加数据默认是存在0号库的
127.0.0.1:6379> set name wangdonglin
OK
127.0.0.1:6379> select 1 //切换到1号库
OK
127.0.0.1:6379[1]> get name
(nil) //获取name的值,发现并没有这个键
127.0.0.1:6379[1]> select 0 //重新切换到0号库
OK
127.0.0.1:6379> get name //获取name的值,发现找到了
"wangdonglin"
127.0.0.1:6379>
- del
该命令用于在key存在时删除key,返回改变的记录数
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> set no 100000
OK
127.0.0.1:6379> del name //删除一条数据
(integer) 1 //改变的记录数是1
127.0.0.1:6379> del age no //删除两条数据
(integer) 2 //返回的是改变的记录数2
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> get age
(nil)
127.0.0.1:6379> get no
(nil)
- dump
序列化给定的key,并返回被序列化的值
127.0.0.1:6379> set name 张三
OK
127.0.0.1:6379> dump name
"\x00\x06\xe5\xbc\xa0\xe4\xb8\x89\t\x00A\x0eIZ\xd5\xf7lX"
127.0.0.1:6379>
- exists
检查key是否存在,存在几个key,存在返回几,不存在,返回0,这里exists keys[key1,key2…],
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> exists name age
(integer) 2
127.0.0.1:6379> exists aa
(integer) 0
127.0.0.1:6379> exists name aa
(integer) 1
127.0.0.1:6379>
- ttl
以秒为单位,返回给定key的剩余生存时间,返回-1表示没有设置有效时间,不会过期,返回-2表示key不存在。
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> ttl aa
(integer) -2
127.0.0.1:6379>
- expire (key seconds)
给一个键值对设置有效时间,单位为秒,当到达失效时间时,就会失效
127.0.0.1:6379> expire name 100
(integer) 1
127.0.0.1:6379> ttl name
(integer) 95
127.0.0.1:6379> ttl name
(integer) 69
127.0.0.1:6379> ttl name
(integer) 27
127.0.0.1:6379> ttl name
(integer) 12 //还有12秒失效
127.0.0.1:6379> ttl name
(integer) 2
127.0.0.1:6379> ttl name
(integer) -2 //键已经失效了
127.0.0.1:6379> get name //已经找不到这个键了
(nil)
127.0.0.1:6379>
- pexpire
同样是设置过期时间,只不过单位是毫秒
- pttl
同样是查看键的有效时间,只不过返回的是毫秒
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> get name
"lisi"
127.0.0.1:6379> pexpire name 10000 //10000毫秒,也就是10秒
(integer) 1
127.0.0.1:6379> ttl name
(integer) 7 //还有7秒就失效
127.0.0.1:6379> pttl name
(integer) 2079 //还有2079毫秒就失效了
127.0.0.1:6379> pttl name
(integer) -2 //已经失效了
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379>
- keys (pattern)
keys pattern 后面可以跟一个正则表达式,匹配所有符合这个模式的key
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> set name1 lisi
OK
127.0.0.1:6379> set name2 wangwu
OK
127.0.0.1:6379> set age1 20
OK
127.0.0.1:6379> set age2 21
OK
127.0.0.1:6379> keys *
1) "age1"
2) "age2"
3) "name2"
4) "name"
5) "name1"
6) "age"
127.0.0.1:6379> keys name*
1) "name2"
2) "name"
3) "name1"
127.0.0.1:6379> keys age*
1) "age1"
2) "age2"
3) "age"
127.0.0.1:6379>
- randomkey
从当前数据库中随机返回一个key
127.0.0.1:6379> randomkey
"age2"
127.0.0.1:6379> randomkey
"age2"
127.0.0.1:6379> randomkey
"name1"
127.0.0.1:6379> randomkey
"age"
127.0.0.1:6379> randomkey
"name1"
127.0.0.1:6379> randomkey
"name1"
127.0.0.1:6379> randomkey
"age2"
127.0.0.1:6379>
- type
返回key对应的数据类型
127.0.0.1:6379> type name
string
127.0.0.1:6379> type age
string
127.0.0.1:6379> type name age
(error) ERR wrong number of arguments for 'type' command
127.0.0.1:6379>
- rename
修改key的名称
127.0.0.1:6379> get name
"zhangsan"
127.0.0.1:6379> rename name zname
OK
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> get zname
"zhangsan"
127.0.0.1:6379>
- flushdb
清空当前库
127.0.0.1:6379> keys *
1) "age1"
2) "age2"
3) "name2"
4) "zname"
5) "name1"
6) "age"
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379>
更多redis命令 redis命令