ホームページ  >  記事  >  バックエンド開発  >  キー/値データベース Redis と TTSERVER_PHP チュートリアルの使用経験

キー/値データベース Redis と TTSERVER_PHP チュートリアルの使用経験

WBOY
WBOYオリジナル
2016-07-21 15:02:13777ブラウズ

先说redis
redis是一个类似memcached的key/value存储系统,它支持存储的value类型相对较多,包括string(字符串)、 list(链表)、set(集合)和zset(有序集合)。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件(这点儿个人觉得redis比memcache 在数据保存上要安全一些),并且在此基础上实现了master- slave(主从)同步。

redis的存取性能很高,SET操作每秒钟 110000 次,GET操作每秒钟 81000 次(速度很爽!)。
Redis针对不同的存储类型对象提供了不同的命令。
redis目前提供四种数据类型:string,list,set及zset(sorted set)。
string是最简单的类型,你可以理解成与Memcached一模一个的类型,一个key对应一个value,其上支持的操作与Memcached的操 作类似。但它的功能更丰富。

list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。操作中key理解为链表的名字。
set是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作。操作中key理解为集合的名字。

zset是set的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的 值调整顺序。可以理解了有两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。

下面提供redis命令:
适合全体类型的命令
EXISTS key 判断一个键是否存在;存在返回 1;否则返回0;
DEL key 删除某个key,或是一系列key;DEL key1 key2 key3 key4
TYPE key 返回某个key元素的数据类型 ( none:不存在,string:字符,list,set,zset,hash)
KEYS pattern 返回匹配的key列表 (KEYS foo*:查找foo开头的keys)
RANDOMKEY 随机获得一个已经存在的key,如果当前数据库为空,则返回空字符串
RENAME oldname newname更改key的名字,新键如果存在将被覆盖
RENAMENX oldname newname 更改key的名字,如果名字存在则更改失败
DBSIZE返回当前数据库的key的总数
EXPIRE设置某个key的过期时间(秒),(EXPIRE bruce 1000:设置bruce这个key1000秒后系统自动删除)注意:如果在还没有过期的时候,对值进行了改变,那么那个值会被清除。
TTL查找某个key还有多长时间过期,返回时间秒
SELECT index 选择数据库
MOVE key dbindex 将指定键从当前数据库移到目标数据库 dbindex。成功返回 1;否则返回0(源数据库不存在key或目标数据库已存在同名key);
FLUSHDB 清空当前数据库中的所有键
FLUSHALL 清空所有数据库中的所有键

处理字符串的命令
SET key value 给一个键设置字符串值。SET keyname datalength data (SET bruce 10 paitoubing:保存key为burce,字符串长度为10的一个字符串paitoubing到数据库),data最大不可超过1G。
GET key获取某个key 的value值。如key不存在,则返回字符串“nil”;如key的值不为字符串类型,则返回一个错误。

GETSET key value可以理解成获得的key的值然后SET这个值,更加方便的操作 (SET bruce 10 paitoubing,这个时候需要修改bruce变成1234567890并获取这个以前的数据paitoubing,GETSET bruce 10 1234567890)
MGET key1 key2 … keyN 一次性返回多个键的值

SETNX key value SETNX与SET的区别是SET可以创建与更新key的value,而SETNX是如果key不存在,则创建key与value数据
MSET key1 value1 key2 value2 … keyN valueN 在一次原子操作下一次性设置多个键和值
MSETNX key1 value1 key2 value2 … keyN valueN 在一次原子操作下一次性设置多个键和值(目标键不存在情况下,如果有一个以上的key已存在,则失败)
INCR key 自增键值
INCRBY key integer 令键值自增指定数值
DECR key 自减键值
DECRBY key integer 令键值自减指定数值

处理 lists 的命令
RPUSH key value 从 List 尾部添加一个元素(如序列不存在,则先创建,如已存在同名Key而非序列,则返回错误)
LPUSH key value 从 List 头部添加一个元素
LLEN key 返回一个 List 的长度
LRANGE key start end从自定的范围内返回序列的元素 (LRANGE testlist 0 2;返回序列testlist前0 1 2元素)
LTRIM key start end修剪某个范围之外的数据 (LTRIM testlist 0 2;保留0 1 2元素,其余的删除)
LINDEX key index返回某个位置的序列值(LINDEX testlist 0;返回序列testlist位置为0的元素)
LSET key index value更新某个位置元素的值
LREM key count value 从 List 的头部(count正数)或尾部(count负数)删除一定数量(count)匹配value的元素,返回删除的元素数量。
LPOP key 弹出 List 的第一个元素
RPOP key 弹出 List 的最后一个元素
RPOPLPUSH srckey dstkey 弹出 _srckey_ 中最后一个元素并将其压入 _dstkey_头部,key不存在或序列为空则返回“nil”

处理集合(sets)的命令(有索引无序序列)
SADD key member增加元素到SETS序列,如果元素(membe)不存在则添加成功 1,否则失败 0;(SADD testlist 3 /n one)
SREM key member 删除SETS序列的某个元素,如果元素不存在则失败0,否则成功 1(SREM testlist 3 /N one)
SPOP key 从集合中随机弹出一个成员
SMOVE srckey dstkey member 把一个SETS序列的某个元素 移动到 另外一个SETS序列 (SMOVE testlist test 3/n two;从序列testlist移动元素two到 test中,testlist中将不存在two元素)
SCARD key 统计某个SETS的序列的元素数量
SISMEMBER key member 获知指定成员是否存在于集合中
SINTER key1 key2 … keyN 返回 key1, key2, …, keyN 中的交集
SINTERSTORE dstkey key1 key2 … keyN 将 key1, key2, …, keyN 中的交集存入 dstkey
SUNION key1 key2 … keyN 返回 key1, key2, …, keyN 的并集
SUNIONSTORE dstkey key1 key2 … keyN 将 key1, key2, …, keyN 的并集存入 dstkey
SDIFF key1 key2 … keyN 依据 key2, …, keyN 求 key1 的差集。官方例子:
key1 = x,a,b,c
key2 = c
key3 = a,d
SDIFF key1,key2,key3 => x,b
SDIFFSTORE dstkey key1 key2 … keyN 依据 key2, …, keyN 求 key1 的差集并存入 dstkey
SMEMBERS key 返回某个序列的所有元素
SRANDMEMBER key 随机返回某个序列的元素

处理有序集合(sorted sets)的命令 (zsets)
ZADD key score member 添加指定成员到有序集合中,如果目标存在则更新score(分值,排序用)
ZREM key member 从有序集合删除指定成员
ZINCRBY key increment member 如果成员存在则将其增加_increment_,否则将设置一个score为_increment_的成员
ZRANGE key start end 返回升序排序后的指定范围的成员
ZREVRANGE key start end 返回降序排序后的指定范围的成员
ZRANGEBYSCORE key min max 返回所有符合score >= min和score <= max的成员 ZCARD key 返回有序集合的元素数量 ZSCORE key element 返回指定成员的SCORE值 ZREMRANGEBYSCORE key min max 删除符合 score >= min 和 score <= max 条件的所有成员。

使用体会:
个人在觉得redis速度是不用说了(很快的),但是很消耗物理内存,算是redis的一个弊端吧,redis适合数据量比较小速度更新快的类型的网站,比如社区,不适合数据比较庞大的网站,比如论坛。以前用redis应用的一个论坛帖子上,但是因为数据量太大,消耗物理内存惊人而放弃了用 redis!

TTSERVERについて話しましょう
Tokyo CabinetはDBMの実装です。ここでのデータベースは、キーと値のペアの一連のレコードで構成されます。キーと値はどちらも、バイナリまたは文字列の任意の長さのバイト シーケンスにすることができます。データ型やデータテーブルという概念はありません。ハッシュ テーブル データベースとして使用する場合、各キーは異なる必要があるため、2 つのキーに同じ値を格納することはできません。次のアクセス方法が提供されています: ストレージのキーと値のパラメーターの提供、キーによるレコードの削除、およびキーによるレコードの読み取り。ただし、順序は任意であり保証できません。これらのメソッドは、GDBM、NDBM などの Unix 標準 DBM と同じですが、パフォーマンスはそれらよりもはるかに優れています (そのため、B+ ツリーとして保存すると、同じキーを持つレコードを置き換えることもできます)。保管されています。ハッシュ テーブルのような読み取り、保存、削除機能も提供されます。レコードは、ユーザー指定の比較関数に従って保存されます。順次カーソルまたは逆カーソルを使用して、各レコードを読み取ることができます。この原理に従って、前方文字列一致検索と整数間隔検索も実装されます。また、B+ツリー取引も可能です。固定長配列の場合、レコードは自然数でラベル付けされて保存されます。同じキーを持つ複数のレコードを保存することはできません。さらに、各レコードの長さは制限されています。読み取り方法はハッシュテーブルと同様です。 Tokyo Cabinet は C で書かれており、C、perl、ruby、java 用の API を提供します。 Tokyo Cabinet は POSIX と C99 プラットフォームの両方で利用でき、GNU Lesser Public License に基づいてリリースされています。

tokyocabinet: キーと値の DBM データベースですが、ネットワーク インターフェイス (以下 TC と呼びます) は提供しません。
tokyotyrant: は TC 用に作成されたネットワーク インターフェイスであり、memcache プロトコルをサポートしており、HTTP (以降 TT と呼びます) を通じて操作することもできます。

パフォーマンス:
Tokyo Cabinet は日本人の平林幹雄氏によって開発された DBM データベースであり、GNU Lesser General Public License に基づいてリリースされており、C99 および POSIX をサポートする任意のプラットフォームで実行できます。 。通常のDBMデータベースと比較して、省スペース、高効率、高パフォーマンス、高信頼性、複数の開発言語のサポート(C、Perl、Ruby、Java、LuaのAPIが利用可能)、 64 オペレーティング システムをサポートします。データベースの読み取りと書き込みは、ハッシュ モードで 100 万個のデータを書き込むのにわずか 0.643 秒かかり、100 万個のデータを読み取るのにわずか 0.773 秒かかります。これは、Berkeley DB などの DBM よりも数倍高速です。 。

Tokyo Tyrant と Tokyo Cabinet は、高い同時実行性をサポートする分散永続ストレージ システムを形成します。元の Memcached クライアントの場合、Tokyo Tyrant は Memcached と見なされますが、そのデータは永続ストレージである可能性があります。これは Sina の Memcachedb と同じです。

ttserver と memcache の比較:
ttserver はデータベースであり、memcached はキャッシュです。どちらもデータを の形式で保存し、キーを介してあらゆる操作を実行します。 ttserver はデータを保持できますが、memcached はすべてのデータをメモリに保存します。期限切れのデータは最大 30 日間自動的に削除されます。 memcached が一部の API と連携すると、データの入出力を自動的にシリアル化したり、データの読み取りと逆シリアル化を実行したりできます。 ttserverはデータベース独自のマスタ・スレーブレプリケーション機能や操作ログなどを備えています。 memcached は全体的なアーキテクチャを調整しており、将来的にはネットワーク、イベント処理、メモリ ストレージを分離する予定であると言われています。ストレージ エンジンを作成します。 memcached の二次開発は小さな佳境に入りました。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327945.html技術記事まず Redis について説明します。Redis は、memcached に似たキー/値ストレージ システムです。文字列 (文字列)、リスト (リンク リスト)、セット (セット)、および zset (順序付きセット) など、比較的多くの値の型をサポートしています。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。