redis入门与应用

第一部分 初始、redis

redis概念

redis客户端和服务端可以再不同的设备上

redis是远程的

redis是基于内存的

所有东西都是放在内存的,这就代表redis的操作非常高速,它的速度远远高于基于硬盘的MySQL,但是所有数据都是放在内存中,它也是一个比较吃内存的

redis是非关系型数据库,关系型数据库需要之前定义数据字典,而redis则不需要。

redis的应用场景

缓存,当我们的系统接口比较慢的时候,我们可以把接口的某些数据缓存起来。当下次进行请求的时候,我们就不需要在MySQL中做比较耗时的sql操作了。而是直接去redis缓存中将所需要的MySQL数据读取出来。这是提升系统性能最常用的方法之一。

其次是队列结构买这个结构提供了push和pop操作。我们可以把redis当做队列来使用。

我们可以吧redis当做数据库存储来使用,所有的增删改查都在redis中操作。不需要借助MySQL来进行数据存储。这个做的原因是redis有非常完备的硬盘持久化机制


redis安装

Linux+CentOS

redis2.8.13



redis入门与应用_第1张图片

redis server

make

redis cli

sudo make install

redis的数据类型


redis入门与应用_第2张图片


redis入门与应用_第3张图片

常用命令:set/get/decr/incr/mget等;

应用场景:String是最常用的一种数据类型,普通的key/value存储都可以归为此类;

实现方式:String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incrdecr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int


set string1 yejianfeng

get string1

set string2 4

get string2

4

incr string2

5

decrby string2 2

get string2

3

list类型


redis入门与应用_第4张图片

常用命令:lpush/rpush/lpop/rpop/lrange等;

应用场景:Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现;

实现方式:Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。


可以从左边或右边推入

pop push

lpush list1 12

lpush list2 13

rpop list1

12

并不要求数据唯一

lpush list2 12

lpush list2 13

lpush list2 13

llen list2

3 (有三个数,,不要求数据元素是唯一的)


set类型

redis入门与应用_第5张图片

常用命令:sadd/spop/smembers/sunion等;

应用场景:Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的;

实现方式:set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。


提供一种无序的数据

sadd set1 12

scard set1

1

sadd set1 13

sadd set1 13

(第二次插入是唯一的)

sismember set1 13


srem set1 13 删除13

sismember set1 13


redis入门与应用_第6张图片

值都不一样,,,没有相同的项

sadd set1 12

scard set1

1

sadd set1 13

sadd set1 13

12 13.

sismember set1 13

1

srem set1 13;

sismember set1 13


hash类型


redis入门与应用_第7张图片

常用命令:hget/hset/hgetall等

应用场景:我们要存储一个用户信息对象数据,其中包括用户ID、用户姓名、年龄和生日,通过用户ID我们希望获取该用户的姓名或者年龄或者生日;

实现方式:Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口。如图所示,Key是用户ID, value是一个Map。这个Map的key是成员的属性名,value是属性值。这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据。当前HashMap的实现有两种方式:当HashMap的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,这时对应的value的redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。


hset hash1 key1 12

hget hash1 key1

"12"

hset hash1 key2 12

hset hash1 key3 13

hlen hash1

3

hset hash1 key3 14

hget hash1 key3

"14"


hmget hash1 key1 key2  //这是插入多个吧

"12"

"13"


sort set类型


redis入门与应用_第8张图片

常用命令:zadd/zrange/zrem/zcard等;

应用场景:Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构,比如twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。

实现方式:Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。


可以看成排行榜。。

数值是唯一的。。。。


zadd zset1 10.1 val1

zadd zset1 11.2 val2

zadd zset1 9.2 val3

zcard zset1

3


zrange zset1 0 2 withscores


redis入门与应用_第9张图片

zrank zset1 val2

2


zadd zset1 12.2 val3

0

zrange zet1 0 2 withscores



redis入门与应用_第10张图片


如果score相同的情况下,是按val的字母排序

redis入门与应用_第11张图片

第二部分 操作redis

PHP的redis扩展安装


-v 版本 -m是版本。


redis入门与应用_第12张图片



redis入门与应用_第13张图片




php --ini






PHP操作redis的五种类型

你可能感兴趣的:(redis入门与应用)