十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Redis简介
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、网站空间、营销软件、网站建设、宜章网站维护、网站推广。Redis(REmote DIctionary Server)是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
Redis特点:
1,支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
2,不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
3,支持数据的备份,即master-slave模式的数据备份
Redis优势:
1,读写性能高。读的速度是110000次/s,写的速度是81000次/s 。
2,丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
3,原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
4,丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
(一)Redis安装
环境:
操作系统:CentOS Linux release 7.2
具体步骤如下:
1,下载安装包,地址如下:https://redis.io/download
[root@localhost install]#wget http://download.redis.io/releases/redis-3.2.9.tar.gz [root@localhost install]#tar zxvf redis-3.2.9.tar.gz [root@localhost install]#mv redis-3.2.9 /usr/local/ [root@localhost install]#cd /usr/local/redis-3.2.9/ [root@localhost redis-3.2.9]# make MALLOC=libc2,启动redis服务。默认加载的是/usr/local/redis-3.2.9/redis.conf 配置文件。
[root@localhost redis-3.2.9]# cd src/ [root@localhost src]# ./redis-server 13796:C 07 Jun 04:40:46.590 # Warning: no config file specified, using the default config. In order to specify a config file use ./redis-server /path/to/redis.conf _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 3.2.9 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 13796 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 13796:M 07 Jun 04:40:46.591 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 13796:M 07 Jun 04:40:46.591 # Server started, Redis version 3.2.9 13796:M 07 Jun 04:40:46.591 # 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. 13796:M 07 Jun 04:40:46.591 # 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. 13796:M 07 Jun 04:40:46.591 * DB loaded from disk: 0.000 seconds 13796:M 07 Jun 04:40:46.591 * The server is now ready to accept connections on port 63793,使用客户端redis-cli进行连接测试。
[appuser@localhost src]$ cd .. [appuser@localhost redis-3.2.9]$ cd src/ [appuser@localhost src]$ ./redis-cli 127.0.0.1:6379> set lqb bar OK 127.0.0.1:6379> get lqb "bar" 127.0.0.1:6379> ping PONG(二)Redis配置。redis配置既可以通过config命令查看或设置配置项,也可以通过redis.conf配置。
1,通过config命令格式配置(config get config_setting_name):
127.0.0.1:6379> config get loglevel 1) "loglevel" 2) "notice 127.0.0.1:6379> config get * ####使用*获取所有配置项 1) "dbfilename" 2) "dump.rdb" 3) "requirepass" 4) "" 5) "masterauth" 6) "" 7) "unixsocket" 8) "" 9) "logfile" 10) "" 11) "pidfile" 12) "" 13) "slave-announce-ip" 14) "" 15) "maxmemory" 16) "0" 17) "maxmemory-samples" 18) "5" 19) "timeout" 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-size" 30) "-2" 31) "list-compress-depth" 32) "0" 33) "set-max-intset-entries" 34) "512" 35) "zset-max-ziplist-entries" 36) "128" 37) "zset-max-ziplist-value" 38) "64" 39) "hll-sparse-max-bytes" 40) "3000" 41) "lua-time-limit" 42) "5000" 43) "slowlog-log-slower-than" 44) "10000" 45) "latency-monitor-threshold" 46) "0" 47) "slowlog-max-len" 48) "128" 49) "port" 50) "6379" 51) "tcp-backlog" 52) "511" 53) "databases" 54) "16" 55) "repl-ping-slave-period" 56) "10" 57) "repl-timeout" 58) "60" 59) "repl-backlog-size" 60) "1048576" 61) "repl-backlog-ttl" 62) "3600" 63) "maxclients" 64) "10000" 65) "watchdog-period" 66) "0" 67) "slave-priority" 68) "100" 69) "slave-announce-port" 70) "0" 71) "min-slaves-to-write" 72) "0" 73) "min-slaves-max-lag" 74) "10" 75) "hz" 76) "10" 77) "cluster-node-timeout" 78) "15000" 79) "cluster-migration-barrier" 80) "1" 81) "cluster-slave-validity-factor" 82) "10" 83) "repl-diskless-sync-delay" 84) "5" 85) "tcp-keepalive" 86) "300" 87) "cluster-require-full-coverage" 88) "yes" 89) "no-appendfsync-on-rewrite" 90) "no" 91) "slave-serve-stale-data" 92) "yes" 93) "slave-read-only" 94) "yes" 95) "stop-writes-on-bgsave-error" 96) "yes" 97) "daemonize" 98) "no" 99) "rdbcompression" 100) "yes" 101) "rdbchecksum" 102) "yes" 103) "activerehashing" 104) "yes" 105) "protected-mode" 106) "yes" 107) "repl-disable-tcp-nodelay" 108) "no" 109) "repl-diskless-sync" 110) "no" 111) "aof-rewrite-incremental-fsync" 112) "yes" 113) "aof-load-truncated" 114) "yes" 115) "maxmemory-policy" 116) "noeviction" 117) "loglevel" 118) "notice" 119) "supervised" 120) "no" 121) "appendfsync" 122) "everysec" 123) "syslog-facility" 124) "local0" 125) "appendonly" 126) "no" 127) "dir" 128) "/usr/local/redis-3.2.9/src" 129) "save" 130) "3600 1 300 100 60 10000" 131) "client-output-buffer-limit" 132) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60" 133) "unixsocketperm" 134) "0" 135) "slaveof" 136) "" 137) "notify-keyspace-events" 138) "" 139) "bind" 140) "" 编辑配置项 语法:config set config_setting_name new_config_value 127.0.0.1:6379> config set loglevel "notice" OK 127.0.0.1:6379> config get loglevel 1) "loglevel" 2) "notice"2,redis.conf配置项的说明如下:
1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定 pidfile /var/run/redis.pid 3. 指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字 port 6379 4. 绑定的主机地址 bind 127.0.0.1 5.当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能 timeout 300 6. 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose loglevel verbose 7. 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null logfile stdout 8. 设置数据库的数量,默认数据库为0,可以使用SELECT(三)redis数据类型
redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
(1)string字符串:
string中的字符串是一个字节序列,是最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string中的字符串是二进制安全的,这意味着它们的长度不由任何特殊的终止字符决定。
redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,字符串的大长度能存储512MB。
127.0.0.1:6379> set name "lqb" OK 127.0.0.1:6379> get name "lqb"在以上实例中我们使用了 Redis 的 SET 和 GET 命令。键为 name,对应的值为 lqb。一个键大能存储512MB
(2)Hash(哈希)
Redis hash 是一个键值对集合。
Redis hash是是字符串字段和字符串值之间的映射,hash特别适合用于表示对象。
127.0.0.1:6379> hmset user username lqb password passwd123 OK 127.0.0.1:6379> hgetall user 1) "username" 2) "lqb" 3) "password" 4) "passwd123"实例中我们使用了 Redis HMSET, HGETALL 命令,user是键的名称
每个 hash 可以存储 232 -1 键值对(40多亿)
(3)list(列表)。Redis 列表是字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
127.0.0.1:6379> lpush runoob redis (integer) 1 127.0.0.1:6379> lpush runoob mongodb (integer) 2 127.0.0.1:6379> lpush runoob mysql (integer) 3 127.0.0.1:6379> lrange runoob 0 10 1) "mysql" 2) "mongodb" 3) "redis" 127.0.0.1:6379> lrange runoob 0 2 1) "mysql" 2) "mongodb" 3) "redis" 127.0.0.1:6379> lrange runoob 0 1 1) "mysql" 2) "mongodb"列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。
(4)set(集合)。
Redis的Set是字符串(string)类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
sadd 命令
添加一个string元素到,key对应的set集合中,成功返回1,如果元素已经在集合中返回0,key对应的set不存在返回错误。
语法:sadd key member.
redis 127.0.0.1:6379> sadd runoob redis (integer) 1 redis 127.0.0.1:6379> sadd runoob mongodb (integer) 1 redis 127.0.0.1:6379> sadd runoob rabitmq (integer) 1 redis 127.0.0.1:6379> sadd runoob rabitmq (integer) 0 redis 127.0.0.1:6379> smembers runoob 1) "rabitmq" 2) "mongodb" 3) "redis"根据集合内元素的唯一性,第二次插入的元素将被忽略。
集合中大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。
(5)zset(sorted set:有序集合),是不重复的字符集合。Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
zadd 命令格式:zadd key score member
添加元素到集合,元素在集合中存在则更新对应score
redis 127.0.0.1:6379> zadd runoob 0 redis (integer) 1 redis 127.0.0.1:6379> zadd runoob 0 mongodb (integer) 1 redis 127.0.0.1:6379> zadd runoob 0 rabitmq (integer) 1 redis 127.0.0.1:6379> zadd runoob 0 rabitmq (integer) 0 redis 127.0.0.1:6379> ZRANGEBYSCORE runoob 0 1000 1) "redis" 2) "mongodb" 3) "rabitmq"另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。