Redis初探&基本命令(一)

来源:互联网 发布:mix软件是什么 编辑:程序博客网 时间:2024/05/18 07:32

Redis简介

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

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

Redis优势

  • 性能极高:Redis能读的速度是110000次/s,写的速度是81000次/s。
  • 丰富的数据类型:Redis支持二进制案例的Strings, Lists, Hashes, Sets 及Ordered Sets数据类型操作。
  • 原子:Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  • 丰富的特性:Redis还支持publish/subscribe, 通知, key过期等等特性。

Redis与其他key-value存储有什么不同?

  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
  • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

Redis数据类型

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

  1. string(字符串) 
    string是redis最基本的类型,一个key对应一个value。string类型是二进制安全的。即redis的string可以包含任何数据。比如jpg图片或者序列化的对象。string类型是Redis最基本的数据类型,一个键最大能存储512MB。

  2. hash(哈希) 
    Redis hash是一个键名对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

  3. list(列表) 
    Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
  4. set(集合) 
    Redis的Set是string类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
  5. zset(sorted set:有序集合) 
    Redis zset 和set一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

Redis命令

启动客户端命令

使用redis-server命令启动redis客户端,打开终端并输入命令redis-cli。该命令会连接本地的redis服务。

  1. $redis-cli
  2. redis 127.0.0.1:6379>
  3. redis 127.0.0.1:6379> PING
  4. PONG

连接到本地的redis服务并执行PING命令,该命令用于检测redis服务是否启动。

如果需要在远程redis服务上执行命令,同样我们使用的也是redis-cli命令。

  1. redis-cli -h host -p port -a password

实例: 
连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass 的 redis 服务上

  1. $redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
  2. redis 127.0.0.1:6379>
  3. redis 127.0.0.1:6379> PING
  4. PONG

Redis keys命令

Redis DEL命令

Redis DEL命令用于删除已存在的键。不存在的key会被忽略。

  1. redis 127.0.0.1:6379> DEL KEY_NAME

返回值:被删除 key 的数量

实例:

  1. redis 127.0.0.1:6379> SET w3ckey redis
  2. OK
  3. redis 127.0.0.1:6379> DEL w3ckey
  4. (integer) 1

Redis EXISTS命令

Redis EXISTS命令用于检查给定key是否存在。

  1. redis 127.0.0.1:6379> EXISTS KEY_NAME

返回值:若key存在返回1 ,否则返回0。

实例:

  1. redis 127.0.0.1:6379> EXISTS runoob-new-key
  2. (integer) 0
  3. redis 127.0.0.1:6379> set runoob-new-key newkey
  4. OK
  5. redis 127.0.0.1:6379> EXISTS runoob-new-key
  6. (integer) 1

Redis Expire命令

Redis Expire命令用于设置key的过期时间。key过期后将不再可用。

  1. redis 127.0.0.1:6379> Expire KEY_NAME TIME_IN_SECONDS

返回值:设置成功返回1 。 当key不存在或者不能为key设置过期时间时(比如在低于2.1.3 版本的Redis 中你尝试更新key的过期时间)返回 0 。

实例:

  1. redis 127.0.0.1:6379> SET runooobkey redis
  2. OK
  3. redis 127.0.0.1:6379> EXPIRE runooobkey 60
  4. (integer) 1

我们为键runooobkey设置了过期时间为1分钟,1分钟后该键会自动删除。

Redis Move命令

Redis MOVE命令用于将当前数据库的key移动到给定的数据库db当中。

  1. redis 127.0.0.1:6379> MOVE KEY_NAME DESTINATION_DATABASE

返回值:移动成功返回1 ,失败则返回0 。

实例:

  1. # key 存在于当前数据库
  2. redis> SELECT 0 # redis默认使用数据库 0,为了清晰起见,这里再显式指定一次。
  3. OK
  4. redis> SET song "secret base - Zone"
  5. OK
  6. redis> MOVE song 1 # 将 song 移动到数据库 1
  7. (integer) 1
  8. redis> EXISTS song # song 已经被移走
  9. (integer) 0
  10. redis> SELECT 1 # 使用数据库 1
  11. OK
  12. redis:1> EXISTS song # 证实 song 被移到了数据库 1 (注意命令提示符变成了"redis:1",表明正在使用数据库 1)
  13. (integer) 1
  14. # 当 key 不存在的时候
  15. redis:1> EXISTS fake_key
  16. (integer) 0
  17. redis:1> MOVE fake_key 0 # 试图从数据库 1 移动一个不存在的 key 到数据库 0,失败
  18. (integer) 0
  19. redis:1> select 0 # 使用数据库0
  20. OK
  21. redis> EXISTS fake_key # 证实 fake_key 不存在
  22. (integer) 0
  23. # 当源数据库和目标数据库有相同的 key 时
  24. redis> SELECT 0 # 使用数据库0
  25. OK
  26. redis> SET favorite_fruit "banana"
  27. OK
  28. redis> SELECT 1 # 使用数据库1
  29. OK
  30. redis:1> SET favorite_fruit "apple"
  31. OK
  32. redis:1> SELECT 0 # 使用数据库0,并试图将 favorite_fruit 移动到数据库 1
  33. OK
  34. redis> MOVE favorite_fruit 1 # 因为两个数据库有相同的 key,MOVE 失败
  35. (integer) 0
  36. redis> GET favorite_fruit # 数据库 0 的 favorite_fruit 没变
  37. "banana"
  38. redis> SELECT 1
  39. OK
  40. redis:1> GET favorite_fruit # 数据库 1 的 favorite_fruit 也是
  41. "apple"

Redis TTL命令

Redis TTL命令以秒为单位返回key的剩余过期时间。

  1. redis 127.0.0.1:6379> TTL KEY_NAME

返回值:当key不存在时,返回-2 。 当key存在但没有设置剩余生存时间时,返回 -1 。否则,以秒为单位,返回 key 的剩余生存时间。 
注意:在 Redis2.8以前,当key不存在,或者key没有设置剩余生存时间时,命令都返回-1 。

实例:

  1. # 不存在的 key
  2. redis> FLUSHDB
  3. OK
  4. redis> TTL key
  5. (integer) -2
  6. # key 存在,但没有设置剩余生存时间
  7. redis> SET key value
  8. OK
  9. redis> TTL key
  10. (integer) -1
  11. # 有剩余生存时间的 key
  12. redis> EXPIRE key 10086
  13. (integer) 1
  14. redis> TTL key
  15. (integer) 10084

Redis Type命令

Redis Type命令用于返回key所储存的值的类型。

  1. redis 127.0.0.1:6379> TYPE KEY_NAME

返回值:返回key的数据类型,数据类型有: 
none (key不存在) 
string (字符串) 
list (列表) 
set (集合) 
zset (有序集) 
hash (哈希表)

实例:

  1. # 字符串
  2. redis> SET weather "sunny"
  3. OK
  4. redis> TYPE weather
  5. string
  6. # 列表
  7. redis> LPUSH book_list "programming in scala"
  8. (integer) 1
  9. redis> TYPE book_list
  10. list
  11. # 集合
  12. redis> SADD pat "dog"
  13. (integer) 1
  14. redis> TYPE pat
  15. set