首页 > 代码库 > Redis学习笔记
Redis学习笔记
详细参考:http://www.yiibai.com/redis/
1.Redis概述
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
2.Redis优点
性能很高 : Redis是非常快的,每秒可以执行大约110000设置操作,81000个/每秒的读取操作。
支持丰富的数据类型 : Redis支持最大多数开发人员已经知道如列表,集合,可排序集合,哈希等数据类型。这使得在应用中很容易解决的各种问题,因为我们知道哪些问题处理使用哪种数据类型更好解决。
操作都是原子的 : 所有 Redis 的操作都是原子,从而确保当两个客户同时访问 Redis 服务器得到的是更新后的值(最新值)。
丰富的特性:支持publish/subscribe,通知,key过期等特性
redis支持主从复制
支持持久化数据存储
3.redis的数据类型
Redis支持5种数据类型,它们描述如下:
1)Strings - 字符串
Redis的字符串是字节序列。在Redis中字符串是二进制安全的,这意味着他们有一个已知的长度,是没有任何特殊字符终止决定的,所以可以存储任何东西,最大长度可达512兆。
例子
redis 127.0.0.1:6379> SET name "yiibai" OK redis 127.0.0.1:6379> GET name "yiibai"
在上面的例子使用Redis命令set和get,Redis的名称是yiibai的键存储在Redis的字符串值。
注:字符串值可以存储最大512兆字节的长度。
2)Hashes - 哈希值
Redis的哈希键值对的集合。 Redis的哈希值是字符串字段和字符串值之间的映射,所以它们被用来表示对象
例子
redis 127.0.0.1:6379> HMSET user:1 username yiibai password yiibai points 200 OK redis 127.0.0.1:6379> HGETALL user:1 1) "username" 2) "yiibai" 3) "password" 4) "yiibai" 5) "points" 6) "200"
在上面的例子中的哈希数据类型,用于存储包含用户的基本信息用户的对象。这里HMSET,HEXTALL对于Redis 命令 user:1 是键。
每个哈希可存储多达232 - 1个 字段 - 值对(超过4十亿)。
3)Lists - 列表
Redis的列表是简单的字符串列表,排序插入顺序。可以添加元素到Redis列表的头部或尾部。
例子
redis 127.0.0.1:6379> lpush tutoriallist redis (integer) 1 redis 127.0.0.1:6379> lpush tutoriallist mongodb (integer) 2 redis 127.0.0.1:6379> lpush tutoriallist rabitmq (integer) 3 redis 127.0.0.1:6379> lrange tutoriallist 0 10 1) "rabitmq" 2) "mongodb" 3) "redis"
列表的最大长度为232- 1元素(4294967295,每个列表中的元素超过4十亿)。
4)Sets - 集合
Redis集合是字符串的无序集合。在Redis中可以添加,删除和测试文件是否存在在O(1)的时间复杂度的成员。
例子
redis 127.0.0.1:6379> sadd tutoriallist redis (integer) 1 redis 127.0.0.1:6379> sadd tutoriallist mongodb (integer) 1 redis 127.0.0.1:6379> sadd tutoriallist rabitmq (integer) 1 redis 127.0.0.1:6379> sadd tutoriallist rabitmq (integer) 0 redis 127.0.0.1:6379> smembers tutoriallist 1) "rabitmq" 2) "mongodb" 3) "redis"
注意:在上面的例子中rabitmq设置属性加两次,但由于唯一性只加一次。
成员中集最大数量为232 - 1(4294967295,集合成员超过4十亿)。
5)集合排序
Redis的集合排序类似于Redis集合,字符串不重复的集合。不同的是,一个有序集合的每个成员关联分数,用于以便采取有序set命令,从最小的到最大的分数有关。虽然成员都是独一无二的,分数可能会重复。
例子
redis 127.0.0.1:6379> zadd tutoriallist 0 redis (integer) 1 redis 127.0.0.1:6379> zadd tutoriallist 0 mongodb (integer) 1 redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq (integer) 1 redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq (integer) 0 redis 127.0.0.1:6379> ZRANGEBYSCORE tutoriallist 0 1000 1) "redis" 2) "mongodb" 3) "rabitmq"
4.Redis的应用场景
1)Redis适用场景全部数据在memory
2)替代Memcached使用
3)除了key/value之外更多的数据类型支持
4)支持持久化
5)需要负载均衡的场景(redis主从同步)
5.Redis的安装和使用
1)安装步骤
wget http://download.redis.io/releases/redis-3.2.4.tar.gz tar xf redis-3.2.4.tar.gz cd redis-3.2.4 make MALLOC=jemalloc make PREFIX=/application/redis-3.2.4 install ln -s /application/redis-3.2.4/ /application/redis [root@server_3 redis-3.2.4]# tree /application/redis/bin/ /application/redis/bin/ ├── redis-benchmark ├── redis-check-aof ├── redis-check-rdb ├── redis-cli ├── redis-sentinel -> redis-server └── redis-server 0 directories, 6 files [root@server_3 redis-3.2.4]#
2)配置启动redis
添加redis的环境变量
echo “PATH=/application/redis/bin/:$PATH” >>/etc/profile source /etc/profile
从解压目录移动redis.conf到redis安装目录下
mkdir /application/redis/conf cd /tools/redis-3.2.4/ cp redis.conf /application/redis/conf/ ls /application/redis/conf [root@server_3 redis-3.2.4]# ls /application/redis/conf redis.conf
3)启动redis
redis-server /application/redis/conf/redis.conf &
警告1:
4095:M 28 Sep 13:13:36.835 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1‘ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1‘ for this to take effect.
解决:
[root@server_3 redis-3.2.4]# sysctl vm.overcommit_memory=1 [root@server_3 redis-3.2.4]# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf [root@server_3 redis-3.2.4]# tail -1 /etc/sysctl.conf vm.overcommit_memory = 1 [root@server_3 redis-3.2.4]#
警告2:
4103:M 28 Sep 13:16:41.123 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command ‘echo never > /sys/kernel/mm/transparent_hugepage/enabled‘ as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
解决:
[root@server_3 redis-3.2.4]# echo never > /sys/kernel/mm/transparent_hugepage/enabled [root@server_3 redis-3.2.4]# echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.local [root@server_3 redis-3.2.4]# tail -1 /etc/rc.local tail: inotify cannot be used, reverting to polling echo never > /sys/kernel/mm/transparent_hugepage/enabled [root@server_3 redis-3.2.4]#
4)关闭Redis
redis-cli shutdown
[root@server_3 redis-3.2.4]# redis-cli shutdown 4121:M 28 Sep 13:27:34.602 # User requested shutdown... 4121:M 28 Sep 13:27:34.602 * Saving the final RDB snapshot before exiting. 4121:M 28 Sep 13:27:34.603 * DB saved on disk 4121:M 28 Sep 13:27:34.603 * Removing the pid file. 4121:M 28 Sep 13:27:34.604 # Redis is now ready to exit, bye bye... [1]+ Done redis-server /application/redis/conf/redis.conf [root@server_3 redis-3.2.4]#
5)连接Redis
(1)本地连接
[root@server_3 redis-3.2.4]# redis-cli 127.0.0.1:6379> set 001 ok OK 127.0.0.1:6379> get 001 "ok" 127.0.0.1:6379>
(2)远程连接
Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]] -h <hostname> Server hostname (default: 127.0.0.1). -p <port> Server port (default: 6379). -s <socket> Server socket (overrides hostname and port). -a <password> Password to use when connecting to the server. -r <repeat> Execute specified command N times. -i <interval> When -r is used, waits <interval> seconds per command.
交互式操作:
[root@server_3 redis-3.2.4]# redis-cli -h 192.168.1.113 -p 6379 192.168.1.113:6379> set 002 testok OK 192.168.1.113:6379> get 002 "testok" 192.168.1.113:6379>
非交互式操作:
[root@server_3 bin]# redis-cli -h 192.168.1.113 -p 6379 set 001 dong OK [root@server_3 bin]# redis-cli -h 192.168.1.113 -p 6379 set 002 xi OK [root@server_3 bin]# redis-cli -h 192.168.1.113 -p 6379 get 001 "dong" [root@server_3 bin]# redis-cli -h 192.168.1.113 -p 6379 get 002 "xi" [root@server_3 bin]#
6.php安装redis扩展模块
wget https://codeload.github.com/phpredis/phpredis/zip/ unzip master cd phpredis-master/ phpize ./configure --with-php-config=/usr/bin/php-config make && make install vim /etc/php.ini 配置文件修改以下两项 extension_dir = "/usr/lib64/php/modules/" extension = redis.so 重启php服务 pkill php-fpm php-fpm -c /etc/php.ini -D
phpinfo测试
7.redis配置主从同步
1)概述
从结构上,单个Redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大;
从容量上,单个Redis服务器内存容量有限,一般情况下,单台Redis最大使用内存不应该超过20G。
2)主从同步配置
redis主从同步只需要修改从库的配置文件,指定主库的地址和端口即可
示例:192.168.1.112为redis从库,192.168.1.113为主库
注意:默认从库是只读的,且主从库的数据都是一样
[root@server_02 redis-3.2.4]# grep slaveof /application/redis/conf/redis.conf # slaveof <masterip> <masterport> slaveof 192.168.1.113 6379 --只需修改此部分 [root@server_02 redis-3.2.4]#
测试:
主库写操作1:
[root@server_3 bin]# redis-cli -h 192.168.1.113 -p 6379 192.168.1.113:6379> set 001 dong OK 192.168.1.113:6379> get 001 "dong" 192.168.1.113:6379>
主库删除操作2:
192.168.1.113:6379> del 001 (integer) 1 192.168.1.113:6379> get 001 (nil) 192.168.1.113:6379>
从库读操作1:
[root@server_02 redis-3.2.4]# redis-cli 127.0.0.1:6379> get 001 "dong" 127.0.0.1:6379>
从库读操作2:
127.0.0.1:6379> get 001 (nil) 127.0.0.1:6379>
本文出自 “秦仙儿” 博客,请务必保留此出处http://youdong.blog.51cto.com/3562886/1859462
Redis学习笔记