Redis的優(yōu)點(diǎn)以下是Redis的一些優(yōu)點(diǎn)。
Redis與其他鍵值存儲(chǔ)系統(tǒng)
1. Redis環(huán)境安裝配置在本章中,您將了解和學(xué)習(xí)Redis的環(huán)境安裝設(shè)置。 在Ubuntu上安裝Redis要在Ubuntu上安裝Redis,打開(kāi)終端并鍵入以下命令 - [yiibai@ubuntu:~]$ sudo apt-get update
[yiibai@ubuntu:~]$ sudo apt-get install redis-server
這將在Ubuntu機(jī)器上安裝Redis。 啟動(dòng)Redis [yiibai@ubuntu:~]$ redis-server
[2988] 07 Feb 17:09:42.485 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
[2988] 07 Feb 17:09:42.488 # Unable to set the max number of files limit to 10032 (Operation not permitted), setting the max clients configuration to 3984.
[2988] 07 Feb 17:09:42.490 # Warning: 32 bit instance detected but no memory lim
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 2.8.4 (00000000/0) 32 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in stand alone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 2988
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
[2988] 07 Feb 17:09:42.581 # Server started, Redis version 2.8.4
[2988] 07 Feb 17:09:42.582 # WARNING overcommit_memory is set to 0! Background s ' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_m
[2988] 07 Feb 17:09:42.582 * The server is now ready to accept connections on po
檢查Redis是否正在工作 [yiibai@ubuntu:~]$ redis-cli
這將打開(kāi)一個(gè)redis提示,如下所示 - redis 127.0.0.1:6379>
在上面的提示中, redis 127.0.0.1:6379> ping
PONG
這表明Redis已成功在您的計(jì)算機(jī)上安裝了。 在Ubuntu上安裝Redis桌面管理 要在Ubuntu上安裝Redis桌面管理器,可從 http:///download 下載該軟件包,安裝即可。 打開(kāi)下載的軟件包并安裝。 Redis桌面管理器將提供用于管理Redis的鍵和數(shù)據(jù)的UI。 2. Redis配置在Redis中,在Redis的根目錄下有一個(gè)配置文件( 語(yǔ)法 redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME
示例 redis 127.0.0.1:6379> CONFIG GET loglevel
1) 'loglevel'
2) 'notice'
示例 redis 127.0.0.1:6379> CONFIG GET *
1) 'dbfilename'
2) 'dump.rdb'
3) 'requirepass'
4) ''
5) 'masterauth'
6) ''
7) 'unixsocket'
8) ''
9) 'logfile'
10) '/var/log/redis/redis-server.log'
11) 'pidfile'
12) '/var/run/redis/redis-server.pid'
13) 'maxmemory'
14) '3221225472'
15) 'maxmemory-samples'
16) '3'
17) 'timeout'
18) '0'
19) 'tcp-keepalive'
20) '0'
21) 'auto-aof-rewrite-percentage'
22) '100'
23) 'auto-aof-rewrite-min-size'
24) '67108864'
25) 'hash-max-ziplist-entries'
26) '512'
27) 'hash-max-ziplist-value'
28) '64'
29) 'list-max-ziplist-entries'
30) '512'
31) 'list-max-ziplist-value'
32) '64'
33) 'set-max-intset-entries'
34) '512'
35) 'zset-max-ziplist-entries'
36) '128'
37) 'zset-max-ziplist-value'
38) '64'
39) 'lua-time-limit'
40) '5000'
41) 'slowlog-log-slower-than'
42) '10000'
43) 'slowlog-max-len'
44) '128'
45) 'port'
46) '6379'
47) 'databases'
48) '16'
49) 'repl-ping-slave-period'
50) '10'
51) 'repl-timeout'
52) '60'
53) 'repl-backlog-size'
54) '1048576'
55) 'repl-backlog-ttl'
56) '3600'
57) 'maxclients'
58) '3984'
59) 'watchdog-period'
60) '0'
61) 'slave-priority'
62) '100'
63) 'min-slaves-to-write'
64) '0'
65) 'min-slaves-max-lag'
66) '10'
67) 'hz'
68) '10'
69) 'no-appendfsync-on-rewrite'
70) 'no'
71) 'slave-serve-stale-data'
72) 'yes'
73) 'slave-read-only'
74) 'yes'
75) 'stop-writes-on-bgsave-error'
76) 'yes'
77) 'daemonize'
78) 'yes'
79) 'rdbcompression'
80) 'yes'
81) 'rdbchecksum'
82) 'yes'
83) 'activerehashing'
84) 'yes'
85) 'repl-disable-tcp-nodelay'
86) 'no'
87) 'aof-rewrite-incremental-fsync'
88) 'yes'
89) 'appendonly'
90) 'no'
91) 'dir'
92) '/var/lib/redis'
93) 'maxmemory-policy'
94) 'noeviction'
95) 'appendfsync'
96) 'everysec'
97) 'save'
98) '900 1 300 10 60 10000'
99) 'loglevel'
100) 'notice'
101) 'client-output-buffer-limit'
102) 'normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60'
103) 'unixsocketperm'
104) '0'
105) 'slaveof'
106) ''
107) 'notify-keyspace-events'
108) ''
109) 'bind'
110) '127.0.0.1'
編輯配置要更新配置,可以直接編輯 語(yǔ)法 redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
示例 redis 127.0.0.1:6379> CONFIG SET loglevel 'notice'
OK
redis 127.0.0.1:6379> CONFIG GET loglevel
1) 'loglevel'
2) 'notice'
3. Redis數(shù)據(jù)類型Redis支持 字符串Redis中的字符串是一個(gè)字節(jié)序列。Redis中的字符串是二進(jìn)制安全的,這意味著它們的長(zhǎng)度不由任何特殊的終止字符決定。因此,可以在一個(gè)字符串中存儲(chǔ)高達(dá) 示例 redis 127.0.0.1:6379> set name ''
OK
redis 127.0.0.1:6379> get name
''
在上面的示例中,
散列/哈希Redis散列/哈希(Hashes)是鍵值對(duì)的集合。Redis散列/哈希是字符串字段和字符串值之間的映射。因此,它們用于表示對(duì)象。 示例 redis 127.0.0.1:6379> HMSET ukey username 'yiibai' password 'passswd123' points 200
在上述示例中,散列/哈希數(shù)據(jù)類型用于存儲(chǔ)包含用戶的基本信息的用戶對(duì)象。這里 每個(gè)散列/哈??梢源鎯?chǔ)多達(dá) 列表Redis列表只是字符串列表,按插入順序排序。您可以向Redis列表的頭部或尾部添加元素。 示例 redis 127.0.0.1:6379> lpush alist redis
(integer) 1
redis 127.0.0.1:6379> lpush alist mongodb
(integer) 2
redis 127.0.0.1:6379> lpush alist sqlite
(integer) 3
redis 127.0.0.1:6379> lrange alist 0 10
1) 'sqlite'
2) 'mongodb'
3) 'redis'
列表的最大長(zhǎng)度為 集合Redis集合是字符串的無(wú)序集合。在Redis中,您可以添加,刪除和測(cè)試成員存在的時(shí)間O(1)復(fù)雜性。 示例 redis 127.0.0.1:6379> sadd yiibailist redis
(integer) 1
redis 127.0.0.1:6379> sadd yiibailist mongodb
(integer) 1
redis 127.0.0.1:6379> sadd yiibailist sqlite
(integer) 1
redis 127.0.0.1:6379> sadd yiibailist sqlite
(integer) 0
redis 127.0.0.1:6379> smembers yiibailist
1) 'sqlite'
2) 'mongodb'
3) 'redis'
一個(gè)集合中的最大成員數(shù)量為 可排序集合Redis可排序集合類似于Redis集合,是不重復(fù)的字符集合。 不同之處在于,排序集合的每個(gè)成員都與分?jǐn)?shù)相關(guān)聯(lián),這個(gè)分?jǐn)?shù)用于按最小分?jǐn)?shù)到最大分?jǐn)?shù)來(lái)排序的排序集合。雖然成員是唯一的,但分?jǐn)?shù)值可以重復(fù)。 示例 redis 127.0.0.1:6379> zadd yiibaiset 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd yiibaiset 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd yiibaiset 1 sqlite
(integer) 1
redis 127.0.0.1:6379> zadd yiibaiset 1 sqlite
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE yiibaiset 0 1000
1) 'mongodb'
2) 'redis'
3) 'sqlite'
因?yàn)?‘ 4. Redis命令Redis命令是用于在Redis服務(wù)器上執(zhí)行一些操作。 語(yǔ)法 [yiibai@ubuntu:~]$ redis-cli
示例 要啟動(dòng)Redis客戶端,請(qǐng)打開(kāi)終端并鍵入命令 [yiibai@ubuntu:~]$redis-cli
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
PONG
在上面的示例中,連接到到在本地機(jī)器上運(yùn)行的Redis服務(wù)器并執(zhí)行 在遠(yuǎn)程服務(wù)器上運(yùn)行命令要在Redis遠(yuǎn)程服務(wù)器上運(yùn)行命令,需要通過(guò)客戶端 語(yǔ)法 [yiibai@ubuntu:~]$ redis-cli -h host -p port -a password
示例 [yiibai@ubuntu:~]$ redis-cli -h 127.0.0.1 -p 6379 -a 'mypass'
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
PONG
5. Redis鍵命令Redis鍵命令用于管理Redis中的鍵。以下是使用redis鍵命令的語(yǔ)法。 語(yǔ)法 redis 127.0.0.1:6379> COMMAND KEY_NAME
示例 redis 127.0.0.1:6379> SET akey redis
OK
redis 127.0.0.1:6379> DEL akey
(integer) 1
127.0.0.1:6379> GET akey
(nil)
在上面的例子中, Redis鍵命令下表列出了與鍵相關(guān)的一些基本命令。
6. Redis字符串Redis字符串命令用于管理Redis中的字符串值。以下是使用Redis字符串命令的語(yǔ)法。 redis 127.0.0.1:6379> COMMAND KEY_NAME
示例 redis 127.0.0.1:6379> SET mykey 'redis'
OK
redis 127.0.0.1:6379> GET mykey
'redis'
在上面的例子中, Redis字符串命令下表列出了一些用于在Redis中管理字符串的基本命令。
7. Redis哈希Redis Hashes是字符串字段和字符串值之間的映射(類似于PHP中的數(shù)組類型)。 因此,它們是表示對(duì)象的完美數(shù)據(jù)類型。 在Redis中,每個(gè)哈希(散列)可以存儲(chǔ)多達(dá)4億個(gè)鍵-值對(duì)。 示例redis 127.0.0.1:6379> HMSET myhash name 'redis tutorial'
description 'redis basic commands for caching' likes 20 visitors 23000
OK
127.0.0.1:6379> HGETALL myhash
1) 'field1'
2) 'Hello'
3) 'field2'
4) 'World'
5) 'name'
6) 'redis tutorial'
在上面的例子中,在名稱為’ 8. Redis列表Redis列表只是字符串列表,按插入順序排序??梢栽诹斜淼念^部或尾部添加Redis列表中的元素。 列表的最大長(zhǎng)度為 示例redis 127.0.0.1:6379> LPUSH mylist 'redis'
(integer) 1
redis 127.0.0.1:6379> LPUSH mylist 'mongodb'
(integer) 2
redis 127.0.0.1:6379> LPUSH mylist 'mysql'
(integer) 3
redis 127.0.0.1:6379> LRANGE mylist 0 10
1) 'mysql'
2) 'mongodb'
3) 'redis'
在上面的示例中,通過(guò)命令 8. Redis集合Redis集合是唯一字符串的無(wú)序集合。 唯一值表示集合中不允許鍵中有重復(fù)的數(shù)據(jù)。 在Redis中設(shè)置添加,刪除和測(cè)試成員的存在(恒定時(shí)間O(1),而不考慮集合中包含的元素?cái)?shù)量)。列表的最大長(zhǎng)度為 示例redis 127.0.0.1:6379> SADD myset 'redis'
(integer) 1
redis 127.0.0.1:6379> SADD myset 'mongodb'
(integer) 1
redis 127.0.0.1:6379> SADD myset 'mysql'
(integer) 1
redis 127.0.0.1:6379> SADD myset 'mysql'
(integer) 0
redis 127.0.0.1:6379> SMEMBERS 'myset'
1) 'mysql'
2) 'mongodb'
3) 'redis'
在上面的示例中,通過(guò)命令 9. Redis發(fā)送訂閱Redis發(fā)布訂閱(pub/sub)是一種消息通信模式:發(fā)送者(pub)發(fā)送消息,訂閱者(sub)接收消息。 在Redis中,客戶端可以訂閱任意數(shù)量的信道。 示例以下示例說(shuō)明了發(fā)布用戶概念的工作原理。 在以下示例中,一個(gè)客戶端訂閱名為“ redis 127.0.0.1:6379> SUBSCRIBE redisChat
Reading messages... (press Ctrl-C to quit)
1) 'subscribe'
2) 'redisChat'
3) (integer) 1
現(xiàn)在,兩個(gè)客戶端在名稱為“ redis 127.0.0.1:6379> PUBLISH redisChat 'Redis is a great caching technique'
(integer) 1
redis 127.0.0.1:6379> PUBLISH redisChat 'Learn redis by yiibai'
(integer) 1
1) 'message'
2) 'redisChat'
3) 'Redis is a great caching technique'
1) 'message'
2) 'redisChat'
3) 'Learn redis by yiibai'
10. Redis事務(wù)Redis事務(wù)允許在單個(gè)步驟中執(zhí)行一組命令。以下是事務(wù)的兩個(gè)屬性:
語(yǔ)法示例Redis事務(wù)由命令 redis 127.0.0.1:6379> MULTI
OK
List of commands here
redis 127.0.0.1:6379> EXEC
示例以下示例說(shuō)明了如何啟動(dòng)和執(zhí)行Redis事務(wù)。 redis 127.0.0.1:6379> MULTI
OK
redis 127.0.0.1:6379> SET mykey 'redis'
QUEUED
redis 127.0.0.1:6379> GET mykey
QUEUED
redis 127.0.0.1:6379> INCR visitors
QUEUED
redis 127.0.0.1:6379> EXEC
1) OK
2) 'redis'
3) (integer) 1
11. Redis腳本Redis腳本用于使用Lua解釋器來(lái)執(zhí)行腳本。從 語(yǔ)法以下是 redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]
示例以下示例說(shuō)明了Redis腳本的工作原理。 redis 127.0.0.1:6379> EVAL 'return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}' 2 key1
key2 first second
1) 'key1'
2) 'key2'
3) 'first'
4) 'second'
12. Redis連接Redis中的連接命令基本上是用于管理與Redis服務(wù)器的客戶端連接。 示例以下示例說(shuō)明客戶端如何向Redis服務(wù)器驗(yàn)證自身,并檢查服務(wù)器是否正在運(yùn)行。 redis 127.0.0.1:6379> AUTH 'password'
OK
redis 127.0.0.1:6379> PING
PONG
Redis連接命令下表列出了與Redis連接相關(guān)的一些基本命令。
13. Redis服務(wù)器Redis服務(wù)器命令基本上是用于管理Redis服務(wù)器。 示例以下示例說(shuō)明了如何獲取有關(guān)服務(wù)器的所有統(tǒng)計(jì)信息和信息。 127.0.0.1:6379> info
# Server
redis_version:2.8.4
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:8f6097d7914679ca
redis_mode:standalone
os:Linux 3.19.0-25-generic i686
arch_bits:32
multiplexing_api:epoll
gcc_version:4.8.2
process_id:1004
run_id:1e53acea2aa628199c4e438a3ed815d96eebc036
tcp_port:6379
uptime_in_seconds:888450
uptime_in_days:10
hz:10
lru_clock:1861984
config_file:/etc/redis/redis.conf
# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:424872
used_memory_human:414.91K
used_memory_rss:6709248
used_memory_peak:424464
used_memory_peak_human:414.52K
used_memory_lua:22528
mem_fragmentation_ratio:15.79
mem_allocator:jemalloc-3.4.1
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1486607123
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
# Stats
total_connections_received:1
total_commands_processed:263
instantaneous_ops_per_sec:0
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:257
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:4793
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# CPU
used_cpu_sys:24.65
used_cpu_user:15.84
used_cpu_sys_children:0.08
used_cpu_user_children:0.00
# Keyspace
db0:keys=14,expires=0,avg_ttl=0
db1:keys=1,expires=0,avg_ttl=0
127.0.0.1:6379>
14. Redis備份Redis數(shù)據(jù)庫(kù)可以使用安全的方案,使得進(jìn)行連接的任何客戶端在執(zhí)行命令之前都需要進(jìn)行身份驗(yàn)證。要保護(hù)Redis安全,需要在配置文件中設(shè)置密碼。 示例下面的示例顯示了保護(hù)Redis實(shí)例的步驟。 127.0.0.1:6379> CONFIG get requirepass
1) 'requirepass'
2) ''
默認(rèn)情況下,此屬性為空,這表示還沒(méi)有為此實(shí)例設(shè)置密碼。您可以通過(guò)執(zhí)行以下命令更改此屬性。 127.0.0.1:6379> CONFIG set requirepass 'yiibai'
OK
127.0.0.1:6379> CONFIG get requirepass
1) 'requirepass'
2) 'yiibai'
設(shè)置密碼后,如果任何客戶端運(yùn)行命令而不進(jìn)行身份驗(yàn)證,則會(huì)返回一個(gè)(error) NOAUTH Authentication required.的錯(cuò)誤信息。 因此,客戶端需要使用AUTH命令來(lái)驗(yàn)證。 語(yǔ)法以下是AUTH命令的基本語(yǔ)法。 127.0.0.1:6379> AUTH password
示例127.0.0.1:6379> AUTH 'yiibai'
OK
127.0.0.1:6379> SET mykey 'Test value'
OK
127.0.0.1:6379> GET mykey
'Test value'
15. Redis客戶端連接Redis在配置的監(jiān)聽(tīng)TCP端口和Unix套接字上等待和接受客戶端的連接(如果已啟用)。 當(dāng)接受新的客戶端連接時(shí),執(zhí)行以下操作 -
最大客戶數(shù)在Redis配置文件( 以下是命令的基本語(yǔ)法。 127.0.0.1:6379> config get maxclients
1) 'maxclients'
2) '3984'
默認(rèn)情況下,此屬性設(shè)置為 示例在以下示例中,我們已將客戶端的最大數(shù)目設(shè)置為 yiibai@ubuntu:~$ redis-server --maxclients 100000
客戶端命令
16. Redis管道Redis是一個(gè)TCP服務(wù)器,支持請(qǐng)求/響應(yīng)協(xié)議。 在Redis中,請(qǐng)求通過(guò)以下步驟完成:
管道的意義管道的基本含義是,客戶端可以向服務(wù)器發(fā)送多個(gè)請(qǐng)求,而不必等待回復(fù),并最終在一個(gè)步驟中讀取回復(fù)。 示例要檢查Redis管道,只需啟動(dòng)Redis實(shí)例,并在終端中鍵入以下命令。 $(echo -en 'PING\r\n SET tutorial redis\r\nGET tutorial\r\nINCR
visitor\r\nINCR visitor\r\nINCR visitor\r\n'; sleep 10) | nc localhost 6379
PONG
OK
redis
:1
:2
:3
在上面的例子中,我們將使用PING命令檢查Redis連接。這里設(shè)置了一個(gè)名稱為 管道的好處這種技術(shù)的好處是大大提高了協(xié)議性能。通過(guò)管道從連接到本地主機(jī)速度增加五倍,因特網(wǎng)連接的至少快一百倍。 17. Redis分區(qū)分區(qū)是將數(shù)據(jù)拆分為多個(gè)Redis實(shí)例的過(guò)程,因此每個(gè)實(shí)例只包含一部分鍵。 分區(qū)的優(yōu)點(diǎn)
分區(qū)的缺點(diǎn)
分區(qū)類型Redis中有兩種類型的分區(qū)。假設(shè)有四個(gè)Redis實(shí)例: 范圍分區(qū)范圍分區(qū)通過(guò)將對(duì)象的范圍映射到特定的Redis實(shí)例來(lái)實(shí)現(xiàn)。假設(shè)在上面示例中,從ID 0到ID 10000的用戶將進(jìn)入實(shí)例 哈希分區(qū)在這種類型的分區(qū)中,使用散列函數(shù)(例如,模函數(shù))將鍵轉(zhuǎn)換成數(shù)字,然后將數(shù)據(jù)存儲(chǔ)在不同的Redis實(shí)例中。 18. Java連接Redis在Java程序中使用Redis之前,需要確保在機(jī)器上安裝了Redis的Java驅(qū)動(dòng)程序和Java環(huán)境??梢韵仍趯ava電腦上并配置好環(huán)境。 安裝現(xiàn)在,讓我們看看如何設(shè)置Redis Java驅(qū)動(dòng)程序。
Java連接到Redis服務(wù)器請(qǐng)參考以下一個(gè)簡(jiǎn)單的示例代碼 - import redis.clients.jedis.Jedis;
public class RedisJava {
public static void main(String[] args) {
//Connecting to Redis server on localhost
Jedis jedis = new Jedis('localhost');
System.out.println('Connection to server sucessfully');
//check whether server is running or not
System.out.println('Server is running: ' jedis.ping());
}
}
現(xiàn)在,編譯并運(yùn)行上面的程序來(lái)測(cè)試與Redis服務(wù)器的連接??梢愿鶕?jù)需要更改路徑。假設(shè) $javac RedisJava.java
$java RedisJava
Connection to server sucessfully
Server is running: PONG
Redis Java字符串示例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'));
}
}
執(zhí)行上面代碼,將生成以下結(jié)果 - $javac RedisStringJava.java
$java RedisStringJava
Connection to server sucessfully
Stored string in redis:: Redis tutorial
Redis Java列表示例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));
}
}
}
執(zhí)行上面代碼,將生成以下結(jié)果 - $javac RedisListJava.java
$java RedisListJava
Connection to server sucessfully
Stored string in redis:: Redis
Stored string in redis:: Mongodb
Stored string in redis:: Mysql
Redis Java鍵示例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));
}
}
}
執(zhí)行上面代碼,將生成以下結(jié)果 - $javac RedisKeyJava.java
$java RedisKeyJava
Connection to server sucessfully
List of stored keys:: tutorial-name
List of stored keys:: tutorial-list
19. PHP連接Redis在php程序中使用Redis之前,需要確保在機(jī)器上安裝了Redis的PHP驅(qū)動(dòng)程序和PHP環(huán)境??梢韵仍趯HP電腦上并配置好環(huán)境。 安裝現(xiàn)在,讓我們看看如何設(shè)置Redis PHP驅(qū)動(dòng)程序。 cd phpredis
sudo phpize
sudo ./configure
sudo make
sudo make install
現(xiàn)在,將“ extension = redis.so
現(xiàn)在,Redis PHP安裝完成! 使用連接到Redis服務(wù)器<?php
//Connecting to Redis server on localhost
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo 'Connection to server sucessfully';
//check whether server is running or not
echo 'Server is running: '.$redis->ping();
?>
當(dāng)程序執(zhí)行時(shí),將產(chǎn)生以下結(jié)果。 Connection to server sucessfully
Server is running: PONG
Redis PHP字符串示例<?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');
?>
執(zhí)行上面代碼,將生成以下結(jié)果 - Connection to server sucessfully
Stored string in redis:: Redis tutorial
Redis php列表示例<?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);
?>
執(zhí)行上面代碼,將生成以下結(jié)果 - Connection to server sucessfully
Stored string in redis::
Redis
Mongodb
Mysql
Redis php鍵示例<?php
//Connecting to Redis server on localhost
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo 'Connection to server sucessfully';
// Get the stored keys and print it
$arList = $redis->keys('*');
echo 'Stored keys in redis:: '
print_r($arList);
?>
執(zhí)行上面代碼,將生成以下結(jié)果 - Connection to server sucessfully
Stored string in redis::
tutorial-name
tutorial-list
20. C#連接Redis前面我們已經(jīng)準(zhǔn)備成功開(kāi)啟Redis服務(wù),其端口號(hào)為6379,接下來(lái)我們就看看如何使用C#語(yǔ)言來(lái)操作Redis。就如MongoDB一樣,要操作Redis服務(wù),自然就需要下載C#的客戶端,這里通過(guò)Nuget下載了“ServiceStack.Redis”客戶端,引入成功之后,就可以使用C#來(lái)對(duì)Redis服務(wù)進(jìn)行操作了。 由于Redis一般是用來(lái)作為緩存的,也就是一般我們把一些不經(jīng)常改變的數(shù)據(jù)通過(guò)Redis緩存起來(lái),之后用戶的請(qǐng)求就不需要再訪問(wèn)數(shù)據(jù)庫(kù),而可以直接從Redis緩存中直接獲取,這樣就可以減輕數(shù)據(jù)庫(kù)服務(wù)器的壓力以及加快響應(yīng)速度。既然是用來(lái)做緩存的,也就是通過(guò)指定key值來(lái)把對(duì)應(yīng)Value保存起來(lái),之后再根據(jù)key值來(lái)獲得之前緩存的值。具體的操作代碼如下所示,這里就不過(guò)多介紹了。 請(qǐng)參考以下代碼 - class Program
{
static void Main(string[] args)
{
//在Redis中存儲(chǔ)常用的5種數(shù)據(jù)類型:String,Hash,List,SetSorted set
var client = new RedisClient('127.0.0.1', 6379);
//AddString(client);
//AddHash(client);
//AddList(client);
//AddSet(client);
AddSetSorted(client);
Console.ReadLine();
}
private static void AddString(RedisClient client)
{
var timeOut = new TimeSpan(0,0,0,30);
client.Add('Test', 'Learninghard', timeOut);
while (true)
{
if (client.ContainsKey('Test'))
{
Console.WriteLine('String Key: Test -Value: {0}, 當(dāng)前時(shí)間: {1}', client.Get<string>('Test'), DateTime.Now);
Thread.Sleep(10000);
}
else
{
Console.WriteLine('Value 已經(jīng)過(guò)期了,當(dāng)前時(shí)間:{0}', DateTime.Now);
break;
}
}
var person = new Person() {Name = 'Learninghard', Age = 26};
client.Add('lh', person);
var cachePerson = client.Get<Person>('lh');
Console.WriteLine('Person's Name is : {0}, Age: {1}', cachePerson.Name, cachePerson.Age);
}
private static void AddHash(RedisClient client)
{
if (client == null) throw new ArgumentNullException('client');
client.SetEntryInHash('HashId', 'Name', 'Learninghard');
client.SetEntryInHash('HashId', 'Age', '26');
client.SetEntryInHash('HashId', 'Sex', '男');
var hashKeys = client.GetHashKeys('HashId');
foreach (var key in hashKeys)
{
Console.WriteLine('HashId--Key:{0}', key);
}
var haskValues = client.GetHashValues('HashId');
foreach (var value in haskValues)
{
Console.WriteLine('HashId--Value:{0}', value);
}
var allKeys = client.GetAllKeys(); //獲取所有的key。
foreach (var key in allKeys)
{
Console.WriteLine('AllKey--Key:{0}', key);
}
}
private static void AddList(RedisClient client)
{
if (client == null) throw new ArgumentNullException('client');
client.EnqueueItemOnList('QueueListId', '1.Learnghard'); //入隊(duì)
client.EnqueueItemOnList('QueueListId', '2.張三');
client.EnqueueItemOnList('QueueListId', '3.李四');
client.EnqueueItemOnList('QueueListId', '4.王五');
var queueCount = client.GetListCount('QueueListId');
for (var i = 0; i < queueCount; i )
{
Console.WriteLine('QueueListId出隊(duì)值:{0}', client.DequeueItemFromList('QueueListId')); //出隊(duì)(隊(duì)列先進(jìn)先出)
}
client.PushItemToList('StackListId', '1.Learninghard'); //入棧
client.PushItemToList('StackListId', '2.張三');
client.PushItemToList('StackListId', '3.李四');
client.PushItemToList('StackListId', '4.王五');
var stackCount = client.GetListCount('StackListId');
for (var i = 0; i < stackCount; i )
{
Console.WriteLine('StackListId出棧值:{0}', client.PopItemFromList('StackListId')); //出棧(棧先進(jìn)后出)
}
}
//它是string類型的無(wú)序集合。set是通過(guò)hash table實(shí)現(xiàn)的,添加,刪除和查找,對(duì)集合我們可以取并集,交集,差集
private static void AddSet(RedisClient client)
{
if (client == null) throw new ArgumentNullException('client');
client.AddItemToSet('Set1001', 'A');
client.AddItemToSet('Set1001', 'B');
client.AddItemToSet('Set1001', 'C');
client.AddItemToSet('Set1001', 'D');
var hastset1 = client.GetAllItemsFromSet('Set1001');
foreach (var item in hastset1)
{
Console.WriteLine('Set無(wú)序集合Value:{0}', item); //出來(lái)的結(jié)果是無(wú)須的
}
client.AddItemToSet('Set1002', 'K');
client.AddItemToSet('Set1002', 'C');
client.AddItemToSet('Set1002', 'A');
client.AddItemToSet('Set1002', 'J');
var hastset2 = client.GetAllItemsFromSet('Set1002');
foreach (var item in hastset2)
{
Console.WriteLine('Set無(wú)序集合ValueB:{0}', item); //出來(lái)的結(jié)果是無(wú)須的
}
var hashUnion = client.GetUnionFromSets(new string[] { 'Set1001', 'Set1002' });
foreach (var item in hashUnion)
{
Console.WriteLine('求Set1001和Set1002的并集:{0}', item); //并集
}
var hashG = client.GetIntersectFromSets(new string[] { 'Set1001', 'Set1002' });
foreach (var item in hashG)
{
Console.WriteLine('求Set1001和Set1002的交集:{0}', item); //交集
}
var hashD = client.GetDifferencesFromSet('Set1001', new string[] { 'Set1002' }); //[返回存在于第一個(gè)集合,但是不存在于其他集合的數(shù)據(jù)。差集]
foreach (var item in hashD)
{
Console.WriteLine('求Set1001和Set1002的差集:{0}', item); //差集
}
}
/*
sorted set 是set的一個(gè)升級(jí)版本,它在set的基礎(chǔ)上增加了一個(gè)順序的屬性,這一屬性在添加修改.元素的時(shí)候可以指定,
* 每次指定后,zset(表示有序集合)會(huì)自動(dòng)重新按新的值調(diào)整順序??梢岳斫鉃橛辛械谋?,一列存 value,一列存順序。操作中key理解為zset的名字.
*/
private static void AddSetSorted(RedisClient client)
{
if (client == null) throw new ArgumentNullException('client');
client.AddItemToSortedSet('SetSorted1001', 'A');
client.AddItemToSortedSet('SetSorted1001', 'B');
client.AddItemToSortedSet('SetSorted1001', 'C');
var listSetSorted = client.GetAllItemsFromSortedSet('SetSorted1001');
foreach (var item in listSetSorted)
{
Console.WriteLine('SetSorted有序集合{0}', item);
}
client.AddItemToSortedSet('SetSorted1002', 'A', 400);
client.AddItemToSortedSet('SetSorted1002', 'D', 200);
client.AddItemToSortedSet('SetSorted1002', 'B', 300);
// 升序獲取第一個(gè)值:'D'
var list = client.GetRangeFromSortedSet('SetSorted1002', 0, 0);
foreach (var item in list)
{
Console.WriteLine(item);
}
//降序獲取第一個(gè)值:'A'
list = client.GetRangeFromSortedSetDesc('SetSorted1002', 0, 0);
foreach (var item in list)
{
Console.WriteLine(item);
}
}
}
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
如何要想查看自己操作是否成功,也可以像MongoDB那樣下載一個(gè)客戶端工具,這里推薦一款Redis Desktop Manager。這個(gè)工具就相當(dāng)于SQL Server的客戶端工具一樣。通過(guò)這款工具可以查看Redis服務(wù)器中保存的數(shù)據(jù)和對(duì)應(yīng)格式。其使用也非常簡(jiǎn)單,只需要添加一個(gè)Redis服務(wù)連接即可。該工具的下載地址為:http://pan.baidu.com/s/1sjp55Ul |
|
來(lái)自: 昵稱59343811 > 《JAVA》