Redis的数据类型

Redis也算是一种数据的容器,承载在内存上,因此它的各方面性能都比较快,且作为非关系型数据库,面对各种索引也比普通的数据库查询快,不同的场景下使用不同的数据类型,适用于很多地方

字符串类型 String

一一对应,使用场景比较多 key:value 形式

命令 描述
set key value 设置指定key值
get key 获取指定key的value值
mget key1 key2 获取多个key 的 value,按顺序返回value值
mset key1 ‘value1’ key2 ‘value2’ 批量设置多个key的value
strlen key 返回对应value长度
getrange key start end 截取字符串
append key value 追加key关联的value值,返回长度
getset key value 设置key的value并返回原value值
setex key time value 设置value值,并加上一个过期时间,使用ttl key查看过期时间,秒为单位
setnx key value 当key不存在时,设置value
msetnx key1 ‘value1’ key2 ‘value2’ 当所有的key都不存在时,批量设置多个key的value
incr key 将key关联value的值加一,仅对数字有效
incrby key num 将key关联value的值加num,例如 10,仅对数字有效
incrbyflout key num 将key关联value的值加num,浮点类型
decr key 将key关联value的值减一,仅对数字有效
decrby key num 将key关联value的值减num,例如 10,仅对数字有效

哈希类型 Hash

一对一对多,类似字符串,但又区别于字符串,它比字符串复杂一些,同样是key:value,但是他的value可以是一个map,同时,它也无法给单个属性赋予过期时间,但可以给单个属性设置值,某些情况下比String占用资源少,当需要缓存整张表时推荐使用

命令 描述
hset key field value 设置key关联的value
hkeys key 获取所有的key
hgetall key 获取key的所有对应field
hvals key 获取hash表中所有的value
hlen key 获取keyd的长度
hmget key field1 field2 获取多个field的值
hmset key field1 value1 field2 value2 设置多个field的值
hdel key field 删除单个field的单个属性
hsetnx key field value 当field不存在时存储数值
hincrby key field num 给指定字段增加数值,整数
hincrbyfloat key field num 给指定字段增加浮点数

列表类型 List

类似栈,拥有栈的特性,也有链表的特性,亦可用作消息队列等场景,使用场景很广

命令 描述
lpush key value1 value2 将多个value插入到关联的key里面 头部
lpushx key value 将value插入到key中,需要key已经存在 头部
lpop key 删除并获取当前key里面的第一个元素
llen key 获取当前key关联的list长度
rpush key value1 value2 将多个value插入到关联的key里面 尾部
rpop key 删除并获取列表内的最后一个元素
rpushx key value 将value插入到key中,需要key已经存在 尾部
blpop key1 key2 timeout 删除并获取列表的第一个元素,key1存在时不执行key2,如果没有会一直阻塞到弹出为止,建议添加延时
brpop key1 key2 timeout 删除并获取列表的最后一个元素,key1存在时不执行key2,如果没有会一直阻塞到弹出为止,建议添加延时
lindex key 通过索引来获取list中的元素
lset key index value 通过索引来设置相应元素的值
lrange key start end 截取指定列表内元素
ltrim key start end 只保留开始和结束内的元素

集合 set

数据池,无序,可计算差集交集等,之前写爬虫时用集合做过去重,Python使用redis也是非常方便的

命令 描述
sadd key member1 member2 向集合内添加元素
scard key 获取集合内元素数量
smembers key 获取集合内所有的元素
sismember key member 判断member是否是key集合的子元素
sdiff key1 key2 获取给定集合的差集
sinter key1 key2 获取给定集合的交集
sunion key1 key2 获取给定集合的并集
spop key 随机删除一个集合内元素并返回
srandmember key num 返回集合内的一个或者多个随机元素
srem key member1 member2 删除集合中一个或者多个指定元素

其他

剩下的数据类型确实是没用过,这里不便多说

Laravel使用redis流程

简单来说如下图所示

Laravel使用redis
Laravel使用redis

程序将数据存储请求发送给Laravel内置的redis模块(PHPRedis,Predis等),并在config/database.php中配置好redis的端口密码等信息,通过内置模块调用已经安装好的redis即可使用redis存储使用数据了,然后redis内部处理数据
我们如果不做底层的话,正常存储使用,只需要处理好程序与Laravel之间的过程就可以了,也就是说,了解PHPRedis和Predis就可以了,目前似乎大多数人使用的都是这两种,也不仅限于Laravel,原生PHP以及像Swoole这种的也是可以使用的。

关于Laravel中的Redis配置使用 可以参考 Laravel中文文档5.8 - redis

1
2
3
4
5
6
7
// laravel 简单调用示例
use Illuminate\Support\Facades\Redis;
class testRedis(){
Redis::set('username','风向标');
$username = Redis::get('username');
return $username;
}

Laravel使用Redis集群

仍然是在 config/database 中配置 clusters

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
'redis' => [

'client' => env('REDIS_CLIENT', 'predis'),

'options' => [
'cluster' => env('REDIS_CLUSTER', 'predis'),
// 'cluster' => env('redis'),
],

'clusters' => [
'vaneCache' => [
[
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 1,
],
[
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 2,
],
[
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 3,
],
],
],

],

在使用时仅需要 使用 connection 即可

1
2
3
4
$redis1 = Redis::connection('vaneCache');
$redis1->set('username','风向标');
$username = $redis1->get('username');
echo $username;