많은 사람들이 Redis를 일종의 데이터베이스로 간주합니다. 실제로 그들은 Redis를 사용하여 데이터베이스의 풍미를 지닌 데이터베이스 모델을 구축합니다. 그러나 키와 값 사이의 관계를 구축하는 방법은 실제 관계형 데이터베이스와 여전히 다릅니다.
효율성은 높지만 불편함, 편리하지만 효율적이지 않음, 효율적이지만 비용이 많이 듭니다.
php-redis의 정렬 기능은 웹 작업을 할 때 데이터를 가져오는 데 더 편리하고, 약간의 관계형 데이터베이스 풍미를 가지고 있습니다. 정렬에 대해 이야기하기 전에 앞서 놓쳤던 자주 사용되는 몇 가지 기능에 대해 이야기해 보겠습니다.
1) 열쇠
설명: 주어진 패턴과 일치하는 키를 찾습니다
매개변수: 일치 패턴
반환 값: 주어진 패턴과 일치하는 키 목록
2) mset
설명: 동시에 하나 이상의 키-값 쌍을 설정합니다. 동일한 이름의 키가 발견되면 MSET는 이전 값을 새 값으로 덮어씁니다. 동일한 이름의 키를 덮어쓰지 않으려면 MSETNX 명령을 사용하십시오. MSET는 원자성 작업입니다. 주어진 모든 키는 동시에 설정됩니다. 다른 주어진 키는 변경되지 않은 상태에서 일부 키를 업데이트하는 것은 불가능합니다.
매개변수: 배열
반환 값: 항상 OK를 반환합니다(MSET는 실패할 수 없기 때문에)
3) mget
설명: 주어진 모든(하나 이상의) 키의 값을 반환합니다. 지정된 키가 존재하지 않으면 특수 값 nil이 반환됩니다. 따라서 명령은 결코 실패하지 않습니다.
매개변수: 키 배열
반환값: 주어진 키의 모든 값을 포함하는 목록
예:
$redis = 새로운 redis()
$redis->connect('192.168.1.108', 6379)
$redis->flushall()
$array=array('탱크'=>'1',
'장'=>'2',
'잉'=>'3',
'테스트'=>'4')
$redis->mset($array)
Print_r($redis->keys('*s*')); // 결과: 배열([0] => test)
Print_r($redis->keys('y???')); // 결과: 배열([0] => ying)
Print_r($redis->keys('t[e]*')); // 결과: 배열( [0] => test )
print_r($redis->keys('*')); // 결과: 배열( [0] => ying [1] => test [2] => zhang [3] => 탱크 )
Print_r($redis->mget(array("tank","ying")))) // 결과: 배열( [0] => 1 [1] => 3 )
?>
4) 정렬
설명: 조건에 따라 데이터를 가져옵니다
매개변수:
배열(
'by' => '패턴', //패턴 일치
'한계' => 배열(0, 1),
'얻다' => '패턴'
'정렬' => 'asc' 또는 'desc',
'알파' => 참,
'store' => '외부 키'
)
주어진 목록, 집합 또는 순서가 지정된 집합 키의 정렬된 요소를 반환하거나 저장합니다.
일반 정렬
$redis = 새로운 redis()
$redis->connect('192.168.1.108', 6379)
$redis->flushall()
$redis->lpush('테스트', 1)
$redis->lpush('테스트', 10)
$redis->lpush('테스트', 8)
Print_r($redis->sort('test')); //결과: 배열( [0] => 1 [1] => 8 [2] => 10 )
?>
가나다순
$redis = 새로운 redis()
$redis->connect('192.168.1.108', 6379)
$redis->flushall()
$redis->lpush('테스트', 'a')
$redis->lpush('테스트', 'd')
$redis->lpush('테스트', 'b')
Print_r($redis->sort('test')); //결과: 배열( [0] => b [1] => d [2] => a )
print_r($redis->sort('test',array('ALPHA'=>TRUE))); //결과: 배열( [0] => a [1] => b [2] = > )
?>
데이터 정렬 및 가져오기
$redis = 새로운 redis()
$redis->connect('192.168.1.108', 6379)
$redis->flushall()
$redis->lpush('테스트', 31)
$redis->lpush('테스트', 5)
$redis->lpush('테스트', 2);
$redis->lpush('테스트', 23)
$array = array('LIMIT'=>array(0,3),"SORT"=>'DESC')
Print_r($redis->sort('test',$array)); //결과: 배열( [0] => 31 [1] => 23 [2] => 5 )
?>
외부 키를 이용한 정렬
때때로 요소를 비교하기 위해 기본 비교 방법 대신 외부 키를 가중치로 사용하고 싶을 수도 있습니다.
사용자 테이블 데이터가 다음과 같다고 가정합니다.
아이디 이름 점수
---------------------
1 탱크 89
2 장 40
4잉 70
3 fXXK 90
id 데이터는 id라는 키를 가진 목록에 저장됩니다.
이름 데이터는 키 이름 name_{id}
로 목록에 저장됩니다.
점수 데이터는 Score_{id} 키에 저장됩니다.
코드 복사 코드는 다음과 같습니다.
$redis = 새로운 redis();
$redis->connect('192.168.1.108', 6379);
$redis->flushall();
$redis->lpush('id', 1);
$redis->set('name_1', '탱크');
$redis->set('score_1',89);
$redis->lpush('id', 2);
$redis->set('name_2', '장');
$redis->set('score_2', 40);
$redis->lpush('id', 4);
$redis->set('name_4','ying');
$redis->set('score_4', 70);
$redis->lpush('id', 3);
$redis->set('name_3', 'fXXK');
$redis->set('score_3', 90);
/**
* * 점수를 큰 것부터 작은 것 순으로 정렬하고 ID를 얻습니다
*/
$sort=array('BY'=>'score_*',
'정렬'=>'설명'
);
print_r($redis->sort('id',$sort)); //계열:Array ( [0] => 3 [1] => 1 [2] => 4 [3] => 2 )
/**
* * 점수를 큰 것부터 작은 것 순으로 정렬하고 이름을 얻습니다
*/
$sort=array('BY'=>'score_*',
'SORT'=>'DESC',
'GET'=>'name_*'
);
print_r($redis->sort('id',$sort)); //结果:Array ( [0] => fXXK [1] => 탱크 [2] => ying [3] => zhang )
/**
* * 점수를 작은 것부터 큰 것 순으로 정렬하고 이름, 점수 가져오기
*/
$sort=array('BY'=>'score_*',
'SORT'=>'DESC',
'GET'=>array('name_*','score_*')
);
print_r($redis->sort('id',$sort));
/**
*계열:배열
(
[0] => 에프XXK
[1] => 90
[2] => 탱크
[3] => 89
[4] => 잉
[5] => 70
[6] => 장
[7] => 40
))
*/
/**
* * 점수를 작은 것부터 큰 것 순으로 정렬하고, ID, 이름, 점수를 가져옵니다
*/
$sort=array('BY'=>'score_*',
'SORT'=>'DESC',
'GET'=>array('#','name_*','score_*')
);
print_r($redis->sort('id',$sort));
/**
* 구문:배열
(
[0] => 3
[1] => 에프XXK
[2] => 90
[3] => 1
[4] => 탱크
[5] => 89
[6] => 4
[7] => 잉
[8] => 70
[9] => 2
[10] => 장
[11] => 40
)
*/
?>