Redis-hash基本使用
$hkey = "user:id:888";
$field = "username";
$value = "zhangsan";
- $ret = $redis->hset($hkey,$field,$value);//设置hash字段值,第一次设置其field,返回1,如果其field已存在,则会覆盖其value,同时返回0
$field = "username1";
- $ret = $redis->hsetnx($hkey,$field,$value); //设置hash字段值,只有其field不存在才有效.
$hkey = "user:id:666";
$arr = [
'username'=>'lx',
'age'=>100,
'gender'=>2,
'height'=>188,
'weight'=>250
];
$ret = $redis->hmset($hkey,$arr);//批量设置
$ret = $redis->hget($hkey,$field);//获取hash字段值,
$ret = $redis->hmget($hkey,['username','age']);//批量获取值 array
$ret = $redis->hgetall($hkey);//从hash中读取全部的域和值 array
$ret = $redis->hdel($hkey,'username','age');//删除一个或多个hash的field
$ret = $redis->hlen($hkey);//返回其key的个数
$ret = $redis->hkeys($hkey);//返回key的field名称 array
$ret = $redis->hvals($hkey);//返回key的field的值 array
$ret = $redis->hstrlen($hkey,$field);//获取hash里面指定field的长度
$field = "salary";
$increment = 100.22;
$ret = $redis->hincrby($hkey,$field,$increment);//给hash中指定的field增加给定的数字
$ret = $redis->hincrbyfloat($hkey,$field,$increment);//给hash中指定的field增加指定的浮点数
$ret = $redis->hexists($hkey,$field);//判断field是否存在于hash中, 存在返回true , 不存在返回false
$redis->setOption(\Redis::OPT_SCAN,\Redis::SCAN_RETRY);
$it = null;
$match = "user:id:*";
$count = 3;
while ($array = call_user_func_array([$redis,'scan'],[&$it,$match,$count]) ){
foreach ($array as $value){
dump($value);//返回所有keys
}
}
<?php
namespace app\home\controller;
use app\BaseController;
use app\common\lib\RedisObj;
use Carbon\Carbon;
use think\cache\driver\Redis;
class Index extends BaseController
{
public function index()
{
$option = [
'host' => '',
'port' => 6379,
'password' => '',
'select' => 15,
];
$redis = new Redis($option);
$hkey = "user:id:888";
$field = "username";
$value = "zhangsan";
$ret = $redis->hset($hkey,$field,$value);//设置hash字段值,第一次设置其field,返回1,如果其field已存在,则会覆盖其value,同时返回0
dump($ret);//返回1 此时field的值是zhangsan
$value = "lisi";
$ret = $redis->hset($hkey,$field,$value);//返回0,
dump($ret);//返回0 最终field的值是lisi
$field = "username1";
$ret = $redis->hsetnx($hkey,$field,$value);//设置hash字段值,只有其field不存在才有效.
dump($ret);//返回true,此时field的值是lisi
$value = "wangwu";
$ret = $redis->hsetnx($hkey,$field,$value);
dump($ret);//返回false,并且其field值还是lisi;
//多设置几个练习
$hkey = "user:id:123";
$field = "username";
$value = "wemz";
$redis->hsetnx($hkey,$field,$value);
$field = "age";
$value = 18;
$redis->hsetnx($hkey,$field,$value);
$field = "gender";
$value = 1;
$redis->hsetnx($hkey,$field,$value);
$hkey = "user:id:666";
$arr = [
'username'=>'lx',
'age'=>100,
'gender'=>2,
'height'=>188,
'weight'=>250
];
$ret = $redis->hmset($hkey,$arr);//批量设置
dump($ret);
$field = "username";
$ret = $redis->hget($hkey,$field);//获取hash字段值,
dump($ret);//返回string
$ret = $redis->hmget($hkey,['username','age']);//批量获取值 array
dump($ret);
$ret = $redis->hgetall($hkey);//从hash中读取全部的域和值 array
dump($ret);
$ret = $redis->hdel($hkey,'username','age');//删除一个或多个hash的field
dump($ret);
$ret = $redis->hlen($hkey);//返回其key的个数
dump($ret);
$ret = $redis->hkeys($hkey);//返回key的field名称 array
dump($ret);
$ret = $redis->hvals($hkey);//返回key的field的值 array
dump($ret);
$ret = $redis->hstrlen($hkey,$field);//获取hash里面指定field的长度
dump($ret);
$field = "salary";
$increment = 100.22;
$ret = $redis->hincrby($hkey,$field,$increment);//给hash中指定的field增加给定的数字
dump($ret);
$ret = $redis->hincrbyfloat($hkey,$field,$increment);//给hash中指定的field增加指定的浮点数
dump($ret);
$field = "sdad";
$ret = $redis->hexists($hkey,$field);//判断field是否存在于hash中, 存在返回true , 不存在返回false
dump($ret);
dump('----');
$redis->setOption(\Redis::OPT_SCAN,\Redis::SCAN_RETRY);
$it = null;
$match = "user:id:*";
$count = 3;
while ($array = call_user_func_array([$redis,'scan'],[&$it,$match,$count]) ){
foreach ($array as $value){
dump($value);//返回所有keys
}
}
}
}