Redisの高性能データベース

Redisの高性能データベース

、Redisの概要;
第二に、シーン解析の応用;
3、Redisのデータ復旧戦略;
4例:Redisの高性能なデータベースを構築します。

、Redisの概要:

概要:Redisのシングルスレッド型のキーと値の高速キャッシュ・メモリ・システムの永続シングルプロセスであり、文字列(文字列)を含む、比較的多くのストレージを値タイプをサポートしていますようにMemcachedの、一覧(リスト)、SET(コレクション)、ZSET(ソートセット-順序付きコレクション)とhashs(ハッシュタイプ)。これらのデータ型は、追加/削除して、交差点や労働組合、および差分演算より豊かに、プッシュ/ポップをサポートしています。
memcachedのと同じように、効率性を確保するために、データはメモリにキャッシュされています。違いは、保存するために、ハード・ディスク上のデータベースにデータをフラッシュするための非同期操作によって定期的にRedisのです。純粋なメモリ操作は、Redisの性能が優れているので、それは2回目の読み出しあたり10万回以上を処理し、操作を書くことができ、最速のパフォーマンスキー値DBで知られており、これに基づいてマスタースレーブ(マスタとスレーブ)を実現しています同期、現在のRedisのアプリケーションは非常に広範なシーナ、淘宝網など国内の、Flickrの、GitHubのように外国れている使用Redisのキャッシングサービスです。公式サイトアドレス:https://redis.io/、RedisのVMware社のベンダーのサポートにより、開発と保守プロジェクトのため、現在担当します。

利点:
1.高いパフォーマンスが毎秒--Redis + 100K以上の書き込み周波数をサポートすることができます。
2.リッチデータ型はバイナリケース文字列、リスト、ハッシュ、セットをサポート--Redis操作のデータタイプを設定順序。
Redisのは、いくつかの完全なおよび右後アトミック操作の実装をサポートしながら。3.すべての操作は、(つまり、すべての操作が成功または失敗のいずれかが実行されていない)アトミック--Redisアトミックです
4.Redisはメモリで実行するが、高速な読み取りおよび書き込みメモリは、異なるデータセットをトレードオフするようにデータがハードウェアメモリの量よりも大きくすることができないため、ディスクに保存することができます。あなたが内部のRedis非常に複雑な問題の多くを行うことができますので、インメモリ・データベースのもう一つの利点は、同じ複雑なデータ構造に比べて、ディスク上の非常に簡単なメモリで動作します。彼らはランダムアクセスを必要としないので、一方、そのコンパクトディスクフォーマットの面で、追加の方法を生成します。

第二に、アプリケーションの情景分析:

MySQL + memcachedのアーキテクチャの問題:実際のMySQLは大容量のデータ保存に適しているが、Memcachedの通過キャッシュにホット・データをロードし、より高速なアクセスのために、多くの企業は、このアーキテクチャを使用しているが、ビジネスデータの増加量と、そしてトラフィックの成長を続け、我々は多くの問題が発生しました:
1.MySQLは一定の解体解体ライブラリテーブルを必要とし、memcachedのは、開発時間の多くを取る拡張、拡張やメンテナンスに従うことを継続する必要があります。
2.MemcachedとMySQLデータベースのデータ整合性の問題。
3.Memcachedデータヒット率が低いか、マシンの下で、直接DBに至るまでのアクセスの多くは、MySQLがサポートすることはできません。
4.クロス部屋キャッシュ同期の問題。

Redisのアプリケーションのシナリオ:
Redisの高性能データベース
Redisのは、それを使用する際のMemcached、Redisのを使用するときに、より多くのMemcachedの強化版のようなものです?
また、リストを提供しながら1.Redis、データの簡単なK / Vタイプをサポートするだけでなく、セット、ZSET、ハッシュのようなデータ構造を格納。
バックアップデータ、すなわちデータバックアップマスタ・スレーブモードの2.Redisサポート。
3.Redis支援データの永続性をもう一度使用するロードすることができたときに、メモリ内のデータがディスク上に保存することができ、再起動してください。
4.Memcached:動的システムは、データベースの負荷を低減性能を向上させるために、キャッシュのようなより少ない読み書きするための、(例えば大すべてのネットワークユーザ情報の問い合わせの数、友人情報、記事、情報など)のデータ状況の大量。
 Redisの:適当に高く、高いセキュリティ要件(例えばXinlangマイクロボーがカウント及びシステム、データ・セキュリティの読み書き効率要件と複雑なシステムにデータ処理サービスは、読み取りおよび書き込みするために必要とされます高いです)。

三、Redisのデータ復旧戦略:

Redisの回復戦略:
揮発性-LRU:最低データからデータセットを選択するために使用さは、有効期限を設定し(server.db [I] .expires)において、
揮発性-TTL:データセット(サーバから有効期限を設定します.DB [i]は.expires)が日付データからなるように選択した。
揮発性ランダム:設定された有効期限データセット(server.db [I] .expires)任意のデータアウト選択;
AllKeys-LRU:からデータをセット(server.db [i]は.dict)最低使用頻度のデータのうち、選択された。
AllKeys乱数:データセットからデータを選択する(server.db [I] .dict)任意;
NO-enviction(追放)。追放データを禁止しています。

第四に、ストーリー:高性能なデータベースのRedisを構築します:

Redisの高性能データベース

実験手順:
ØRedisのサービスをインストールして構成します。
ØのRedisのは、コンフィギュレーションおよびサービスを調整し、
ØPHPテストRedisのサービスは、バインディング、
操作の文字列Redis;
オペレーティングRedisのリスト;
RedisのSET操作;
Redis操作のZSET;
Redisのハッシュ操作、
その他の操作オペレーションのRedis。

安装并配置Redis服务;
[root@redis ~]# wget http://download.redis.io/releases/redis-4.0.9.tar.gz
[root@redis ~]# tar zxvf redis-4.0.9.tar.gz 
[root@redis ~]# cd redis-4.0.9
[root@redis redis-4.0.9]# make 
[root@redis redis-4.0.9]# echo $?
[root@redis redis-4.0.9]# cd
[root@redis ~]# mkdir -p /usr/local/redis
[root@redis ~]# cp /root/redis-4.0.9/src/redis-server /usr/local/redis/     ##服务端程序
[root@redis ~]# cp /root/redis-4.0.9/src/redis-cli /usr/local/redis/            ##客户端程序
[root@redis ~]# cp /root/redis-4.0.9/redis.conf /usr/local/redis/               ##主配置文件
[root@redis ~]# ls /usr/local/redis/
redis-cli  redis.conf  redis-server
[root@redis ~]# sed -i '/^bind 127.0.0.1$/s/127.0.0.1/192.168.100.101/g' /usr/local/redis/redis.conf    
[root@redis ~]# sed -i '/protected-mode/s/yes/no/g' /usr/local/redis/redis.conf             ##关闭redis的保护模式
[root@redis ~]# sed -i '/daemonize/s/no/yes/g' /usr/local/redis/redis.conf                  ##开启redis的后台守护进程模式
[root@redis ~]# sed -i '/requirepass/s/foobared/123123/g' /usr/local/redis/redis.conf       ##设置redis的密码为123123
[root@redis ~]# sed -i '/requirepass 123123/s/^#//g' /usr/local/redis/redis.conf            ##开启redis的密码

附:redis.conf主配置文件详解
daemonize yes  #以后台daemon方式运行redis
pidfile "/var/run/redis.pid"  #redis以后台运行,默认pid文件路径/var/run/redis.pid
port 6379  #默认端口
bind 127.0.0.1 #默认绑定本机所有ip地址,为了安全,可以只监听内网ip
timeout 300 #客户端超时设置,单位为秒
loglevel verbose  #设置日志级别,支持四个级别:debug、notice、verbose、warning
logfile stdout  #日志记录方式,默认为标准输出,logs不写文件,输出到空设备/deb/null
logfile "/usr/local/redis/var/redis.log"  #可以指定日志文件路径
databases 16  #开启数据库的数量
save 900 1
save 300 10
save 60 10000
创建本地数据库快照,格式:save * *
900秒内,执行1次写操作后触发快照
300秒内,执行10次写操作
60秒内,执行10000次写操作
rdbcompression yes #启用数据库lzf压缩,也可以设置为no
dbfilename dump.rdb  #本地快照数据库名称
dir "/usr/local/redis/var/"   #本地快照数据库存放目录
requirepass 123456  #设置redis数据库连接密码
maxclients 10000 #同一时间最大客户端连接数,0为无限制
maxmemory 1024MB #设定redis最大使用内存,值要小于物理内存,必须设置
appendonly yes  #开启日志记录,相当于MySQL的binlog
appendfilename "appendonly.aof"   #日志文件名,注意:不是目录路径
appendfsync everysec #设置日志同步的频率,每秒执行同步,还有两个参数always、no一般设置为everysec,相当于MySQL事物日志的写方式
Slaveof 设置数据库为其他数据库的从数据库
Masterauth 主数据库连接需要的密码验证
vm-enabled 是否开启虚拟内存支持 (vm开头的参数都是配置虚拟内存的)
vm-swap-file 设置虚拟内存的交换文件路径
vm-max-memory 设置redis使用的最大物理内存大小
vm-page-size 设置虚拟内存的页大小
vm-pages 设置交换文件的总的page数量
vm-max-threads 设置使用swap存储同时使用的线程数量,通常设置值为核心数相同,如果设置为0,则会以串行方式,对数据的完整性有着极大的保证
Glueoutputbuf 把小的输出缓存存放在一起
hash-max-zipmap-entries 设置hash的临界值
Activerehashing 重新hash

[root@redis ~]# cat <<END >>/etc/init.d/redis
#!/bin/sh
# chkconfig: 2345 80 90
# description: Start and Stop redis
#PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/redis/redis-server
REDIS_CLI=/usr/local/redis/redis-cli
PIDFILE=/var/run/redis_6379.pid
CONF="/usr/local/redis/redis.conf"
AUTH="123123"
LISTEN_IP=\$(netstat -utpln |grep redis-server |awk '{print \$4}'|awk -F':' '{print \$1}')

case "\$1" in
    start)
        if [ -f \$PIDFILE ]
        then
                echo "\$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                \$EXEC \$CONF
        fi
        if [ "\$?"="0" ]
        then
              echo "Redis is running..."
        fi
        ;;
    stop)
        if [ ! -f \$PIDFILE ]
        then
                echo "\$PIDFILE does not exist, process is not running"
        else
                PID=\$(cat \$PIDFILE)
                echo "Stopping ..."
                \$REDIS_CLI -h \$LISTEN_IP -p \$REDISPORT -a \$AUTH SHUTDOWN
                while [ -x \${PIDFILE} ]
               do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
   restart|force-reload)
        \${0} stop
        \${0} start
        ;;
  *)
    echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
        exit 1
esac
END
[root@redis ~]# chmod 755 /etc/init.d/redis
[root@redis ~]# chkconfig --add redis
[root@redis ~]# /etc/init.d/redis start
Starting Redis server...
4390:C 04 May 02:16:45.232 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
4390:C 04 May 02:16:45.232 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=4390, just started
4390:C 04 May 02:16:45.232 # Configuration loaded
Redis is running...
[root@redis ~]# netstat -utpln |grep redis
tcp        0      192.168.100.101:6379            0.0.0.0:*               LISTEN      4204/redis-server *

调整Redis服务的配置:
[root@redis ~]# cp /root/redis-4.0.9/src/redis-benchmark /usr/local/redis/
[root@redis ~]# cp /root/redis-4.0.9/src/redis-check-rdb /usr/local/redis/
[root@redis ~]# cp /root/redis-4.0.9/src/redis-check-aof /usr/local/redis/
[root@redis ~]# cp /root/redis-4.0.9/src/redis-sentinel /usr/local/redis/
[root@redis ~]# ls /usr/local/redis/
dump.rdb  redis-benchmark  redis-cli  redis.conf  redis-server

[root@redis ~]# ln -s /usr/local/redis/redis-cli /usr/bin/redis
[root@redis ~]# redis -h 192.168.100.101 -p 6379 -a 123123
192.168.100.101:6379> set name lwh
OK
192.168.100.101:6379> get name
"lwh"
192.168.100.101:6379> exit
[root@redis ~]# ln -s /usr/local/redis/redis-benchmark /usr/bin/redis-benchmark
[root@redis ~]# redis-benchmark -h 192.168.100.101 -p 6379 -c 1000 -n 10000

结合PHP测试Redis服务;
[root@redis ~]# yum -y install httpd php php-redis php-devel
[root@redis ~]# php -v
PHP 5.4.16 (cli) (built: Mar  7 2018 13:34:47) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
[root@redis ~]# wget https://codeload.github.com/phpredis/phpredis/tar.gz/4.0.2
[root@redis ~]# tar zxvf phpredis-4.0.2.tar.gz 
[root@redis ~]# cd phpredis-4.0.2
[root@redis phpredis-4.0.2]# /usr/bin/phpize 
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
[root@redis phpredis-4.0.2]# ./configure --with-php-config=/usr/bin/php-config 
[root@redis phpredis-4.0.2]# make && make install
[root@redis phpredis-4.0.2]# echo $?
0
[root@redis phpredis-4.0.2]# cd
[root@redis ~]# echo -e "extension_dir = \"/usr/lib64/php/modules/\"\nextension = redis.so" >>/etc/php.ini
[root@redis ~]# systemctl start httpd
[root@redis ~]# netstat -utpln |grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      19008/httpd
[root@redis ~]# cat <<END >>/var/www/html/index.php
<?php
phpinfo();
?>
END
[root@redis ~]# cat <<END >>/var/www/html/test.php
<?php
\$redis = new Redis();
\$redis->connect('192.168.100.101',6379);
\$redis->auth('123123');
\$keys = \$redis->keys("*");
var_dump(\$keys);
?>
END

Redisの高性能データベース
Redisの高性能データベース

Redis中操作之String  -- 字符串(注意:redis中的语句可以tab补全);
概述:String是简单的 key-value 键值对,value 不仅可以是 String,也可以是数字。String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。
[root@redis ~]# redis -h 192.168.100.101 -p 6379 -a 123123
192.168.100.101:6379> set hello world
OK
192.168.100.101:6379> get hello
"world"
192.168.100.101:6379> EXISTS hello          ##验证key是否存在
(integer) 1
192.168.100.101:6379> type hello
string
192.168.100.101:6379> substr hello 1 2      ##查看key的第1和2两个字符
"or"
192.168.100.101:6379> append hello !            ##在key后添加字符!
(integer) 6
192.168.100.101:6379> get hello
"world!"
192.168.100.101:6379> set haha heihei
OK
192.168.100.101:6379> keys h*               ##查看以h开头的Key
1) "haha"
2) "hello"
192.168.100.101:6379> set name xiaoming
OK
192.168.100.101:6379> keys *
1) "haha"
2) "hello"
3) "name"
192.168.100.101:6379> RANDOMKEY         ##随机返回一个Key
"name"
192.168.100.101:6379> keys *
1) "haha"
2) "hello"
3) "name"
192.168.100.101:6379> RANDOMKEY
"haha"
192.168.100.101:6379> RENAME haha hehe
OK
192.168.100.101:6379> keys *
1) "hehe"
2) "name"
3) "hello"
192.168.100.101:6379> DEL hehe
(integer) 1
192.168.100.101:6379> keys *
1) "name"
2) "hello"
192.168.100.101:6379> get name
"xiaoming"
192.168.100.101:6379> set name xiaohong
OK
192.168.100.101:6379> get name
"xiaohong"
192.168.100.101:6379> expire name 10        ##设置KEY值的超时时间
(integer) 1
192.168.100.101:6379> ttl name              ##查看KEY值当前剩余的超时时间
(integer) 4
192.168.100.101:6379> get name
"xiaohong"
192.168.100.101:6379> get name
(nil)
192.168.100.101:6379> keys *            
1) "hello"

リストのRedis操作-リスト;
概要:Redisのリストは、C ++のstd ::リストに類似して、単純な文字列のリストで、単に意味そのリストまたはキュー。Redisのは、頭や尾からのリストに要素を追加することができます。40億の上に支持され、すなわち各リスト要素、1 -リストの最大長は2 ^ 32です。Redisのリストにも使用されている逆引き参照とトラバーサル、より便利な操作をサポートしていますが、その他いくつかの余分なメモリのオーバーヘッド、データ送信バッファ・キューなどの内部実装のRedisの多くを、持って来ることができる二重リンクリストとして実装されています構造。
そのようなあなたのウォッチリスト、TwitterのファンリストとしてシナリオのRedisのリストが非常に大きい、Redisのももっとも重要なデータ構造の一つであり、リストは達成するためにRedisの構造を使用することができますので、例えば、いくつかのアプリケーションとリスト型のRedisを使用します。アプリケーションのシナリオシンプルな軽量なメッセージキューの実現は、生産者がプッシュし、消費者は/ bpopをポップ。

[root@redis ~]# redis -h 192.168.100.101 -p 6379 -a 123123
192.168.100.101:6379> rpush list1 1         ##创建列表并在尾部插入元素
(integer) 1
192.168.100.101:6379> rpush list1 2
(integer) 2
192.168.100.101:6379> lrange list1 0 1          ##验证列表中的第0个元素到第1个元素
1) "1"
2) "2"
192.168.100.101:6379> lpush list1 0         ##在列表头部插入元素
(integer) 3
192.168.100.101:6379> lrange list1 0 1
1) "0"
2) "1"
192.168.100.101:6379> lrange list1 0 2          ##验证列表中的第0个元素到第2个元素
1) "0"
2) "1"
3) "2"
192.168.100.101:6379> llen list1                ##查看列表中的元素的数量
(integer) 3
192.168.100.101:6379> lindex list1 1            ##定位到列表中的第1个元素
"1"
192.168.100.101:6379> ltrim list1 1 2           ##截取列表中的第1个元素到第2个元素
OK
192.168.100.101:6379> lrange list1 0 10     ##查看列表中第0个元素到第10个元素
1) "1"
2) "2"
192.168.100.101:6379> lset list1 1 haha     ##更改列表中的第1个元素值为haha
OK
192.168.100.101:6379> lrange list1 0 10
1) "1"
2) "haha"
192.168.100.101:6379> lset list1 2 haha     ##验证更改时的元素位置不能大于现有元素的数量
(error) ERR index out of range
192.168.100.101:6379> lrange list1 0 10
1) "1"
2) "haha"
192.168.100.101:6379> rpush list1 haha      ##在列表尾部插入新的元素
(integer) 3
192.168.100.101:6379> lrange list1 0 10
1) "1"
2) "haha"
3) "haha"
192.168.100.101:6379> lrem list1 2 haha     ##删除列表中两个值为haha的元素
(integer) 2
192.168.100.101:6379> lrange list1 0 10
1) "1"
192.168.100.101:6379> rpush list1 haha
(integer) 2
192.168.100.101:6379> rpush list1 haha
(integer) 3
192.168.100.101:6379> rpush list1 haha
(integer) 4
192.168.100.101:6379> rpush list1 haha
(integer) 5
192.168.100.101:6379> lrange list1 0 10
1) "1"
2) "haha"
3) "haha"
4) "haha"
5) "haha"
192.168.100.101:6379> lpop list1                ##删除列表内开头的第一个元素
"1"
192.168.100.101:6379> lrange list1 0 10
1) "haha"
2) "haha"
3) "haha"
4) "haha"
192.168.100.101:6379> lpop list1
"haha"
192.168.100.101:6379> lrange list1 0 10
1) "haha"
2) "haha"
3) "haha"

Redis中操作之set -- 无序集合;
概述:可以理解为一堆值不重复的列表,类似数学领域中的集合概念,且Redis也提供了针对集合的求交集、并集、差集等操作。set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。
应用场景:Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。又或者在微博应用中,每个用户关注的人存在一个集合中,就很容易实现求两个人的共同好友功能。

[root@redis ~]# redis -h 192.168.100.101 -p 6379 -a 123123
192.168.100.101:6379> sadd set1 0       ##创建set1并赋值0
(integer) 1
192.168.100.101:6379> sadd set1 1       ##在set1后追加值1
(integer) 1
192.168.100.101:6379> smembers set1     ##显示set1的所有值
1) "0"
2) "1"
192.168.100.101:6379> scard set1        ##显示set1的基数
(integer) 2 
192.168.100.101:6379> sismember set1 0          ##显示set1中是否包含值为0的元素 
(integer) 1
192.168.100.101:6379> srandmember set1      ##随机返回set1中的的元素值
"0"
192.168.100.101:6379> sadd set2 0               ##创建set2并添加元素
(integer) 1
192.168.100.101:6379> sadd set2 2       
(integer) 1
192.168.100.101:6379> sinter set1 set2          ##过滤set1与set2的交集
1) "0"
192.168.100.101:6379> sinterstore set3 set1 set2    ##将set1与set2的交集保存到set3
(integer) 1
192.168.100.101:6379> smembers set3 
1) "0"
192.168.100.101:6379> sunion set1 set2          ##过滤set1与set2的并集
1) "0"
2) "1"
3) "2"
192.168.100.101:6379> sdiff set1 set2           ##相对与set2来讲,set1的差集
1) "1"
192.168.100.101:6379> sdiff set2 set1               ##相对比set1来讲,set2的差集
1) "2"
192.168.100.101:6379> keys *                    ##查看已经存在的各种数据类型的键
1) "set1"
2) "hello"
3) "list"
4) "list1"
5) "set2"

操作のZSETRedis -順序付けられた集合;
概要:RedisのRedisの機能の追加は、即ちセットが順序付けされていることを除いて、類似の非順序集合を順序集合します。ソートのスコアで順序付けられた集合の各メンバー。Redisの削除、追加の組、及びテスト時間の複雑順序(かかわらず、コレクションの要素を含む多数の一定時間、)O(1)です。要素のリストの最大長さは2 ^ 32-1(4294967295、各要素上4000000000セット)。
Redisのは、内部使用のHashMapのセットとHashMapを入れ、秩序や店舗のデータを確実にするために(SkipList)テーブルをジャンプ得点するためのマップのメンバーである、とテーブルをジャンプの種類のすべてのメンバーに格納されたソート店舗のHashMapでありますジャンプテーブル構造を使用してスコアが比較的高い検索効率を得られ、実装が比較的簡単なことができます。
使用シナリオ:Redisのは、セットに似た使用シナリオのセット、差が自己規則セットではなく、ソートメンバーをソートするためにユーザに追加のパラメータの優先順位(スコア)を設定し、順番に挿入さを提供することができるソート自動的にソート。あなたは非反復とコレクションの順序付きリストを必要とするときは、データ構造のソートセットを選択することができます。

[root@redis ~]# redis -h 192.168.100.101 -p 6379 -a 123123
192.168.100.101:6379> zadd zset1 1 baidu.com            ##创建集合zset1,添加元素baidu.com,并且设置元素的score值(有序集合的序列号)为1
(integer) 1
192.168.100.101:6379> zadd zset1 2 sina.com
(integer) 1
192.168.100.101:6379> zadd zset1 3 qq.com
(integer) 1
192.168.100.101:6379> zrange zset1 0 2              ##查看集合zset1中的元素
1) "baidu.com"
2) "sina.com"
3) "qq.com"
192.168.100.101:6379> zcard zset1                   ##查看集合zset1中的基数
(integer) 3
192.168.100.101:6379> zscore zset1 baidu.com            ##验证元素baidu.com在集合zset1中的score值
"1"
192.168.100.101:6379> zscore zset1 qq.com           ##验证元素qq.com在集合zset1中的score值
"3"
192.168.100.101:6379> zrevrange zset1 0 1               ##倒序查找集合中的元素,
1) "qq.com"
2) "sina.com"
192.168.100.101:6379> zrem zset1 qq.com             ##删除集合中的元素qq.com
(integer) 1
192.168.100.101:6379> zrange zset1 0 5              ##验证集合中的所有元素
1) "baidu.com"
2) "sina.com"
192.168.100.101:6379> zincrby zset1 5 taobao.com        ##设置该元素score值为5.如若此元素不存在,则会添加到集合中
"5"
192.168.100.101:6379> zrange zset1 0 5              ##验证集合中的原色
1) "baidu.com"
2) "sina.com"
3) "taobao.com"
192.168.100.101:6379> zrange zset1 0 5 withscores       ##查看集合中的元素值并且输出其本身的score值
1) "baidu.com"
2) "1"
3) "sina.com"
4) "2"
5) "taobao.com"
6) "5"
192.168.100.101:6379> zincrby zset1 10 haha.com     ##添加新元素haha.com并指定其本身score值
"10"
192.168.100.101:6379> zrange zset1 0 5 withscores       ##验证元素的排序
1) "baidu.com"
2) "1"
3) "sina.com"
4) "2"
5) "taobao.com"
6) "5"
7) "haha.com"
8) "10"
192.168.100.101:6379> zincrby zset1 15 baidu.com        ##如若新添加的元素已经存在,那么会在原有score值的基础上增加指定得score值
"16"
192.168.100.101:6379> zrange zset1 0 5 withscores       ##验证元素baidu.com的score值变为16,增加了15,并排序到集合的末尾
1) "sina.com"   
2) "2"
3) "taobao.com"
4) "5"
5) "haha.com"
6) "10"
7) "baidu.com"
8) "16"
注:此外, 还有zrevrank, zrevrange, zrangebyscore, zremrangebyrank, zramrangebyscore, zinterstore/zunionstore等操作

ハッシュ演算Redis;
概要:C#またはでC ++型のdictに同様のタイプをhash_map。Redisの内部対応ハッシュ値が実際のHashMapで、ハッシュのメンバーが比較的少ない時間のRedisが実際のHashMapの構造を用いることなく、コンパクトに収納の一次元アレイと同様のアプローチを採用するメモリを節約するために、符号化の対応する値redisObjectは、zipmapありますメンバーの数が自動的に本物のHashMapに変わります増加したときに、この時間符号化は、HTです。
シナリオ:ユーザ情報とユーザの対応する複数の仮定、それはそのようなJSON保存値としてフォーマットにキー、ユーザ情報系列としてユーザIDを格納するために使用することができます。

[root@redis ~]# redis -h 192.168.100.101 -p 6379 -a 123123
192.168.100.101:6379> hset hash1 key1 value1                ##设置键值hash1,并且指定内部key与value对应
(integer) 1
192.168.100.101:6379> hget hash1 key1           ##查看hash1中的key1的值
"value1"
192.168.100.101:6379> hexists hash1 key1            ##检查hash1中是否有key1
(integer) 1
192.168.100.101:6379> hset hash1 key2 value2        ##在hash1中创建key2
(integer) 1
192.168.100.101:6379> hlen hash1                ##查看hash1中键值的基数
(integer) 2
192.168.100.101:6379> hkeys hash1               ##查看hash1中具体包含的键
1) "key1"
2) "key2"
192.168.100.101:6379> hvals hash1               ##查看hash1中具体包含的值
1) "value1"
2) "value2"
192.168.100.101:6379> hmget hash1 key1 key2     ##通过明确指定hash1中的key,去查看值是什么
1) "value1"
2) "value2"
192.168.100.101:6379> hgetall hash1             ##查看hash1中包含的所有键和值的对应
1) "key1"
2) "value1"
3) "key2"
4) "value2"
192.168.100.101:6379> hset hash1 key4 10            ##添加新键key4,值为整数10
(integer) 1
192.168.100.101:6379> hincrby hash1 key4 15     ##将key4执行计算加10(仅限整数)
(integer) 25
192.168.100.101:6379> hmset hash1 key5 value5 key6 value6 key7 value7       ##批量添加键值对
OK
192.168.100.101:6379> hgetall hash1             ##验证批量添加的键值对
 1) "key1"
 2) "value1"
 3) "key2"
 4) "value2"
 5) "key3"
 6) "value3"
 7) "key4"
 8) "25"
 9) "key5"
10) "value5"
11) "key6"
12) "value6"
13) "key7"
14) "value7"

Redis中操作之其他操作;
[root@redis ~]# redis -h 192.168.100.101 -p 6379 -a 123123
192.168.100.101:6379> dbsize                ##查看所有key的数目 
192.168.100.101:6379> flushdb               ##删除当前选择数据库中的所有key 
192.168.100.101:6379> flushall                  ##删除所有数据库中的所有key 
192.168.100.101:6379> save                  ##将数据同步保存到磁盘 
192.168.100.101:6379> bgsave                ##异步保存 
192.168.100.101:6379> lastsave              ##上次成功保存到磁盘的Unix时间戳 
192.168.100.101:6379> info                  ##查询server信息 
192.168.100.101:6379> slaveof               ##改变复制策略设置

おすすめ

転載: blog.51cto.com/13528668/2433453