redis总结php学习笔记(一)

redis学习总结

最近学习了解了一些redis相关知识,希望做一个学习总结,方便以后回顾与君共勉_

学习概要

  1. redis的安装;
  2. redis的数据类型;
一. redis的安装
linux下安装

下载
官网地址:http://redis.io/ 下载地址:http://download.redis.io/releases/redis-3.0.0.tar.gz

#sftp 上传安装包到linux
#解压
tar -zxvf redis.3.0.0.tar.gz
#安装c语言环境
sudo apt-get install gcc-c++
#编译
cd redis-3.0.0
make
#安装
make install PREFIX = /usr/local/redis
redis 启动
前端启动

前端启动命令
./redis-server
前端启动的关闭
强制关闭 ctrl+c
正常关闭 ./redis-cli shutdown

注:一旦客户端关闭,则redis服务也会停掉
后端启动

将 redis 源码包中的 redis.conf 文件拷贝至 bin 目录下
cp /root/redis-3.0.0/redis.conf
修改 redis.conf 文件,将 daemonize 改为 yes
vim redis.conf
使用后端命令启动 redis
./redis-server redis.conf
查看是否启动成功
ps -aux | grep redis
关闭后端启动的方式
强制关闭: kill -9 进程号
正常关闭:./redis-cli shutdown
windows下安装

一、下载:

下载地址: https://github.com/MicrosoftArchive/redis/releases

根据系统下载的版本:以(64位为例)

下载后一般解压到根目录下:如(E:\Redis-x64-3.2.100)

二、安装:

打开cmd命令窗口,使用命令进行安装和注册redis到window服务

安装命令:redis-server.exe --service-install redis.windows.conf --loglevel verbose

启动服务命令:redis-server.exe  --service-start

关闭服务命令:redis-server.exe  --service-stop

最后返回的successfully表示安装成功。

也可以通过任务管理器中查看后台中是否有redis-service来判断是否启动成功。

二. redis的数据类型
$redis=new Redis();
$redis->connect('127.0.0.1',6379);

String 类型
赋值 set key value

$redis->set('age',6);

取值 get key

$redis->get('age');
6

设置获取多个键值

$arr=array('age'=>6,'name'=>'hello');
$redis->mSet($arr);
$redis->mGet(array('age','name'))

删除 del key

$redis->delete('age');

数值增减

递增数字
当存储的字符串是整数时,Redis提供了一个实用的命令INCR,其作用是让当前键值递增,并返回递增后的值。

$redis->Incr('age')

增加指定的整数

$redis->Incrby('age',2)

递减数值

$redis->Decr('age')

减少指定的数值

$redis->Decrby('age',2)

向尾部追加值
APPEND的作用是向键值的末尾追加value。如果键不存在则将该键的值设置为value,即相当于 SET key value。返回值是追加后字符串的总长度。

$redis->append('name','cBright');

复制代码获取字符串长度
STRLEN命令返回键值的长度,如果键不存在则返回0。

$redis->strlen('name')

应用

自增主键
商品编号、订单号采用 string 的递增数字特性生成

Hash 散列类型
使用 string 的问题
假设有User对象以JSON序列化的形式存储到Redis中,User对象有id,username、password、age、name等属性,存储的过程如下:
保存、更新:User对象 json(string) redis
如果在业务上只是更新age属性,其他的属性并不做更新我应该怎么做呢? 如果仍然采用上边的方法在传输、处理时会造成资源浪费,下边讲的hash可以很好的解决这个问题。
介绍
hash叫散列类型,它提供了字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合类型等其它类型。如下:

命令
赋值
HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0。

一次只设置一个字段值

$redis->hSet('db','key1','val1');

一次设置多个字段值

$arr1=array('sex'=>1,2);
$redis->hMSet('db',$arr1);

判断数据是否存在

$redis->hExists('db',0)

取值

一次获取一个字段值

$redis->hGet('db','key1');

获取所有字段值

$redis->hGetAll('db')

删除字段

$redis->hDel('db','key1');

增加数字

$redis->hIncrBy('db','key1',2);

只获取字段名或字段值
语法:

$redis->hKeys('db');

获取字段数量

$redis->hLen('db');

List 类型
ArrayList 和 LinkedList 的区别
Arraylist是使用数组来存储数据,特点:查询快、增删慢
Linkedlist是使用双向链表存储数据,特点:增删快、查询慢,但是查询链表两端的数据也很快。
Redis的list是采用来链表来存储的,所以对于redis的list数据类型的操作,是操作list的两端数据来操作的。
命令
向列表两端增加元素

向列表左边增加元素

$redis->lPush('list1','lVal1');

向列表右边增加元素

$redis->rPush('list1','lVal1');

在某个值前面插入

$redis->lInsert('list1',REDIS::BEFORE,'lVal1','test');

查看列表
LRANGE命令是列表类型最常用的命令之一,获取列表中的某一片段,将返回start、stop之间的所有元素(包含两端的元素),索引从0开始。索引可以是负数,如:“-1”代表最后边的一个元素。

$redis->lRange('list1',0,-1)

复制代码从列表两端弹出元素
LPOP命令从列表左边弹出一个元素,会分两步完成:

第一步是将列表左边的元素从列表中移除
第二步是返回被移除的元素值。
语法:

$redis->rPop('list1');

获取列表中元素的个数

$redis->lLen('list1');

删除列表中指定的值

$redis->lRem('list1','lVal1',1);

Set 类型

集合类型:无序、不可重复
列表类型:有序、可重复

命令
增加元素

$redis->sAdd('set1','sVal1');

获得集合中的所有元素

$redis->sMembers('set1')

判断元素是否在集合中

$redis->sIsMember('set1','a')

运算命令

并集

$redis->sUnion('setA','setB')

差集

$redis->sDiff('setB','setA')

交集

$redis->sInter('setB','setA')

从集合中弹出一个元素
注意:由于集合是无序的,所有spop命令会从集合中随机选择一个元素弹出。

$redis->sPop('setA')

Sortedset 类型
Sortedset 又叫 zset
Sortedset 是有序集合,可排序的,但是唯一。
Sortedset 和 set 的不同之处,会给 set 中元素添加一个分数,然后通过这个分数进行排序。
命令
增加元素
向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到集合中的元素个数,不包含之前已经存在的元素。

$redis->zadd('zkey1',3,'aa',1,'bb',10,'cc1',7,'ee1')

获取元素分数

$redis->zScore('zkey1','cc1')

删除元素
移除有序集key中的一个或多个成员,不存在的成员将被忽略。
当key存在但不是有序集类型时,返回一个错误。

$redis->zrem('zkey1','cc1')

获得排名在某个范围的元素列表
获得排名在某个范围的元素列表

按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素)

$redis->zrange('zkey1',0,3)

按照元素分数从大到小的顺序返回索引从start到stop之间的所有元素(包含两端的元素)

$redis->zrevrange('zkey1',0,3)

获取元素的排名

从小到大

$redis->zrank('zkey1','aa')

从大到小

$redis->zrevrank('zkey1','aa')

复制代码获得指定分数范围的元素

$redis->zrangebyscore('zkey1',0,5)

增加某个元素的分数
返回值是更改后的分数

$redis->zincrby('aa',5,'zkey1')

获得集合中元素的数量

$redis->zcard('zkey1')

获得指定分数范围内的元素个数

$redis->zCount('zkey1',1,8)

按照排名范围删除元素

$redis->zremrangebyrank('zkey1',0,-1)

应用
商品销售排行榜
需求:根据商品销售量对商品进行排行显示
思路:定义商品销售排行榜(sorted set集合),Key为items:sellsort,分数为商品销售量。
写入商品销售量:

商品编号1001的销量是9,商品编号1002的销量是10
192.168.101.3:7007> ZADD items:sellsort 9 1001 10 1002

商品编号1001的销量加1
192.168.101.3:7001> ZINCRBY items:sellsort 1 1001

商品销量前10名:
192.168.101.3:7001> ZRANGE items:sellsort 0 9 withscores

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值