[关闭]
@tingyuge 2016-10-03T16:23:08.000000Z 字数 3666 阅读 1399

Redis学习笔记

PHP Redis


Redis简介

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  • 还提供list,set,zset,hash等多种数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

Redis的数据类型

Redis支持五种数据类型:string(字符串)hash(哈希)list(列表)set(集合)zset(sorted set:有序集合)

string字符串类型

string是Redis最基本的类型,一个key对应一个value。Redis的string可以存储任何数据,包括对象序列化之后的字符串。一个key最大可以存储512M的string数据。可以类似的理解为josn

  1. [
  2. "name": "tingyugetc",
  3. "age": "20",
  4. ]

对于string的一般操作方法有如下几种:

命令 备注
set 设置键的值
get 获取键的值
del 删除键值

示例:

  1. 127.0.0.1:6379> set name "tingyuge" // 设置值,成功返回OK
  2. OK
  3. 127.0.0.1:6379> get name // 获取值,返回值
  4. "tingyuge"
  5. 127.0.0.1:6379> del name // 删除键值
  6. (integer) 1
  7. 127.0.0.1:6379> get name // 再次尝试获取值,获取不到返回nil
  8. (nil)
  9. 127.0.0.1:6379>
list列表类型

list可以在一个键下面存储多个值,这些值可以是重复的值。

  1. [
  2. "user": [
  3. "tingyuge",
  4. "china",
  5. "20"
  6. ]
  7. ]

其常用的操作方法:

命令 备注
rpush 从列表的右侧添加元素
lpush 从列表的左侧添加元素
rpop 从列表的右侧删除一个元素
lpop 从列表的左侧删除一个元素
lindex 获取列表在给定位置上的一个元素
lrange 获取给定范围所有元素

示例:

  1. 127.0.0.1:6379> rpush list-key item // 右侧添加,添加成功会返回当前列表的长度
  2. (integer) 1
  3. 127.0.0.1:6379> rpush list-key item2
  4. (integer) 2
  5. 127.0.0.1:6379> rpush list-key item
  6. (integer) 3
  7. 127.0.0.1:6379> lrange list-key 0 -1 // 获取一定范围内的值, 返回范围的值,其中-1代表元素结束的位置。
  8. 1) "item"
  9. 2) "item2"
  10. 3) "item"
  11. 127.0.0.1:6379> lpush list-key item3 // 左侧添加
  12. (integer) 4
  13. 127.0.0.1:6379> lrange list-key 0 -1
  14. 1) "item3" // 左侧添加的元素在最前面
  15. 2) "item"
  16. 3) "item2"
  17. 4) "item"
  18. 127.0.0.1:6379>
set集合类型

set集合list列表类似,只不过在set集合中不能存储重复的元素。

  1. [
  2. "user": {
  3. "tingyugetc",
  4. "tingyugetc1",
  5. "tingyugetc2"
  6. }
  7. ]

其常用的方法为:

命令 备注
sadd 将指定的元素添加到集合
smembers 返回集合所包含的所有元素,如果数据量大, 谨慎使用
sismember 检查给定的元素是否在集合中
srem 如果给定的元素在集合中,则删除它

示例:

  1. 127.0.0.1:6379> sadd set-key "item" // 添加成功,返回1
  2. (integer) 1
  3. 127.0.0.1:6379> sadd set-key "item1"
  4. (integer) 1
  5. 127.0.0.1:6379> sadd set-key "item2"
  6. (integer) 1
  7. 127.0.0.1:6379> sadd set-key "item2" // 元素已经存在,添加失败,返回0
  8. (integer) 0
  9. 127.0.0.1:6379> smembers set-key // 查看元素
  10. 1) "item2"
  11. 2) "item1"
  12. 3) "item"
  13. 127.0.0.1:6379> sismember set-key item // 检查元素是否在集合中,在返回1,不在返回0
  14. (integer) 1
  15. 127.0.0.1:6379> srem set-key item // 删除元素,成功返回删除的个数
  16. (integer) 1
  17. 127.0.0.1:6379> srem set-key item // 删除不存在的元素返回0,删除失败返回0
  18. (integer) 0
  19. 127.0.0.1:6379> sismember set-key item // 元素已经删除
  20. (integer) 0
  21. 127.0.0.1:6379> smembers set-key
  22. 1) "item2"
  23. 2) "item1"
  24. 127.0.0.1:6379>
zset有序集合

zsetset一样都不允许存在重复的元素,不同的是zset的每个元素都会关联一个score,Redis正是通过score对元素进行从小到大的排序。zset的元素是唯一的但是score可以重复。

  1. [
  2. "user": {
  3. 1: "tingyugetc",
  4. 2: "tingyugetc2",
  5. 3: "tingyugetc3"
  6. }
  7. ]

其常用的操作:

命令 备注
zadd 向有序集合添加一个或多个成员,或者更新已存在成员的分数
zcard 获取有序集合的成员数
zrange 通过索引区间返回有序集合成指定区间内的成员
zrem 移除有序集合中的一个或多个成员
zscore 返回有序集中,成员的分数值
zrevrank 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

示例:

  1. 127.0.0.1:6379> zadd zset-key 1 item // 添加元素
  2. (integer) 1
  3. 127.0.0.1:6379> zadd zset-key 2 item
  4. (integer) 0
  5. 127.0.0.1:6379> zadd zset-key 2 item2
  6. (integer) 1
  7. 127.0.0.1:6379> zadd zset-key 3 item3
  8. (integer) 1
  9. 127.0.0.1:6379> zcard zset-key // 计算成员数
  10. (integer) 3
  11. 127.0.0.1:6379> zrange zset-key 0 -1 // 获取索引区间内的元素
  12. 1) "item"
  13. 2) "item2"
  14. 3) "item3"
  15. 127.0.0.1:6379> zrange zset-key 0 -1 withscores // 获取元素同时获取元素的score
  16. 1) "item"
  17. 2) "2"
  18. 3) "item2"
  19. 4) "2"
  20. 5) "item3"
  21. 6) "3"
  22. 127.0.0.1:6379> zrem zset-key item // 删除元素
  23. (integer) 1
  24. 127.0.0.1:6379> zscore zset-key item2 // 获取元素的score
  25. "2"
  26. 127.0.0.1:6379> zrevrank zset-key item2 // 获取元素的排名
  27. (integer) 1
  28. 127.0.0.1:6379>
Hash哈希

hash是一个string类型的fieldvalue的映射表,hash特别适合用于存储对象。

  1. [
  2. "user": {
  3. "name": "tingyuge",
  4. "age": "20"
  5. }
  6. ]

常用的操作:

命令 备注
hmset 同时将多个 field-value (域-值)对设置到哈希表 key 中。
hset 将哈希表 key 中的字段 field 的值设为 value 。
hmget 获取所有给定字段的值
hget 获取存储在哈希表中指定字段的值。
hgetall 获取在哈希表中指定 key 的所有字段和值
hkeys 获取所有哈希表中的字段键值
hvals 获取哈希表中所有值
hdel 删除一个或多个哈希表字段

示例:

  1. 127.0.0.1:6379> hmset hash-key name "tingyuge" age "20" // 设置hash表
  2. OK
  3. 127.0.0.1:6379> hgetall hash-key // 获取hash的keys与values
  4. 1) "name"
  5. 2) "tingyuge"
  6. 3) "age"
  7. 4) "20"
  8. 127.0.0.1:6379> hget hash-key name // 获取name的值
  9. "tingyuge"
  10. 127.0.0.1:6379> hkeys hash-key
  11. 1) "name"
  12. 2) "age"
  13. 127.0.0.1:6379> hmget hash-key name
  14. 1) "tingyuge"
  15. 127.0.0.1:6379> hset hash-key city "nanjing" // 设置key的值
  16. (integer) 1
  17. 127.0.0.1:6379> hgetall hash-key
  18. 1) "name"
  19. 2) "tingyuge"
  20. 3) "age"
  21. 4) "20"
  22. 5) "city"
  23. 6) "nanjing"
  24. 127.0.0.1:6379> hvals hash-key
  25. 1) "tingyuge"
  26. 2) "20"
  27. 3) "nanjing"
  28. 127.0.0.1:6379>
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注