Redis的优点以下是Redis的一些优点。
Redis与其他键值存储系统
1. Redis环境安装配置在本章中,您将了解和学习Redis的环境安装设置。 在Ubuntu上安装Redis要在Ubuntu上安装Redis,打开终端并键入以下命令 - [yiibai@ubuntu:~]$ sudo apt-get update
[yiibai@ubuntu:~]$ sudo apt-get install redis-server
这将在Ubuntu机器上安装Redis。 启动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
这将打开一个redis提示,如下所示 - redis 127.0.0.1:6379>
在上面的提示中, redis 127.0.0.1:6379> ping
PONG
这表明Redis已成功在您的计算机上安装了。 在Ubuntu上安装Redis桌面管理 要在Ubuntu上安装Redis桌面管理器,可从 http:///download 下载该软件包,安装即可。 打开下载的软件包并安装。 Redis桌面管理器将提供用于管理Redis的键和数据的UI。 2. Redis配置在Redis中,在Redis的根目录下有一个配置文件( 语法 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'
编辑配置要更新配置,可以直接编辑 语法 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数据类型Redis支持 字符串Redis中的字符串是一个字节序列。Redis中的字符串是二进制安全的,这意味着它们的长度不由任何特殊的终止字符决定。因此,可以在一个字符串中存储高达 示例 redis 127.0.0.1:6379> set name ''
OK
redis 127.0.0.1:6379> get name
''
在上面的示例中,
散列/哈希Redis散列/哈希(Hashes)是键值对的集合。Redis散列/哈希是字符串字段和字符串值之间的映射。因此,它们用于表示对象。 示例 redis 127.0.0.1:6379> HMSET ukey username 'yiibai' password 'passswd123' points 200
在上述示例中,散列/哈希数据类型用于存储包含用户的基本信息的用户对象。这里 每个散列/哈希可以存储多达 列表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'
列表的最大长度为 集合Redis集合是字符串的无序集合。在Redis中,您可以添加,删除和测试成员存在的时间O(1)复杂性。 示例 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'
一个集合中的最大成员数量为 可排序集合Redis可排序集合类似于Redis集合,是不重复的字符集合。 不同之处在于,排序集合的每个成员都与分数相关联,这个分数用于按最小分数到最大分数来排序的排序集合。虽然成员是唯一的,但分数值可以重复。 示例 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'
因为 ‘ 4. Redis命令Redis命令是用于在Redis服务器上执行一些操作。 语法 [yiibai@ubuntu:~]$ redis-cli
示例 要启动Redis客户端,请打开终端并键入命令 [yiibai@ubuntu:~]$redis-cli
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
PONG
在上面的示例中,连接到到在本地机器上运行的Redis服务器并执行 在远程服务器上运行命令要在Redis远程服务器上运行命令,需要通过客户端 语法 [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键命令的语法。 语法 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键命令下表列出了与键相关的一些基本命令。
6. Redis字符串Redis字符串命令用于管理Redis中的字符串值。以下是使用Redis字符串命令的语法。 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中的数组类型)。 因此,它们是表示对象的完美数据类型。 在Redis中,每个哈希(散列)可以存储多达4亿个键-值对。 示例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列表中的元素。 列表的最大长度为 示例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'
在上面的示例中,通过命令 8. Redis集合Redis集合是唯一字符串的无序集合。 唯一值表示集合中不允许键中有重复的数据。 在Redis中设置添加,删除和测试成员的存在(恒定时间O(1),而不考虑集合中包含的元素数量)。列表的最大长度为 示例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'
在上面的示例中,通过命令 9. Redis发送订阅Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。 在Redis中,客户端可以订阅任意数量的信道。 示例以下示例说明了发布用户概念的工作原理。 在以下示例中,一个客户端订阅名为“ redis 127.0.0.1:6379> SUBSCRIBE redisChat
Reading messages... (press Ctrl-C to quit)
1) 'subscribe'
2) 'redisChat'
3) (integer) 1
现在,两个客户端在名称为“ 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事务Redis事务允许在单个步骤中执行一组命令。以下是事务的两个属性:
语法示例Redis事务由命令 redis 127.0.0.1:6379> MULTI
OK
List of commands here
redis 127.0.0.1:6379> EXEC
示例以下示例说明了如何启动和执行Redis事务。 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解释器来执行脚本。从 语法以下是 redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]
示例以下示例说明了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服务器的客户端连接。 示例以下示例说明客户端如何向Redis服务器验证自身,并检查服务器是否正在运行。 redis 127.0.0.1:6379> AUTH 'password'
OK
redis 127.0.0.1:6379> PING
PONG
Redis连接命令下表列出了与Redis连接相关的一些基本命令。
13. Redis服务器Redis服务器命令基本上是用于管理Redis服务器。 示例以下示例说明了如何获取有关服务器的所有统计信息和信息。 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数据库可以使用安全的方案,使得进行连接的任何客户端在执行命令之前都需要进行身份验证。要保护Redis安全,需要在配置文件中设置密码。 示例下面的示例显示了保护Redis实例的步骤。 127.0.0.1:6379> CONFIG get requirepass
1) 'requirepass'
2) ''
默认情况下,此属性为空,这表示还没有为此实例设置密码。您可以通过执行以下命令更改此属性。 127.0.0.1:6379> CONFIG set requirepass 'yiibai'
OK
127.0.0.1:6379> CONFIG get requirepass
1) 'requirepass'
2) 'yiibai'
设置密码后,如果任何客户端运行命令而不进行身份验证,则会返回一个(error) NOAUTH Authentication required.的错误信息。 因此,客户端需要使用AUTH命令来验证。 语法以下是AUTH命令的基本语法。 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在配置的监听TCP端口和Unix套接字上等待和接受客户端的连接(如果已启用)。 当接受新的客户端连接时,执行以下操作 -
最大客户数在Redis配置文件( 以下是命令的基本语法。 127.0.0.1:6379> config get maxclients
1) 'maxclients'
2) '3984'
默认情况下,此属性设置为 示例在以下示例中,我们已将客户端的最大数目设置为 yiibai@ubuntu:~$ redis-server --maxclients 100000
客户端命令
16. Redis管道Redis是一个TCP服务器,支持请求/响应协议。 在Redis中,请求通过以下步骤完成:
管道的意义管道的基本含义是,客户端可以向服务器发送多个请求,而不必等待回复,并最终在一个步骤中读取回复。 示例要检查Redis管道,只需启动Redis实例,并在终端中键入以下命令。 $(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连接。这里设置了一个名称为 管道的好处这种技术的好处是大大提高了协议性能。通过管道从连接到本地主机速度增加五倍,因特网连接的至少快一百倍。 17. Redis分区分区是将数据拆分为多个Redis实例的过程,因此每个实例只包含一部分键。 分区的优点
分区的缺点
分区类型Redis中有两种类型的分区。假设有四个Redis实例: 范围分区范围分区通过将对象的范围映射到特定的Redis实例来实现。假设在上面示例中,从ID 0到ID 10000的用户将进入实例 哈希分区在这种类型的分区中,使用散列函数(例如,模函数)将键转换成数字,然后将数据存储在不同的Redis实例中。 18. Java连接Redis在Java程序中使用Redis之前,需要确保在机器上安装了Redis的Java驱动程序和Java环境。可以先在将Java电脑上并配置好环境。 安装现在,让我们看看如何设置Redis Java驱动程序。
Java连接到Redis服务器请参考以下一个简单的示例代码 - 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());
}
}
现在,编译并运行上面的程序来测试与Redis服务器的连接。可以根据需要更改路径。假设 $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'));
}
}
执行上面代码,将生成以下结果 - $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));
}
}
}
执行上面代码,将生成以下结果 - $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));
}
}
}
执行上面代码,将生成以下结果 - $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之前,需要确保在机器上安装了Redis的PHP驱动程序和PHP环境。可以先在将PHP电脑上并配置好环境。 安装现在,让我们看看如何设置Redis PHP驱动程序。 cd phpredis
sudo phpize
sudo ./configure
sudo make
sudo make install
现在,将“ extension = redis.so
现在,Redis PHP安装完成! 使用连接到Redis服务器<?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();
?>
当程序执行时,将产生以下结果。 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');
?>
执行上面代码,将生成以下结果 - 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);
?>
执行上面代码,将生成以下结果 - 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);
?>
执行上面代码,将生成以下结果 - Connection to server sucessfully
Stored string in redis::
tutorial-name
tutorial-list
20. C#连接Redis前面我们已经准备成功开启Redis服务,其端口号为6379,接下来我们就看看如何使用C#语言来操作Redis。就如MongoDB一样,要操作Redis服务,自然就需要下载C#的客户端,这里通过Nuget下载了“ServiceStack.Redis”客户端,引入成功之后,就可以使用C#来对Redis服务进行操作了。 由于Redis一般是用来作为缓存的,也就是一般我们把一些不经常改变的数据通过Redis缓存起来,之后用户的请求就不需要再访问数据库,而可以直接从Redis缓存中直接获取,这样就可以减轻数据库服务器的压力以及加快响应速度。既然是用来做缓存的,也就是通过指定key值来把对应Value保存起来,之后再根据key值来获得之前缓存的值。具体的操作代码如下所示,这里就不过多介绍了。 请参考以下代码 - class Program
{
static void Main(string[] args)
{
//在Redis中存储常用的5种数据类型: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}, 当前时间: {1}', client.Get<string>('Test'), DateTime.Now);
Thread.Sleep(10000);
}
else
{
Console.WriteLine('Value 已经过期了,当前时间:{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'); //入队
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出队值:{0}', client.DequeueItemFromList('QueueListId')); //出队(队列先进先出)
}
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')); //出栈(栈先进后出)
}
}
//它是string类型的无序集合。set是通过hash table实现的,添加,删除和查找,对集合我们可以取并集,交集,差集
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无序集合Value:{0}', item); //出来的结果是无须的
}
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无序集合ValueB:{0}', item); //出来的结果是无须的
}
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' }); //[返回存在于第一个集合,但是不存在于其他集合的数据。差集]
foreach (var item in hashD)
{
Console.WriteLine('求Set1001和Set1002的差集:{0}', item); //差集
}
}
/*
sorted set 是set的一个升级版本,它在set的基础上增加了一个顺序的属性,这一属性在添加修改.元素的时候可以指定,
* 每次指定后,zset(表示有序集合)会自动重新按新的值调整顺序。可以理解为有列的表,一列存 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);
// 升序获取第一个值:'D'
var list = client.GetRangeFromSortedSet('SetSorted1002', 0, 0);
foreach (var item in list)
{
Console.WriteLine(item);
}
//降序获取第一个值:'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那样下载一个客户端工具,这里推荐一款Redis Desktop Manager。这个工具就相当于SQL Server的客户端工具一样。通过这款工具可以查看Redis服务器中保存的数据和对应格式。其使用也非常简单,只需要添加一个Redis服务连接即可。该工具的下载地址为:http://pan.baidu.com/s/1sjp55Ul |
|
来自: 昵称59343811 > 《JAVA》