NOSQL系列-Redis精简版安装与Ruby测试
簡介:Redis是一個NOSQL數據庫,它是一款key-values存儲型數據庫,也叫“memcached改進版”,它不同與memcached最大特點是它由內存+硬盤來存儲數據的,它支持存儲的values類型很多,包括string字符串、list鏈表、set集合、zset有序集合、散列表等。這些數據類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。Redis支持不同方式的排序,與memcached一樣,數據都是緩存在內存中的,但會定期把更新的數據寫入硬盤,在此基礎上實現了master-slave主從同步。Redis還提供了廣泛的開發語言客戶端,ruby、perl、java、c、c++、PHP、scala、clojure、node.js、objective-C
?
一、實驗環境
1.系統類型
[leo@h4 etc]$ cat issue
CentOS Linux release 6.0 (Final)
Kernel \r on an \m
2.系統位數
[leo@h4?桌面]$ getconf LONG_
32
Linux ISO:CentOS-6.0-i386-bin-DVD.iso 32位
JDK version:"1.6.0_25-ea"
虛擬機:Product VMware® Workstation Version 7.0.0 build-203739
3.CentOS需要能連入網絡,這個比較簡單,可以參考《NOSQL系列-memcached安裝管理與repcached高可用性》,這篇文章在一開始就介紹了虛擬機如何連接上網
http://f.dataguru.cn/thread-46905-1-1.html
4.Redis版本:redis.i386 0:2.4.10-1.el5
5.EPLE版本:http://dl.Fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
6.Ruby?版本:ruby-1.9.2-p180
?
二、Redis?安裝與配置
1.我們使用yum方式安裝redis數據庫
[root@h4 ~]# ping 202.99.96.68? ?? ?? ?? ?? ??測試一下,現在我們可以連接到外網
PING 202.99.96.68 (202.99.96.68) 56(84) bytes of data.
64 bytes from 202.99.96.68: icmp_seq=1 ttl=245 time=4.14 ms
64 bytes from 202.99.96.68: icmp_seq=2 ttl=245 time=4.44 ms
64 bytes from 202.99.96.68: icmp_seq=3 ttl=245 time=4.12 ms
64 bytes from 202.99.96.68: icmp_seq=4 ttl=245 time=5.60 ms
注:如果是新啟動的VMware系統,有可能會連不上網,沒關系,我們重啟下network服務即可恢復
[root@h4 ~]# service network restart
[root@h4 ~]#?yum install redis
Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
* base: mirrors.neusoft.edu.cn
* extras: mirrors.neusoft.edu.cn
* updates: mirrors.neusoft.edu.cn
base? ?? ?? ?? ?? ?? ?? ?| 3.7 kB? ???00:00? ???
extras? ?? ?? ?? ?? ?? ???| 3.5 kB? ???00:00? ???
updates? ?? ?? ?? ?? ?? ?| 3.5 kB? ???00:00? ???
updates/primary_db? ?? ???| 4.3 MB? ???00:26? ???
Setting up Install Process
No package redis available.? ?? ?? ?? ?? ???沒有可用的redis包
Error: Nothing to do
CentOS是RedHat企業版(收費)編譯過來的社區版(免費),去掉了所有關于版權問題的東西。如果我們想使用收費版yum源(軟件包齊全),我們就需要安裝EPEL(Extra Packages for Enterprise Linux )即企業版Linux的擴展包,EPLE提供了很多Redhat和Centos共用的組件,安裝完這個以后基本常用的rpm包都可以找到了^_^
32位系統選擇:(我是32位)
[root@h4 ~]# rpm -ivh?http://dl.Fedoraproject.org/pub/ ... ease-5-4.noarch.rpm
Retrieving?http://dl.Fedoraproject.org/pub/ ... ease-5-4.noarch.rpm
warning: /var/tmp/rpm-tmp.UX54fR: Header V3 DSA/SHA1 Signature, key ID 217521f6: NOKEY
Preparing...? ?? ?? ?? ?? ? ########################################### [100%]
? ?1:epel-release? ?? ?? ???########################################### [100%]
64位系統選擇:
rpm -ivh?http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
近水樓臺先得月可參考http://f.dataguru.cn/thread-47927-1-1.html??感謝zhaoyg?童鞋,它是64位
下面我們再次安裝redis -> yum install redis
[root@h4 ~]#?yum install redis
Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
* base: mirrors.neusoft.edu.cn
* epel: mirrors.neusoft.edu.cn
* extras: mirrors.neusoft.edu.cn
* updates: mirrors.neusoft.edu.cn
epel? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? | 3.7 kB? ???00:00? ???
epel/primary_db? ?? ?? ?? ?? ?? ?? ?| 3.1 MB? ???00:15? ???
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package redis.i386 0:2.4.10-1.el5 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
=======================================================================================
Package? ?? ?Arch? ?? ?Version? ?? ?? ? Repository? ?? ?? ?? ?? ?? ?? ?? ?? ? Size
=======================================================================================
Installing:
redis? ?? ???i386? ?? ?2.4.10-1.el5? ?? ???epel? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???299 k
Transaction Summary
=======================================================================================
Install? ?? ? 1 Package(s)
Upgrade? ?? ? 0 Package(s)
Total download size: 299 k
Installed size: 646 k
Is this ok [y/N]:y? ?? ?? ?? ?? ???是否安裝redis包?yes
Downloading Packages:
redis-2.4.10-1.el5.i386.rpm? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?warning: rpmts_HdrFromFdno: Header V4 DSA/SHA1 Signature, key ID 217521f6: NOKEY? ?| 299 kB? ???00:01
epel/gpgkey? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? Importing GPG key 0x217521F6 "Fedora EPEL <epel@fedoraproject.org>" from /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL? ? | 3.3 kB? ???00:00 ...? ???是否導入密鑰
Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?警告已經修改了yum源
Installing:redis-2.4.10-1.el5.i386? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???1/1
Installed:
??redis.i386 0:2.4.10-1.el5? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???
Complete!? ?? ?? ?? ?? ?? ?? ???到此redis軟件安裝完畢,下面我們開始配置
配置redis
2.找一找redis安裝到哪些目錄中了
[root@h4 ~]# find / -name "redis*"
/var/lib/redis
/var/run/redis
/var/log/redis
/usr/bin/redis-cli
/usr/bin/redis-check-dump
/usr/bin/redis-check-aof
/usr/bin/redis-benchmark
/usr/sbin/redis-server? ?? ?? ?? ?? ?? ?? ? redis服務器主程序
/usr/share/gimp/2.0/patterns/redishstuff.pat
/usr/share/doc/redis-2.4.10
/etc/logrotate.d/redis
/etc/redis.conf? ?? ?? ?? ?? ?? ?? ?? ?? ? redis配置文件,啟動參數都在這里配置
/etc/rc.d/init.d/redis? ?? ?? ?? ?? ?? ?? ???redis開機啟動服務
3.設置redis參數文件/etc/redis.conf
[root@h4 ~]# vim /etc/redis.conf
daemonize yes? ?? ?? ?? ?? ?? ??啟動redis后要不要后臺運行
port 6379? ?? ?? ?? ?? ?? ?? ???redis服務默認端口號,如果啟動多個服務端口號要設置不同
bind 127.0.0.1? ?? ?? ?? ?? ?? ??綁定ip地址
timeout 0? ?? ?? ?? ?? ?? ?? ???telnet連接服務過期時間,0?代表關閉這項功能
loglevel notice? ?? ?? ?? ?? ?? ??日志級別
SNAPSHOTTING? ?? ?? ?? ?? ?? ?快照設置
4.啟動redis服務
[root@h4 ~]# redis-server /etc/redis.conf? ?? ??按照此配置文件的參數設置啟動服務
5.驗證啟動是否成功
[root@h4 ~]# pstree? ?? ?? ?? ?? ?? ?? ?? ?索引樹方式查看
├─redis-server───2*[{redis-server}]? ?? ??啟動一個redis服務,包含2個線程
[root@h4 ~]# ps aux | grep redis? ?? ?? ?? ???進程列表方式查看
root? ???18787??0.0??0.2??31280??1080 ?? ?? ???Ssl??15:42? ?0:00?redis-server /etc/redis.conf
這還是啟動命令
6.使用telnet簡單測試
我們知道redis是memcached的改進版,那么命令語法也是大同小異
[root@h4 ~]# telnet localhost 6379
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set leonarding 8? ?? ?? ?? ?輸入key-value對?key=leonarding? ?value=8
+OK
get leonarding? ?? ?? ?? ??輸出key-value對
$1? ?? ?? ?? ?? ?? ?? ???$1:?字符串類型,1個字符長度
8? ?? ?? ?? ?? ?? ?? ?? ?顯示value
set liu sheng? ?? ?? ?? ?? ?輸入key-value對?key=liu? ?value=sheng
+OK
get liu? ?? ?? ?? ?? ?? ???輸出key-value對
$5? ?? ?? ?? ?? ?? ?? ???$5:?字符串類型,5個字符長度
Sheng? ?? ?? ?? ?? ?? ???顯示value
測試鏈表
lpush 11 22? ?? ?? ?? ?? ??定義第一個鏈表lpush表頭添加結點(左邊添加)?key=11??value=22
:1
lpush 33 44? ?? ?? ?? ?? ??定義第二個鏈表?key=33??value=44
:1
rpush 55 66? ?? ?? ?? ?? ??定義第三個鏈表rpush表尾添加結點(右邊添加)key=55??value=66
:1
lrange 11 0 -1? ?? ?? ?? ?? ?顯示第一個鏈表,0??-1?表示從頭到尾顯示鏈表
*1
$2
22
lrange 33 0 -1? ?? ?? ?? ?? ?顯示第二個鏈表,*1?表示鏈表中有1個結點
*1
$2? ?? ?? ?? ?? ?? ?? ?? ? $2字符串類型,2個字符長度
44
lrange 55 0 -1? ?? ?? ?? ?? ?顯示第三個鏈表,說明鏈表是基于key為單位組成的
*1
$2
66
del 33? ?? ?? ?? ?? ?? ?? ??刪除鏈表33
:1
del 55? ?? ?? ?? ?? ?? ?? ??刪除鏈表55
:1
del 11? ?? ?? ?? ?? ?? ?? ??刪除鏈表11
:1
quit? ?? ?? ?? ?? ?? ?? ???退出redis
+OK
Connection closed by foreign host.
?
三、Ruby連接Redis數據庫測試
1.下載ruby程序包
[root@h4 ~]# rpm -qa | grep ruby
由于我沒有安裝過ruby語言程序,所以什么都沒有顯示
[root@h4 ~]# mkdir ruby? ?? ??先建立一個ruby目錄用來存放ruby安裝程序包
[root@h4 ~]# cd ruby? ?? ?? ?進入目錄
首先要安裝ruby軟件包
Ruby版本:http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p180.tar.gz
99% [========================================> ] 11,154,815??26.9K/s eta(英國中部時
100%[===============================================>] 11,158,935??27.5K/s? ?
當進度條走到100%時ruby程序完成下載
[root@h4 ruby]# chmod 777 ruby-1.9.2-p180.tar.gz? ?? ?授予777權限
[root@h4 ruby]# ll
rwxrwxrwx. 1 root root 11158935??2月??18??2011 ruby-1.9.2-p180.tar.gz
2.解壓ruby程序包
[root@h4 ruby]# tar -zxvf ruby-1.9.2-p180.tar.gz
[root@h4 ruby]# cd ruby-1.9.2-p180? ?? ?? ?? ?? ?? ?? ?進入ruby程序包目錄
3.運行config文件
[root@h4 ruby-1.9.2-p180]# ./configure? ?? ?? ?? ??運行ruby配置文件
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu?。。。。。。檢查系統類型
config.status: creating Makefile? ?? ?? ?? ?? ?? ???創建Makefile
4.編譯ruby并把編譯好的結果進行安裝
[root@h4 ruby-1.9.2-p180]# make? ?? ?? ?? ?? ?? ?編譯源文件,需要等待10分鐘
gcc -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wno-long-long -I. -I.ext/include/i686-linux -I./include -I. -DRUBY_EXPORT? ?-o dmyversion.o -c dmyversion
[root@h4 ruby-1.9.2-p180]# make install? ?? ?? ?? ??把編譯好的結果進行安裝
./miniruby -I./lib -I.ext/common -I./- -r./ext/purelib.rb??./tool/generic_erb.rb -c -o encdb.h ./template/encdb.h.tmpl ./enc enc
encdb.h unchanged
make -f enc.mk RUBY="./miniruby -I./lib -I.ext/common -I./- -r./ext/purelib.rb " MINIRUBY="./miniruby -I./lib -I.ext/common -I./- -r./ext/purelib.rb "??srcs
make[1]: Entering directory `/root/ruby/ruby-1.9.2-p180'
5.找一找ruby安裝到哪些目錄下
[root@h4 ruby-1.9.2-p180]# find / -name ruby
/root/ruby
/root/ruby/ruby-1.9.2-p180/ruby
/root/ruby/ruby-1.9.2-p180/test/ruby
/root/ruby/ruby-1.9.2-p180/include/ruby
/root/ruby/ruby-1.9.2-p180/.ext/include/ruby
/root/ruby/ruby-1.9.2-p180/.ext/include/i686-linux/ruby
/home/grid/hbase-0.90.5/lib/ruby
/home/grid/hbase-0.90.5/src/test/ruby
/home/grid/hbase-0.90.5/src/main/ruby
/usr/local/include/ruby-1.9.1/ruby
/usr/local/include/ruby-1.9.1/i686-linux/ruby
/usr/local/lib/ruby
/usr/local/bin/ruby
/usr/local/share/doc/ruby
/usr/share/swig/1.3.40/ruby
6.設置/etc/profile環境變量,對全局有效
export PATH=/usr/java/jdk1.6.0_25/bin:/usr/local/bin:/sbin:$PATH? ?? ???添加紅色字符串
[root@h4 bin]$ ruby? ?? ?? ?? ?? ?? ??到此ruby程序已經安裝到系統中可以運行ruby腳本
ruby: Interrupt
-:1: syntax error, unexpected ':', expecting $end
ruby: Interrupt
? ???^
7.安裝rubygems組件(通過這個組件安裝redis-rb程序庫)
[root@h4 ruby-1.9.2-p180]# yum install rubygems
Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
* base: mirrors.grandcloud.cn
* epel: mirrors.ustc.edu.cn
* extras: mirrors.grandcloud.cn
* updates: mirrors.grandcloud.cn
epel? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???| 3.7 kB? ???00:00? ???
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package rubygems.noarch 0:1.3.7-1.el6 set to be updated
--> Processing Dependency: ruby(abi) = 1.8 for package: rubygems-1.3.7-1.el6.noarch
--> Processing Dependency: ruby-rdoc for package: rubygems-1.3.7-1.el6.noarch
--> Processing Dependency: /usr/bin/ruby for package: rubygems-1.3.7-1.el6.noarch
--> Running transaction check
---> Package ruby.i686 0:1.8.7.352-7.el6_2 set to be updated
---> Package ruby-libs.i686 0:1.8.7.352-7.el6_2 set to be updated
--> Processing Dependency: libreadline.so.5 for package: ruby-libs-1.8.7.352-7.el6_2.i686
---> Package ruby-rdoc.i686 0:1.8.7.352-7.el6_2 set to be updated
--> Processing Dependency: ruby-irb = 1.8.7.352-7.el6_2 for package: ruby-rdoc-1.8.7.352-7.el6_2.i686
--> Running transaction check
---> Package compat-readline5.i686 0:5.2-17.1.el6 set to be updated
---> Package ruby-irb.i686 0:1.8.7.352-7.el6_2 set to be updated
--> Finished Dependency Resolution
Is this ok [y/N]: y
Total? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 211 kB/s | 3.2 MB? ???00:15? ???
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
??Installing? ???: compat-readline5-5.2-17.1.el6.i686? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???1/6
??Installing? ???: ruby-libs-1.8.7.352-7.el6_2.i686? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 2/6
??Installing? ???: ruby-1.8.7.352-7.el6_2.i686? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?3/6
??Installing? ???: ruby-irb-1.8.7.352-7.el6_2.i686? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???4/6
??Installing? ???: ruby-rdoc-1.8.7.352-7.el6_2.i686? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 5/6
??Installing? ???: rubygems-1.3.7-1.el6.noarch? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?6/6
Installed:
??rubygems.noarch 0:1.3.7-1.el6? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?
Dependency Installed:
??compat-readline5.i686 0:5.2-17.1.el6? ?? ???ruby.i686 0:1.8.7.352-7.el6_2? ?? ???ruby-irb.i686 0:1.8.7.352-7.el6_2? ?? ???ruby-libs.i686 0:1.8.7.352-7.el6_2? ?? ?
??ruby-rdoc.i686 0:1.8.7.352-7.el6_2? ?? ?? ?
Complete!
如果遇上如下報錯請參考下面解決方案
[root@h4 ruby-1.9.2-p180]# gem install redis
ERROR:??Loading command: install (LoadError)
? ? no such file to load – zlib? ?? ?? ?? ?? ?? ?? ???原因是gem運行缺少zlib庫支持
ERROR:??While executing gem ... (NameError)
? ? uninitialized constant Gem::Commands::InstallCommand
解決方案
[root@h4 ruby-1.9.2-p180]# yum -y install gcc? ?
Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
由于安裝系統的時候沒有裝c編譯器?導致很多源碼安裝的程序無法編譯?所以需要在linux上裝c編譯器,必須按順序安裝否則安裝不會成功
[root@h4 ruby-1.9.2-p180]# yum install zlib-devel? ?? ??安裝zlib-devel庫
Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
[root@h4 ruby-1.9.2-p180]# cd ext/zlib/? ?? ?? ?? ?? ?進入這個目錄
[root@h4 zlib]# ruby extconf.rb? ?? ?? ?? ?? ?? ?? ??執行這條命令
checking for deflateReset() in -lz... yes
checking for zlib.h... yes
checking for kind of operating system... Unix
checking for crc32_combine() in zlib.h... yes
checking for adler32_combine() in zlib.h... yes
creating Makefile
[root@h4 zlib]# make && make install? ?? ?? ?? ?? ???編譯并安裝
gcc -I. -I/usr/local/include/ruby-1.9.1/i686-linux -I/usr/local/include/ruby-1.9.1/ruby/backward -I/usr/local/include/ruby-1.9.1 -I. -DHAVE_ZLIB_H??-DOS_CODE=OS_UNIX -DHAVE_CRC32_COMBINE -DHAVE_ADLER32_COMBINE??-D_FILE_OFFSET_BITS=64??-fPIC -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wno-long-long??-o zlib.o -c zlib.c
gcc -shared -o zlib.so zlib.o -L. -L/usr/local/lib -Wl,-R/usr/local/lib -L.??-rdynamic -Wl,-export-dynamic? ?-lz??-lpthread -lrt -ldl -lcrypt -lm? ?-lc
/usr/bin/install -c -m 0755 zlib.so /usr/local/lib/ruby/site_ruby/1.9.1/i686-linux
[root@h4 zlib]# gem list
*** LOCAL GEMS ***
minitest (1.6.0)
rake (0.8.7)
rdoc (2.5.8)
到此我們已經解決了“gem運行缺少zlib庫”問題,現在我們可以正常gem install redis
8.安裝redis-rb程序庫,因為只有安裝了此程序庫ruby才能正常訪問redis數據庫
[root@h4 zlib]# gem install redis
Successfully installed redis-3.0.1
1 gem installed
Installing ri documentation for redis-3.0.1...
Installing RDoc documentation for redis-3.0.1...
[root@h4 zlib]#
感謝天感謝地,我們終于安裝上了redis-rb,經歷了多少個日夜,經歷了多少個困苦,查閱了多少資料,當我們迎來成功之時,一切都是值得的,臺上10分鐘?臺下十年功
9.編寫ruby腳本訪問redis數據庫
[root@h4 ruby]# vim leonarding_redisrb1.rb? ?? ?編寫ruby腳本,創建鏈表
require 'rubygems'? ?? ?? ?? ?? ?? ?? ?? ?? ?引用程序庫
require 'redis'
redis=Redis.new? ?? ?? ?? ?? ?? ?? ?? ?? ???開啟兩個終端進程訪問redis數據庫
redis2=Redis.new
hoge = "leonarding";? ?? ?? ?? ?? ?設置key(hoge leonarding)
redis.lpush(hoge,3)? ?? ?? ?? ?? ??創建鏈表,在表頭添加三個結點
redis.lpush(hoge,2)? ?? ?? ?? ?? ? value?是?3 2 1 4
redis.lpush(hoge,1)
redis.rpush(hoge,4)? ?? ?? ?? ?? ?? ?? ?? ???在表尾添加一個結點
p redis.lrange(hoge,0,-1)? ?? ?? ?? ?? ?? ?? ??從頭到尾顯示鏈表
[root@h4 ruby]# ruby leonarding_redisrb1.rb? ???執行ruby腳本
/usr/local/lib/ruby/gems/1.9.1/gems/redis-3.0.1/lib/redis/client.rb:79:in `call': ERR Operation against a key holding the wrong kind of value (Redis::CommandError)
? ?? ? from /usr/local/lib/ruby/gems/1.9.1/gems/redis-3.0.1/lib/redis.rb:859:in `block in lpush'
? ?? ? from /usr/local/lib/ruby/gems/1.9.1/gems/redis-3.0.1/lib/redis.rb:36:in `block in synchronize'
? ?? ? from /usr/local/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
? ?? ? from /usr/local/lib/ruby/gems/1.9.1/gems/redis-3.0.1/lib/redis.rb:36:in `synchronize'
? ?? ? from /usr/local/lib/ruby/gems/1.9.1/gems/redis-3.0.1/lib/redis.rb:858:in `lpush'
? ?? ? from leonarding_redisrb1.rb:7:in `<main>'
報錯這是為什么呢,想起來了,不同的ruby版本語法不同,我們來修改一下
Ruby?版本:ruby-1.9.2-p180
#############################################################################
新版leonarding_redisrb1.rb
[root@h4 ruby]# vim leonarding_redisrb1.rb
require 'rubygems'
require 'redis'
redis=Redis.new
redis2=Redis.new
hoge = "leonarding";
redis.lpush:hoge,3
redis.lpush:hoge,2
redis.lpush:hoge,1
redis.rpush:hoge,4
p redis.lrange:hoge,0,-1
執行ruby腳本
[root@h4 ruby]# ruby leonarding_redisrb1.rb
["1", "2", "3", "4"]
[root@h4 ruby]# ruby leonarding_redisrb1.rb
["1", "2", "3", "1", "2", "3", "4", "4"]
[root@h4 ruby]# ruby leonarding_redisrb1.rb
["1", "2", "3", "1", "2", "3", "1", "2", "3", "4", "4", "4"]
看value=4始終從表尾添加,符合題意
#################################################################################
我們在編寫一個ruby腳本,測試不同終端是否可以訪問同一個數據庫
[root@h4 ruby]# vim leonarding_redisrb2.rb
require 'rubygems'
require 'redis'
redis=Redis.new
redis2=Redis.new? ?? ?? ?? ?開啟2個終端進程訪問redis數據庫
hoge = "leonarding";
redis.lpush:hoge,3
redis.lpush:hoge,2
redis.lpush:hoge,1
redis.rpush:hoge,4
redis2.rpush:hoge,5
p redis.lrange:hoge,0,-1
使用redis2進程從表尾添加結點value=5,看看是不是能夠操作同一個鏈表,那就證明我們連接的是同一個redis數據庫,并且操作是具有原子性和一致性的
執行ruby腳本
[root@h4 ruby]# ruby leonarding_redisrb2.rb
["1", "2", "3", "1", "2", "3", "1", "2", "3", "1", "2", "3", "4", "4", "4", "4", "5"]
小結:Redis精簡版安裝與Ruby測試到此總結完畢,通過上面的實驗我們應該掌握如下內容
(1)redis簡要概念
(2)redis安裝與配置
(3)ruby程序和組件包安裝與故障診斷
(4) ruby連接Redis數據庫
心得:一步一腳印,不懂咱就問,思考與耐心,苦盡奕甘來
?
?
redis??ruby??gem??rubygems??redis-rb
?本文轉自 leonarding151CTO博客,原文鏈接:http://blog.51cto.com/leonarding/1117715,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的NOSQL系列-Redis精简版安装与Ruby测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 查看Centos7系统参数和机器参数
- 下一篇: 教学思路SQL之预备课程学习 建库、建表