Redis简单上手
[TOC]
REDIS 学习#
- 官方网站 redis.io/
1. 安装#
宝塔自动安装 Redis 服务器端
2. 数据结构#
- 基本类型
String Hash List Set SortedSet - 特殊类型
GEO BitMao HyperLog 等
help @string
3. 客户端#
- 命令行
- redis-cli 进入控制
- 心跳测试 输入 PING 返回 PONG
- 图形化
- 客户端编程
4. 项目中如何使用#
在项目中我们不可能简单的以键值对的方式存储数据
比如我们在项目中有用户表 商品表等
存储的数据也是一个个对象
这是我们键的命名可以是 项目名:业务名:类型:id
比如 美团:用户模块:用户:1
或者
美团:用户:1
美团:商品:1
值的话采用 json 字符串存入
set meituan:usermodule:user:1 '{"id":1,"age":3}'
通过这种方式存储的数据 ,要查询值的时候会比较麻烦,无法根据值的信息去查询或者排序等
所以一般都会使用 HASH 类型对值进行存储
cli 增删改查#
5.String 类型#
keys * 得到键 数据量多 不建议使用
set foo bar 添加
set key1 1 添加
get foo 得到值
del foo key1 key2 删除 可批量
exists key1 是否存在
expire key1 20 设置过期时间
ttl 查看过期时间
MSET KEY1 1 KEY2 2 批量添加
MGET KEY1 KEY2 批量查询
INCR KEY1 整形自增1
INCRBY KEY1 2 整形自增 指定步长
INCRBY KEY1 -2 整形自增 指定步长 为负数时为自减
DECRBY KEY1 1 整形自减 指定步长
DECRBY KEY1 2 整形自减 指定步长
DECRBY KEY1 -2 整形自减 指定步长 为负数时为自增
INCRBYFLOAT KEY1 1 浮点数自增 必须指定步长
INCRBYFLOAT KEY1 1.1 浮点数自增 必须指定步长
SETNX 新增 值必须不存在 否则不执行
6.HASH 类型#
HSET meituan:usermodule:user:1 name zhangsan age 24 可以添加一个也可以添加多个
HMSET meituan:usermodule:user:2 name zhangsan age 24 可以添加一个也可以添加多个
HGET meituan:usermodule:user:2 name 只能查询一个值
HMGET meituan:usermodule:user:2 name age 查询多个值
HGETALL meituan:usermodule:user:2 查询全部键值
HKEYS meituan:usermodule:user:2 查询全部键
HVALS meituan:usermodule:user:2 查询全部值
HINCRBY meituan:usermodule:user:2 age 1 自增 必须指定步长
HINCRBYFLOAT meituan:usermodule:user:2 age 1.1 自增 必须指定步长 可以是浮点数
HSETNX meituan:usermodule:user:1 name zhangsan 不存在才执行 只能单个字段
7.LIST 类型#
LPUSH USER 1 左侧插入
RPUSH USER 2右侧插入
LPOP USER 1左侧取出1个元素
RPOP USER 2右侧取出2个元素
LARNGE USER 1 10 返回范围角标的所有元素
BLPOP USER 10 //等待10s 左侧一个一个取
BRPOP
8.SET 类型#
SADD USER 1 添加一个元素
SREM USER 1 删除一个元素
SCARD USER 返回元素个数
SISMEMBER USER 1 元素是否存在
SMEMBERS USER 获取所有元素
SINTER USER USER2 求交集
SDIFF USER USER2 求差集
多用于社交 共同好友 好友列表等
9.SORTEDSET#
ZADD USER 85 zhangsan 94 lisi 添加元素1个或多个
ZREM USER zhangsan 删除一个元素
ZCARD USER 返回元素个数
ZSCORE USER zhangsan 获取指定元素的分数
ZRANK USER zhangsan 获取指定元素的排名
ZCOUNT USER 80 90 获取分数范围元素的个数
ZINCRBY USER 2 zhangsan 自增某个元素 指定步长
ZRANG USER 0 5 查询最小的五个
ZREVRANG USER 0 5 查询最大的五个
ZRANGBYSCORE USER 0 80 查询八十分以内的元素
默认是升序 如要降序,在Z后面加 REV
10.REDIS 客户端编程#
创建 laravel 项目
composer create-project laravel/laravel example-app
安装 predis 扩展
composer require predis/predis
使用
$client = new Predis\Client();
$client->set('foo', 'bar');
$value = $client->get('foo');
简单测试
使用函数跟使用命令行区别不大,更多命令可以参考文档
www.cnblogs.com/yhdsir/p/5529207.h...
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class IndexController extends Controller
{
//
public function index()
{
$client = new \Predis\Client();
$testuid = 1;
$key = 'testredis:user:string:'.$testuid;
$client->set('foo', 'bar');
$value = $client->get('foo');
$this->dump( $value );
$client->del('foo');
$value = $client->get('foo');
$this->dump( $value );
$client->set('foo', 'bar2');
$value = $client->get('foo');
$this->dump( $value );
$client->setnx('foo', 'bar3');
$value = $client->get('foo');
$this->dump( $value );
$data = [
'name'=> 'zhangsan',
'age' => 23,
'sex' => 'man',
];
$data = json_encode($data);
$client->set($key, $data);
$value = $client->get($key);
$this->dump( $value );
$client->mset([
'a' => 1,
'b'=>2,
]);
$res = $client->exists($key);
dump($res);
$client->expire($key,20);
$res = $client->ttl($key);
dump($res);
$key1 = 'a';
$client->INCRBYFLOAT($key1 ,1);
$value = $client->get($key1);
$this->dump( $value );
$client->INCRBYFLOAT($key1 ,2);
$value = $client->get($key1);
$this->dump( $value );
//=====================================
//以hash形式存储
$key1 = 'testredis:user:hash:1' ;
$key2 = 'testredis:user:hash:2' ;
$client->hsetnx($key1,'name','zhangsan1');
$client->hmset($key1,[
'id' => 1,
// 'name'=>'zhangsan',
'age'=>23,
'sex'=>'man'
]);
// $client->HMSET([
// $key1 => 'name zhangsan age 23 sex man',
// $key2 => 'name lisi age 33 sex woman',
// ]);
$value = $client->hget($key1,'name');
$this->dump( $value );
$value = $client->hmget($key1,['id','name','age','sex']);
$this->dump( $value );
$value = $client->HGETALL($key1);
$this->dump( $value );
//===============================================
//List类型
$key = 'queue';
$client->lpush($key,1,2,3,4);
$client->rpush($key,5,6,7,8);
$value = $client->lpop($key,10);
$this->dump( $value );
}
public function dump( $value)
{
echo"==================================";
echo '<br>';
dump($value);
echo"==================================";
echo '<br>';
}
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: