标签:redis
一、Overview of Redis Redis的概述
The word Redis means REmote DIctionary Server Redis的意思远程字典服务器
Initial release in 2009 2009年首次发布
It is an advanced key-value store or a data structure store 这是一种先进的key-value存储或数据结构存储(不仅能存储键值简单数据还能存储列表,字典)
Runs entirely in memory 完全运行在内存
All data is kept in memory 所有数据都保存在内存中
Quick data access since it is maintained in memory 快速访问数据因为保留在内存中
Data can be backed up to disk periodically 数据可以周期性地备份到磁盘
Single threaded server 单线程服务器
Extensible via Lua scripts 通过Lua脚本扩展
Able to replicate data between servers 能够复制服务器之间的数据(主从模式借助于sentinel实现一定意义上的HA)
Clustering also available 集群也可
“Redis是一个开源的,BSD许可的,高级的键值缓存和存储,它通常被称为数据结构服务器
可以包含字符串,哈希,列表,集合,整理台,位图和hyperloglogs“。
Redis是一个内存中,但是可以保存在磁盘中
1百万的小键 - >字符串值对使用100 MB内存
单线程 - 但CPU不应该是瓶颈
平均Linux系统可以提供每50万并发(失误没秒)
限制很可能在你的系统可用内存
最大 232键
2、Redis的持久保存方式
1)快照服务
Data异步从内存转移到磁盘
2)AOF(追加文件)
每次修改操作被写入到文件中
能通过重播操作重新创建数据存储
在不中断服务,将重建作为AOF需要的命令的最短序列重建内存中当前的数据集
3、Redis和Memcached的不同
Redis的优势:
丰富的(资料形态)操作
Hashs, Lists, Sets, Sorted Sets, HyperLogLog 等
內建replication及cluster
就地更新(in-place update)操作
支援持久化(磁盘)
避免雪崩效应
Memcached的优势:
多线程
善用多核CPU
更少的阻塞操作
更少的内存开销
更少的内存分配压力
可能有更少的内存碎片
4、Redis 3.0
2015年4月1日正式推出
Redis Cluster
新的 “ embedded string”
LRU演算法的改进:
预设随机取5个样本,插入并排序至一个pool,移除最佳者,如此反复,直到内存用量小于maxmemory的设定
樣本5比先前的3多
从局部最优趋向全局最优
5、三种存储系统
RDBMS: Oracle,DB2,PostgreSQL,MySQL,SQL Server,...
NoSQL:HBase,Memcached,MongoDB,Redis,Neo4j...
4种流派:键-值存储,(Column Family)列族存储,(Documentation)文档存储,(Graph)图示存储
NewSQL(原生支持分布式):Aerospike,FoundationDB,RethinkDB,...
6、Redis的组件
C语言研发,作者,意大利人,官网:redis.io
redis-server:服务器端
redis-cli:客户端
command line interface
redis-benchmark:压力测试工具
redis-check-dump & redis-check-aof:redis存储在磁盘上的文件检测工具
7、Redis的安装
Installation
Download, extract(解压) and compile(编译) Redis with:
$ wget http://download.redis.io/releases/redis-3.2.1.tar.gz
$ tar xzf redis-3.2.1.tar.gz
$ cd redis-3.2.1
$ make
The binaries that are now compiled are available in the src directory. Run Redis with:
这被编译的二进制文件是在src目录中
$ src/redis-server
You can interact with Redis using the built-in client: 您可以使用带有Redis的交互的内置客户端:
$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
安装包可以在官网下载,然后编译安装,也可以在https://pkgs.org/查找rpm包安装
[root@BAIYU_179 ~]# yum install redis-3.2.1-2.el6.remi.x86_64.rpm Dependencies Resolved ======================================================================================= Package Arch Version Repository Size ======================================================================================= Installing: redis x86_64 3.2.1-2.el6.remi /redis-3.2.1-2.el6.remi.x86_64 2.1 M Installing for dependencies: jemalloc x86_64 3.6.0-1.el6 epel 100 k (内存分配工具) Transaction Summary ======================================================================================= Install 2 Package(s) [root@BAIYU_179 ~]# rpm -ql redis /etc/logrotate.d/redis /etc/rc.d/init.d/redis /etc/rc.d/init.d/redis-sentinel /etc/redis-sentinel.conf /etc/redis.conf /etc/security/limits.d/95-redis.conf /usr/bin/redis-benchmark /usr/bin/redis-check-aof /usr/bin/redis-check-rdb /usr/bin/redis-cli /usr/bin/redis-sentinel /usr/bin/redis-server /usr/bin/redis-shutdown /usr/share/doc/redis-3.2.1
redis的配置文件:
[root@BAIYU_179 ~]# grep -v ‘^#\|^$‘ /etc/redis.conf #修改后 bind 127.0.0.1 192.168.100.179 protected-mode yes port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /var/run/redis_6379.pid loglevel notice logfile /var/log/redis/redis.log databases 16 #可以使用多少个database库 save 900 1 #900秒内如果有1个键发生改变就做一次快照 save 300 10 save 60 10000 #禁用持久 save "" stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /var/lib/redis/ #slaveof <nasterip> <masterport> #表明自己是谁的从服务器 主服务器的Ip 端口 slave-serve-stale-data yes slave-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no slave-priority 100 appendonly no appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes
8、redis的使用
1)数据结构及其常用的命令
Strings
Caching, counters, realtime metrics…
Hashes
“Object” storage…
Lists
Logs, queues, message passing…
Sets
Membership, tracking…
Ordered sets
Leaderboards, activity feeds…
Strings
help @string
SET
GET
EXISTS
Integers
DECR
INCR
127.0.0.1:6379> help set SET key value [EX seconds] [PX milliseconds] [NX|XX] summary: Set the string value of a key since: 1.0.0 group: string 127.0.0.1:6379> 127.0.0.1:6379> set disto centos OK 127.0.0.1:6379> get disto "centos" 127.0.0.1:6379> set disto fedora OK 127.0.0.1:6379> get disto "fedora" 127.0.0.1:6379> help append APPEND key value summary: Append a value to a key since: 2.0.0 group: string 127.0.0.1:6379> append xj xiejun (integer) 6 127.0.0.1:6379> append disto xiejun (integer) 12 127.0.0.1:6379> get xj "xiejun" 127.0.0.1:6379> get disto "fedoraxiejun" 127.0.0.1:6379> help strlen STRLEN key summary: Get the length of the value stored in a key since: 2.2.0 group: string 127.0.0.1:6379> strlen xj (integer) 6 127.0.0.1:6379> strlen disto (integer) 12
标签:redis
原文地址:http://xiexiaojun.blog.51cto.com/2305291/1812409