redis

redis

July 14, 2017
Nosql, Redis

redis 是一个高速的高级的键值对存储系统。开源的,高可用,高效。 其将数据完全保存在内存中,磁盘只做持久化。并且支持多种数据结构:list、set、hashtable等,使用方便。 使用的场景主要有:

  • 如排行榜、计数器缓冲、数据统计(如TopN,交集,并集等)、最新项目检索、地理位置存储及range查询
  • 实时统计和过期处理,如用户投票及排序;复杂的数据结构缓存及内存数据库
  • 缓存,消息队列(Redis本地支持发布/订阅),应用程序中的任何短期数据,例如,web应用程序中的会话,网页命中计数等。

由于其属于内存数据库,所以成本比较大,冈起来比较爽一点。

Install on Ubuntu #

sudo apt-get install redis-server

Startup #

redis-server

Work on it #

redis-cli

# 出现命令提示符即正常工作

支持的数据结构 #

正时因为支持这些数据结构才易用。

字符串 #

Redis中的字符串是一个字节序列。Redis中的字符串是二进制安全的,这意味着它们的长度不由任何特殊的终止字符决定。因此,可以在一个字符串中存储高达512兆字节的任何内容。

set name `Paladnix` # 存入key-value

get name # 获取key对应的value

Hash散列 #

Redis散列/哈希(Hashes)是键值对的集合。Redis散列/哈希是字符串字段和字符串值之间的映射。因此,它们用于表示对象。

HMSET key uname "Paladnix" password "123" level 0
# key 对应一个对象

列表List #

Redis列表只是字符串列表,按插入顺序排序。可以向Redis列表的头部或尾部添加元素。

lpush alist redis   # 插入字符串
lpush alist Paladnix # 插入字符串

lrange alist 0 10   # 获取字符串

集合Set #

Redis集合是字符串的无序集合。在Redis中,可以添加,删除和测试成员存在的时间O(1)复杂性。

sadd yiibailist redis   # 添加字符串

smembers yiibailist     # 输出结果

可排序集合 #

Redis可排序集合类似于Redis集合,是不重复的字符集合。 不同之处在于,排序集合的每个成员都与分数相关联,这个分数用于按最小分数到最大分数来排序的排序集合。虽然成员是唯一的,但分数值可以重复。

zadd yiibaiset 0 redis

ZRANGEBYSCORE yiibaiset 0 1000  # 输出结果

命令 #

其实redis的使用跟数据库差不多。 具体的数据操作命令其实非常的简单就不一一介绍了,我自己也用的不熟。那些命令都能很容易获得,介绍一点好玩的命令就好了。

远程链接 #

示例显示如何连接到Redis远程服务器,在主机(host)127.0.0.1,端口(port)6379上运行,并使用密码为 mypass

redis-cli -h 127.0.0.1 -p 6379 -a "mypass"

发送订阅 #

Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。 Redis 发布订阅(pub/sub)实现了消息系统,发送者(在redis术语中称为发布者)在接收者(订阅者)接收消息时发送消息。传送消息的链路称为信道。

在Redis中,客户端可以订阅任意数量的信道。

SUBSCRIBE redisChat # 订阅名为"redisChat"的信道。

PUBLISH redisChat "Redis is a great caching technique" 

程序连接Redis #

跟使用数据库一样,不过不一样的是这个比较统一和简单。

java #


/*
    Java 连接Redis. 字符串操作。
*/
import redis.clients.jedis.Jedis; 

public class RedisStringJava { 
   public static void main(String[] args) { 
      //Connecting to Redis server on localhost 
      Jedis jedis = new Jedis("localhost"); 
      System.out.println("Connection to server sucessfully"); 
      //set the data in redis string 
      jedis.set("tutorial-name", "Redis tutorial"); 
      // Get the stored data and print it 
      System.out.println("Stored string in redis:: "+ jedis.get("tutorialname")); 
   } 
}


/*
    Java Redis List 操作
*/
import redis.clients.jedis.Jedis; 

public class RedisListJava { 
   public static void main(String[] args) { 
      //Connecting to Redis server on localhost 
      Jedis jedis = new Jedis("localhost"); 
      System.out.println("Connection to server sucessfully"); 

      //store data in redis list 
      jedis.lpush("tutorial-list", "Redis"); 
      jedis.lpush("tutorial-list", "Mongodb"); 
      jedis.lpush("tutorial-list", "Mysql"); 
      // Get the stored data and print it 
      List<String> list = jedis.lrange("tutorial-list", 0 ,5); 

      for(int i = 0; i<list.size(); i++) { 
         System.out.println("Stored string in redis:: "+list.get(i)); 
      } 
   } 
}

/*
    Java Redis Key 操作
*/
import redis.clients.jedis.Jedis; 

public class RedisKeyJava { 
   public static void main(String[] args) { 
      //Connecting to Redis server on localhost 
      Jedis jedis = new Jedis("localhost"); 
      System.out.println("Connection to server sucessfully"); 
      //store data in redis list 
      // Get the stored data and print it 
      List<String> list = jedis.keys("*"); 

      for(int i = 0; i<list.size(); i++) { 
         System.out.println("List of stored keys:: "+list.get(i)); 
      } 
   } 
}

PHP-Redis on Ubuntu #

下载phpredis项目代码并安装。

cd phpredis 
sudo phpize 
sudo ./configure 
sudo make 
sudo make install

现在,将“modules”文件夹的内容复制并粘贴到PHP扩展目录中,并在php.ini中添加以下行extension = redis.so

// Connect & String
<?php 
   //Connecting to Redis server on localhost 
   $redis = new Redis(); 
   $redis->connect('127.0.0.1', 6379); 
   echo "Connection to server sucessfully"; 
   //set the data in redis string 
   $redis->set("tutorial-name", "Redis tutorial"); 
   // Get the stored data and print it 
   echo "Stored string in redis:: " .$redis→get("tutorial-name"); 
?>


// List 操作
<?php 
   //Connecting to Redis server on localhost 
   $redis = new Redis(); 
   $redis->connect('127.0.0.1', 6379); 
   echo "Connection to server sucessfully"; 
   //store data in redis list 
   $redis->lpush("tutorial-list", "Redis"); 
   $redis->lpush("tutorial-list", "Mongodb"); 
   $redis->lpush("tutorial-list", "Mysql");  

   // Get the stored data and print it 
   $arList = $redis->lrange("tutorial-list", 0 ,5); 
   echo "Stored string in redis:: "; 
   print_r($arList); 
?>