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模块(PHPRedis,Predis等),并在config/database.php中配置好redis的端口密码等信息,通过内置模块调用已经安装好的redis即可使用redis存储使用数据了,然后redis内部处理数据
我们如果不做底层的话,正常存储使用,只需要处理好程序与Laravel之间的过程就可以了,也就是说,了解PHPRedis和Predis就可以了,目前似乎大多数人使用的都是这两种,也不仅限于Laravel,原生PHP以及像Swoole这种的也是可以使用的。
关于Laravel中的Redis配置使用 可以参考 Laravel中文文档5.8 - redis
1 | // laravel 简单调用示例 |
Laravel使用Redis集群
仍然是在 config/database 中配置 clusters1
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 | $redis1 = Redis::connection('vaneCache'); |