Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis与其他key-value缓存有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis支持数据的备份,即master-slave模式的数据备份。Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
string(字符串) string是redis最基本的类型,一个key对应一个value。string类型是二进制安全的。即redis的string可以包含任何数据。比如jpg图片或者序列化的对象。string类型是Redis最基本的数据类型,一个键最大能存储512MB。
hash(哈希) Redis hash是一个键名对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
list(列表) Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。set(集合) Redis的Set是string类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。zset(sorted set:有序集合) Redis zset 和set一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。使用redis-server命令启动redis客户端,打开终端并输入命令redis-cli。该命令会连接本地的redis服务。
$redis-cliredis 127.0.0.1:6379>redis 127.0.0.1:6379> PINGPONG连接到本地的redis服务并执行PING命令,该命令用于检测redis服务是否启动。
如果需要在远程redis服务上执行命令,同样我们使用的也是redis-cli命令。
redis-cli -h host -p port -a password实例: 连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass 的 redis 服务上
$redis-cli -h 127.0.0.1 -p 6379 -a "mypass"redis 127.0.0.1:6379>redis 127.0.0.1:6379> PINGPONGRedis DEL命令用于删除已存在的键。不存在的key会被忽略。
redis 127.0.0.1:6379> DEL KEY_NAME返回值:被删除 key 的数量
实例:
redis 127.0.0.1:6379> SET w3ckey redisOKredis 127.0.0.1:6379> DEL w3ckey(integer) 1Redis EXISTS命令用于检查给定key是否存在。
redis 127.0.0.1:6379> EXISTS KEY_NAME返回值:若key存在返回1 ,否则返回0。
实例:
redis 127.0.0.1:6379> EXISTS runoob-new-key(integer) 0redis 127.0.0.1:6379> set runoob-new-key newkeyOKredis 127.0.0.1:6379> EXISTS runoob-new-key(integer) 1Redis Expire命令用于设置key的过期时间。key过期后将不再可用。
redis 127.0.0.1:6379> Expire KEY_NAME TIME_IN_SECONDS返回值:设置成功返回1 。 当key不存在或者不能为key设置过期时间时(比如在低于2.1.3 版本的Redis 中你尝试更新key的过期时间)返回 0 。
实例:
redis 127.0.0.1:6379> SET runooobkey redisOKredis 127.0.0.1:6379> EXPIRE runooobkey 60(integer) 1我们为键runooobkey设置了过期时间为1分钟,1分钟后该键会自动删除。
Redis MOVE命令用于将当前数据库的key移动到给定的数据库db当中。
redis 127.0.0.1:6379> MOVE KEY_NAME DESTINATION_DATABASE返回值:移动成功返回1 ,失败则返回0 。
实例:
# key 存在于当前数据库redis> SELECT 0 # redis默认使用数据库 0,为了清晰起见,这里再显式指定一次。OKredis> SET song "secret base - Zone"OKredis> MOVE song 1 # 将 song 移动到数据库 1(integer) 1redis> EXISTS song # song 已经被移走(integer) 0redis> SELECT 1 # 使用数据库 1OKredis:1> EXISTS song # 证实 song 被移到了数据库 1 (注意命令提示符变成了"redis:1",表明正在使用数据库 1)(integer) 1# 当 key 不存在的时候redis:1> EXISTS fake_key(integer) 0redis:1> MOVE fake_key 0 # 试图从数据库 1 移动一个不存在的 key 到数据库 0,失败(integer) 0redis:1> select 0 # 使用数据库0OKredis> EXISTS fake_key # 证实 fake_key 不存在(integer) 0# 当源数据库和目标数据库有相同的 key 时redis> SELECT 0 # 使用数据库0OKredis> SET favorite_fruit "banana"OKredis> SELECT 1 # 使用数据库1OKredis:1> SET favorite_fruit "apple"OKredis:1> SELECT 0 # 使用数据库0,并试图将 favorite_fruit 移动到数据库 1OKredis> MOVE favorite_fruit 1 # 因为两个数据库有相同的 key,MOVE 失败(integer) 0redis> GET favorite_fruit # 数据库 0 的 favorite_fruit 没变"banana"redis> SELECT 1OKredis:1> GET favorite_fruit # 数据库 1 的 favorite_fruit 也是"apple"Redis TTL命令以秒为单位返回key的剩余过期时间。
redis 127.0.0.1:6379> TTL KEY_NAME返回值:当key不存在时,返回-2 。 当key存在但没有设置剩余生存时间时,返回 -1 。否则,以秒为单位,返回 key 的剩余生存时间。 注意:在 Redis2.8以前,当key不存在,或者key没有设置剩余生存时间时,命令都返回-1 。
实例:
# 不存在的 keyredis> FLUSHDBOKredis> TTL key(integer) -2# key 存在,但没有设置剩余生存时间redis> SET key valueOKredis> TTL key(integer) -1# 有剩余生存时间的 keyredis> EXPIRE key 10086(integer) 1redis> TTL key(integer) 10084Redis Type命令用于返回key所储存的值的类型。
redis 127.0.0.1:6379> TYPE KEY_NAME返回值:返回key的数据类型,数据类型有: none (key不存在) string (字符串) list (列表) set (集合) zset (有序集) hash (哈希表)
实例:
# 字符串redis> SET weather "sunny"OKredis> TYPE weatherstring# 列表redis> LPUSH book_list "programming in scala"(integer) 1redis> TYPE book_listlist# 集合redis> SADD pat "dog"(integer) 1redis> TYPE patset