一、string 字符串类型
①、简介
普通键值对存储,一个键对应一个值。
②、字符串结构
[
"lulubin1":"90",
"lulubin2":"100",
"lulubin3":"90"
]
③、操作方法
string类型应该是操作最为简单的一种了。我们可以使用get来获取值,set设置值,del来删除值。
④、演示(命令行 + PHP演示)
命令行:
设置值,成功返回 ok
set lulubin 90// ok
获取值,成功返回 对应的值
get lulubin // "90"
删除值,成功返回 被删除的数量
del lulubin // (integer) 1
再次获取被删除的lulubin,获取不到,返回 nil
get lulubin // (nil)
PHP版本演示
第一步,链接redis数据库
$redis = new Redis(); // 实例化
$redis->connect(127.0.0.1, 6379); // 连接redis数据库
//$auth = $redis->auth("myRedis"); //设置密码
设置值,成功返回 boolean true
$redis->set("lulubin","90"); // 设置一个值,成功返回true
获取值,成功返回:值的内容
$redis->get("lulubin"); // "90"
删除值,成功返回:被删除的个数
$redis->delete("lulubin"); // 成功返回 1
再次获取lulubin,无法获取,返回false
$redis->get("lulubin"); // boolean false
二、set集合类型
①、简介
set集合和list列表十分的相似,都可以存储多个字符串。但是list列表可以存储重复值,而set集合中不可重复。
②、集合结构
其中的user为键名,其可以包含多个 不重复 的元素,各不相同
[
"user":[
"lulubin1",
"lulubin2",
"lulubin3"
]
]
③、操作方法
④、演示(命令行 + PHP演示)
命令行:
添加一个元素到集合,返回 1代表插入成功;0元素代表已经存在
sadd set-key lulubin1 // 返回 1
同理,再添加元素到集合
sadd set-key lulubin2 // 返回1,表示插入成功,集合内没有该元素
sadd set-key lulubin3 // 返回1
sadd set-key lulubin1 // 返回0,表示插入失败,集合内已经存在
添加完了之后,我们来获取集合内全部的元素,成功返回 全部元素
smembers set-key // 得到结果:"lulubin1","lulubin2","lulubin3",由于元素不能重复,所以最后一个lulubin1不存在集合中
下面介绍这个集合的重要功能,使用sismember命令 检查元素是否在集合中 , 存在返回1,不存在返回0
sismember set-key lulubin4// 由于lulubin4不在集合中,所以返回 0
sismember set-key lulubin1 // lulubin1元素是存在于集合中的,返回1;同理lulubin2,lulubin3也是会返回1
下面我们尝试删除一个元素,如果删除成功过后,会返回 被删除元素的个数
srem set-key lulubin1 //删除成功,返回删除个数:1
srem set-key lulubin1 // lulubin1之前已经被删除,所以删除失败,返回个数0。这里不是表示true or false
我们再次检查所有元素,发现只剩下lulubin2,lulubin3
smembers set-key // 返回"lulubin2","lulubin3"
PHP版本演示
我们先插入一个元素lulubin1到set-key集合。1代表插入成功;0元素代表已经存在
$redis->sadd("set-key","lulubin1"); // 添加成功,返回1
接下来,我们再次添加一次lulubin1到set-key集合,发现已经存在,并且 返回了0
$redis->sadd("set-key","lulubin1"); // 集合中已经存在lulubin1,添加失败,返回0
为了下面演示,我们在添加几个元素
$redis->sadd("set-key","lulubin2");
$redis->sadd("set-key","lulubin3");
现在集合中有3个元素了,我们使用smembers命令全部取出
$r = $redis->smembers("set-key");
var_dump($r);
打印过后,我们获取了一个包含lulubin1,lulubin2,lulubin3的数组
array (size=3)
0 => string "lulubin1"
1 => string "lulubin2"
2 => string "lulubin3"
下面我们使用sismember命令来检查一个元素是否存在于集合中,这个在 检查如昵称是否已经存在 时候非常有用
$redis->sismember("set-key","lulubin1"); //该元素存在集合中,则为 boolean true,反之boolean false
最后,还是删除一个元素。假设是lulubin1,第一次删除,该元素存在于集合,则返回 被删除的个数1
$redis->srem("set-key","lulubin1"); // int 1
这时,我们再次执行删除命令,由于元素已经不存在集合,所以,返回 被删除0个
$redis->srem("set-key","lulubin1"); // int 0
三、zset 有序集合
①、简介
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)
②、字符串结构
[
"user":[
"lulubin1":90,
"lulubin2":100,
"lulubin3":90
]
]
③、操作方法
④、演示(命令行 + PHP演示)
命令行:
首先,我们添加一个键值对到有序集合。如果 成功则返回1;如果键已经存在,返回0
zadd zset-key 90 "lulubin1" // 返回 1
我们再添加一个不存在的键值对
zadd zset-key 100 "lulubin2" // 返回 1
这个时候,有序集合中已经存在键lulubin1和lulubin2,接下来我们再添加一个相同的键lulubin1到散列中,看看会发生什么:
zadd zset-key 90 "lulubin1" // 返回 0,由于该键已经存在
下面我们通过hscore获取一个给定键lulubin1的值。
zscore zset-key "lulubin1" // "90"
成功获取了一个值。我们再获取添加的所有元素看看,刚刚的到底添加了哪几个值
zrange zset-key 0 -1 withscores
其结果如下。我们发现,第一个结果为第一个键值对的键,第二个结果为键值对的值,以此类推,每两个为一组。
"lulubin1"
"90"
"lulubin2"
"100"
下面我们试着删除一个键试试,我们会发现如果 该键之前存在于有序集合中,那么删除时候则返回1,否则,返回0
zrem zset-key "lulubin1" // 该键之前存在于散列,返回1
我们再试着删除一次lulubin1,发现当删除 不存在的键的时候,返回结果0
zrem zset-key "lulubin1"
我们再次获取全部键值对,看看还剩些什么。
zrange zset-key 0 -1 withscores
其结果为,少了两个结果,毕竟刚刚删除了一个键值对
"lulubin2"
"100"
PHP版本演示
我们先插入一个键值对到zset-key有序集合。1代表插入成功;0元素代表已经存在
$redis->zadd("zset-key","lulubin1",90); // int 1,元素插入成功,之前不存在该键
我们再次插入相同键值对
$redis->zadd("zset-key","lulubin1",90); // int 0,元素插入失败,该键已经存在
为了下面的演示使用,我们继续插入一些其他的值
$redis->zadd("zset-key","lulubin2",100); // int 1
下面我们使用zscore获取键对应的值。我们试试获取lulubin的值。
$redis->zscore("zset-key","lulubin1"); // "90"
获取了一个后,我们在尝试使用zrange获取刚刚插入的全部值,看看里面包含哪些键值对
$redis->zrange("zset-key",0,-1,true);
获得结果,是一个包含完整键值得数组
array (size=2)
"lulubin1" => float "90"
"lulubin2" => float "100"
查看完了所有的键值对,我们尝试删除其中一个键。 如果之前键存在于有序集合中,则返回1,反之,返回0
$redis->zrem("zset-key","lulubin1"); // 该键之前存在,返回int 1
我们再次尝试删除lulubin键,发现其返回0. 则说明该键不存在集合中,删除失败
$redis->zdel("zset-key","lulubin1"); // 该键不存在,返回int 0
下面我们使用zrange查看下散列中还剩余的所有键值对
$redis->zrange("zset-key",0,-1,true);
发现,只返回了包含一个键值对的数组。
array (size=1)
"lulubin2" => float "100"
原因即是,刚刚lulubin1已经被删除。
四、hash散列类型
①、简介
hash散列类似于一个小型的Redis数据库
一个散列可以包含多个键值对
散列的每个键都不能重复,各不相同,无序排列
其值可以是字符串或数字值
对于数字值,可以执行自增或者自减操作
②、字符串结构
[
"user":[
"lulubin1":"90",
"lulubin2":"100",
"lulubin3":"90"
]
]
③、操作方法
④、演示(命令行 + PHP演示)
命令行:
首先,我们添加一个键值对到散列。如果 成功则返回1;如果键已经存在,返回0
hset hash-key lulubin1 90 // 返回 1
我们再添加一个不存在的键值对
hset hash-key lulubin2 100 // 返回 1
这个时候,散列中已经存在键lulubin1和lulubin2,接下来我们再添加一个相同的键lulubin1到散列中,看看会发生什么:
hset hash-key lulubin1 90 // 返回 0,由于该键已经存在
下面我们通过hget获取一个给定键lulubin的值。
hget hash-key lulubin1 // "90"
成功获取了一个值。我们再获取添加的所有元素看看,刚刚的到底添加了哪几个值
hgetall hash-key
其结果如下。我们发现,第一个结果为第一个键值对的键,第二个结果为键值对的值,以此类推,每两个为一组。
"lulubin1"
"90"
"lulubin2"
"100"
下面我们试着删除一个键试试,我们会发现如果 该键之前存在于散列中,那么删除时候则返回1,否则,返回0
hdel hash-key lulubin1 // 该键之前存在于散列,返回1
我们再试着删除一次lulubin1,发现当删除 不存在的键的时候,返回结果0
hdel hash-key lulubin1
我们再次获取全部键值对,看看还剩些什么。
hgetall hash-key
其结果为,少了两个结果,毕竟刚刚删除了一个键值对
"lulubin2"
"100"
PHP版本演示
我们先插入一个键值对到hash-key散列。1代表插入成功;0元素代表已经存在
$redis->hset("hash-key","lulubin1","90"); // int 1,元素插入成功,之前不存在该键
我们再次插入相同键值对
$redis->hset("hash-key","lulubin1","90"); // int 0,元素插入失败,该键已经存在
为了下面的演示使用,我们继续插入一些其他的值
$redis->hset("hash-key","lulubin2","100"); // int 0
下面我们使用hget获取键对应的值。我们试试获取lulubin2的值。
$redis->hget("hash-key","lulubin2"); // "100"
获取了一个后,我们在尝试使用hgetall获取刚刚插入的全部值,看看里面包含哪些键值对
$redis->hgetall("hash-key");
获得结果,是一个包含完整键值得数组
array (size=2)
"lulubin1" => string "90"
"lulubin2" => string "100"
查看完了所有的键值对,我们尝试删除其中一个键。 如果之前键存在于散列中,则返回1,反之,返回0
$redis->hdel("hash-key","lulubin1"); // 该键之前存在,返回int 1
我们再次尝试删除lulubin1键,发现其返回0. 则说明该键不存在集合中,删除失败
$redis->hdel("hash-key","lulubin1"); // 该键不存在,返回int 0
下面我们使用hgetall查看下散列中还剩余的所有键值对
$redis->hgetall("hash-key");
发现,只返回了包含一个键值对的数组。
array (size=1)
"lulubin2" => string "100"
原因即是,刚刚lulubin1已经被删除
redis hash 应用场景
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
存储部分变更的数据,如用户信息等。
五、list列表类型
①、简介
列表的功能十分独特,他可以在一个键下面存储N个可以重复的元素。其实就是把string类型右边的值换成了多个元素组成的列表。
②、列表结构
由于列表的可重复性,下面的结构实例中,第一个元素和最后一个元素可以重复。
[
"user":[
"lulubin1",
"lulubin2",
"lulubin1"
]
]
③、操作方法
④、演示(命令行 + PHP演示)
命令行:
向列表添加值之后,会返回 当前的长度(包含元素个数)。(这里是右侧添加,左侧添加同理)
rpush list-key lulubin1 // (integer) 1 , 当前列表包含元素个数
rpush list-key lulubin2 // (integer) 2
rpush list-key lulubin1 // (integer) 3 ,即使添加相同值,也是可以添加
获取一定范围内的值,成功返回 范围内所有元素。这里的0代表起始位置,-1代表结束位置。从0到-1,代表取出所有的值。
lrange list-key 0 -1 // 该值返回的结果为:"lulubin1","lulubin2","lulubin1"。
获取列表里面的 某个元素。
lindex list-key 1 // 获取索引为1的元素
从列表左侧删除一个元素,成功返回 被删除的元素
lpop list-key // 上面的列表返回"lulubin1"
再次获取列表的 所有元素。记住,索引从0到-1
lrange list 0 -1 // 返回:"lulubin2","lulubin1",之前最左边的lulubin1已经被删除
PHP版本演示
设置值,成功返回当前 列表中的元素
$r = $redis->rpush("list-key","lulubin1"); // 从列表右侧添加一个值item
var_dump($r);// 此时,列表中有一个元素,返回int 1
同理我们再添加item2和item元素
$redis->rpush("list-key","lulubin2"); // 含有2个元素,返回int 2
$redis->rpush("list-key","lulubin1"); // 含有3个元素,返回int 3
下面,我们获取全部的值
$redis->lrange("list-key", 0 ,-1); // 该值返回的结果为:"lulubin1","lulubin2","lulubin1"。
我们也可以通过lindex来获取其中某个索引的值,成功返回 索引的值
$redis->lindex("list-key",1); // 获取索引为1的值,也就是第二个:"lulubin2"
添加完了,我们可以使用lpop从左侧删除一个元素,或者使用rpop从右侧删除一个元素,成功返回 被删除元素的值
$r = $redis->lpop("list-key"); // 这里我们做左侧删除了一个元素,即为:"lulubin1"
我们再来使用lrange获取所有的元素
$redis->lrange("list-key", 0 ,-1); // 该值返回的结果为:"lulubin2","lulubin1"。