@tingyuge
2016-10-03T16:23:08.000000Z
字数 3666
阅读 1414
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" // 设置值,成功返回OK
OK
127.0.0.1:6379> get name // 获取值,返回值
"tingyuge"
127.0.0.1:6379> del name // 删除键值
(integer) 1
127.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) 1
127.0.0.1:6379> rpush list-key item2
(integer) 2
127.0.0.1:6379> rpush list-key item
(integer) 3
127.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) 4
127.0.0.1:6379> lrange list-key 0 -1
1) "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) 1
127.0.0.1:6379> sadd set-key "item1"
(integer) 1
127.0.0.1:6379> sadd set-key "item2"
(integer) 1
127.0.0.1:6379> sadd set-key "item2" // 元素已经存在,添加失败,返回0
(integer) 0
127.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) 1
127.0.0.1:6379> srem set-key item // 删除元素,成功返回删除的个数
(integer) 1
127.0.0.1:6379> srem set-key item // 删除不存在的元素返回0,删除失败返回0
(integer) 0
127.0.0.1:6379> sismember set-key item // 元素已经删除
(integer) 0
127.0.0.1:6379> smembers set-key
1) "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) 1
127.0.0.1:6379> zadd zset-key 2 item
(integer) 0
127.0.0.1:6379> zadd zset-key 2 item2
(integer) 1
127.0.0.1:6379> zadd zset-key 3 item3
(integer) 1
127.0.0.1:6379> zcard zset-key // 计算成员数
(integer) 3
127.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 // 获取元素同时获取元素的score
1) "item"
2) "2"
3) "item2"
4) "2"
5) "item3"
6) "3"
127.0.0.1:6379> zrem zset-key item // 删除元素
(integer) 1
127.0.0.1:6379> zscore zset-key item2 // 获取元素的score
"2"
127.0.0.1:6379> zrevrank zset-key item2 // 获取元素的排名
(integer) 1
127.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表
OK
127.0.0.1:6379> hgetall hash-key // 获取hash的keys与values
1) "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-key
1) "name"
2) "age"
127.0.0.1:6379> hmget hash-key name
1) "tingyuge"
127.0.0.1:6379> hset hash-key city "nanjing" // 设置key的值
(integer) 1
127.0.0.1:6379> hgetall hash-key
1) "name"
2) "tingyuge"
3) "age"
4) "20"
5) "city"
6) "nanjing"
127.0.0.1:6379> hvals hash-key
1) "tingyuge"
2) "20"
3) "nanjing"
127.0.0.1:6379>