@tingyuge
2016-10-03T08:23:08.000000Z
字数 3666
阅读 1566
PHP Redis
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
- 还提供list,set,zset,hash等多种数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
string是Redis最基本的类型,一个key对应一个value。Redis的string可以存储任何数据,包括对象序列化之后的字符串。一个key最大可以存储512M的string数据。可以类似的理解为josn:
["name": "tingyugetc","age": "20",]
对于string的一般操作方法有如下几种:
| 命令 | 备注 |
|---|---|
| set | 设置键的值 |
| get | 获取键的值 |
| del | 删除键值 |
示例:
127.0.0.1:6379> set name "tingyuge" // 设置值,成功返回OKOK127.0.0.1:6379> get name // 获取值,返回值"tingyuge"127.0.0.1:6379> del name // 删除键值(integer) 1127.0.0.1:6379> get name // 再次尝试获取值,获取不到返回nil(nil)127.0.0.1:6379>
list可以在一个键下面存储多个值,这些值可以是重复的值。
["user": ["tingyuge","china","20"]]
其常用的操作方法:
| 命令 | 备注 |
|---|---|
| rpush | 从列表的右侧添加元素 |
| lpush | 从列表的左侧添加元素 |
| rpop | 从列表的右侧删除一个元素 |
| lpop | 从列表的左侧删除一个元素 |
| lindex | 获取列表在给定位置上的一个元素 |
| lrange | 获取给定范围所有元素 |
示例:
127.0.0.1:6379> rpush list-key item // 右侧添加,添加成功会返回当前列表的长度(integer) 1127.0.0.1:6379> rpush list-key item2(integer) 2127.0.0.1:6379> rpush list-key item(integer) 3127.0.0.1:6379> lrange list-key 0 -1 // 获取一定范围内的值, 返回范围的值,其中-1代表元素结束的位置。1) "item"2) "item2"3) "item"127.0.0.1:6379> lpush list-key item3 // 左侧添加(integer) 4127.0.0.1:6379> lrange list-key 0 -11) "item3" // 左侧添加的元素在最前面2) "item"3) "item2"4) "item"127.0.0.1:6379>
set集合与list列表类似,只不过在set集合中不能存储重复的元素。
["user": {"tingyugetc","tingyugetc1","tingyugetc2"}]
其常用的方法为:
| 命令 | 备注 |
|---|---|
| sadd | 将指定的元素添加到集合 |
| smembers | 返回集合所包含的所有元素,如果数据量大, 谨慎使用 |
| sismember | 检查给定的元素是否在集合中 |
| srem | 如果给定的元素在集合中,则删除它 |
示例:
127.0.0.1:6379> sadd set-key "item" // 添加成功,返回1(integer) 1127.0.0.1:6379> sadd set-key "item1"(integer) 1127.0.0.1:6379> sadd set-key "item2"(integer) 1127.0.0.1:6379> sadd set-key "item2" // 元素已经存在,添加失败,返回0(integer) 0127.0.0.1:6379> smembers set-key // 查看元素1) "item2"2) "item1"3) "item"127.0.0.1:6379> sismember set-key item // 检查元素是否在集合中,在返回1,不在返回0(integer) 1127.0.0.1:6379> srem set-key item // 删除元素,成功返回删除的个数(integer) 1127.0.0.1:6379> srem set-key item // 删除不存在的元素返回0,删除失败返回0(integer) 0127.0.0.1:6379> sismember set-key item // 元素已经删除(integer) 0127.0.0.1:6379> smembers set-key1) "item2"2) "item1"127.0.0.1:6379>
zset与set一样都不允许存在重复的元素,不同的是zset的每个元素都会关联一个score,Redis正是通过score对元素进行从小到大的排序。zset的元素是唯一的但是score可以重复。
["user": {1: "tingyugetc",2: "tingyugetc2",3: "tingyugetc3"}]
其常用的操作:
| 命令 | 备注 |
|---|---|
| zadd | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 |
| zcard | 获取有序集合的成员数 |
| zrange | 通过索引区间返回有序集合成指定区间内的成员 |
| zrem | 移除有序集合中的一个或多个成员 |
| zscore | 返回有序集中,成员的分数值 |
| zrevrank | 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序 |
示例:
127.0.0.1:6379> zadd zset-key 1 item // 添加元素(integer) 1127.0.0.1:6379> zadd zset-key 2 item(integer) 0127.0.0.1:6379> zadd zset-key 2 item2(integer) 1127.0.0.1:6379> zadd zset-key 3 item3(integer) 1127.0.0.1:6379> zcard zset-key // 计算成员数(integer) 3127.0.0.1:6379> zrange zset-key 0 -1 // 获取索引区间内的元素1) "item"2) "item2"3) "item3"127.0.0.1:6379> zrange zset-key 0 -1 withscores // 获取元素同时获取元素的score1) "item"2) "2"3) "item2"4) "2"5) "item3"6) "3"127.0.0.1:6379> zrem zset-key item // 删除元素(integer) 1127.0.0.1:6379> zscore zset-key item2 // 获取元素的score"2"127.0.0.1:6379> zrevrank zset-key item2 // 获取元素的排名(integer) 1127.0.0.1:6379>
hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
["user": {"name": "tingyuge","age": "20"}]
常用的操作:
| 命令 | 备注 |
|---|---|
| hmset | 同时将多个 field-value (域-值)对设置到哈希表 key 中。 |
| hset | 将哈希表 key 中的字段 field 的值设为 value 。 |
| hmget | 获取所有给定字段的值 |
| hget | 获取存储在哈希表中指定字段的值。 |
| hgetall | 获取在哈希表中指定 key 的所有字段和值 |
| hkeys | 获取所有哈希表中的字段键值 |
| hvals | 获取哈希表中所有值 |
| hdel | 删除一个或多个哈希表字段 |
示例:
127.0.0.1:6379> hmset hash-key name "tingyuge" age "20" // 设置hash表OK127.0.0.1:6379> hgetall hash-key // 获取hash的keys与values1) "name"2) "tingyuge"3) "age"4) "20"127.0.0.1:6379> hget hash-key name // 获取name的值"tingyuge"127.0.0.1:6379> hkeys hash-key1) "name"2) "age"127.0.0.1:6379> hmget hash-key name1) "tingyuge"127.0.0.1:6379> hset hash-key city "nanjing" // 设置key的值(integer) 1127.0.0.1:6379> hgetall hash-key1) "name"2) "tingyuge"3) "age"4) "20"5) "city"6) "nanjing"127.0.0.1:6379> hvals hash-key1) "tingyuge"2) "20"3) "nanjing"127.0.0.1:6379>