定义
从属于NOSQL中键值(Key-Value)存储类,这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。其具有水平扩展性,水平扩展性(horizontal scalability)指能够连接多个软硬件的特性,这样可以将多个服务器从逻辑上看成一个实体。
典型应用场景:
- 数据模型简单。
- 灵活性更强的IT系统。
- 对数据库性能要求高。
- 不需要数据高度一致性
- 对于给定Key容易映射复杂值的环境
- 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。
数据模型:
Key 指向 Value 的键值对,通常用hash table来实现。
优点:
查找速度快。
缺点:
数据无结构化,通常只被当作字符串或者二进制数据。
源码安装Redis
进入redis官网(redis.io)下载源码包本例 下载的是3.2.0版本redis-3.2.0.tar.gz 安装目录暂定/usr/local/redis-3.2.0 进入/usr/local解压redis-3.2.0.tar.gz
tar zxvf redis-3.2.0.tar.gz
cd redis-3.2.0/
mkdir etc
mkdir bin
mkdir logs
makecd src && make test ##make test 需要tcl-8.5支持。
make install
mv redis-server ../bin
mv redis-cli ../bin
mv redis-sentinel ../bin
mv redis-check-aof ../bin
mv redis-benchmark ../bin
cd ..
mv redis.conf etc/
修改配置文件
vim etc/redis.conf
启动Redis
[root@10-186-24-106 redis-3.2.0]# bin/redis-server etc/redis.conf
进入Redis
[root@10-186-24-106 redis-3.2.0]# bin/redis-cli127.0.0.1:6379>
进行简单操作:
输入密码
127.0.0.1:6379> auth ianhol
OK
字符串:set指定key、value
127.0.0.1:6379> set t1 'ianhol'
OK
获取值
127.0.0.1:6379> get t1
"ianhol"
列表:lpush(左侧插入)、rpush(右侧插入)、指定list、value
127.0.0.1:6379> lpush tlist '1'
(integer) 1
(1.00s)
127.0.0.1:6379> rpush tlist '2'
(integer) 2127.0.0.1:6379> lpush tlist '0'
(integer) 3
列出指定编号元素:lrange key start stop
127.0.0.1:6379> lrange tlist 021) "0"2) "1"3) "2"
- 我们可以利用lists来实现一个消息队列,而且可以确保先后顺序,不必像MySQL那样还需要通过ORDER BY来进行排序。
- 利用LRANGE还可以很方便的实现分页的功能。
- 在博客系统中,每片博文的评论也可以存入一个单独的list中。
集合: sadd key member [member ...]
向集合myset插入新元素
127.0.0.1:6379> sadd myset 'one''two'
(integer) 2127.0.0.1:6379> sadd myset 'three'
(integer) 1
列出myset中所有元素
127.0.0.1:6379> smembers myset
1) "one"2) "three"3) "two"
判断元素是否存在于集合中,返回1为存在,0为不存在
127.0.0.1:6379> sismember myset 'two'
(integer) 1127.0.0.1:6379> sismember myset 'four'
(integer) 0
对两个集合求并集
127.0.0.1:6379> sunion myset myset2
1) "three"2) "two"3) "one"4) "four"
有序集合:zadd key [NX|XX] [CH] [INCR] score member [score member ...]
127.0.0.1:6379> zadd myzet 1'ianhol'2'chenl'0'norcy'
(integer) 3
列出所有元素及其序号
127.0.0.1:6379> zrange myzet 021) "norcy"2) "ianhol"3) "chenl"127.0.0.1:6379> zrange myzet 02 withscores
1) "norcy"2) "0"3) "ianhol"4) "1"5) "chenl"6) "2"
哈希:hmset key field value [field value ...]
127.0.0.1:6379> hmset user1 username redis password-auth ianhol NOSQL redis
OK
列出hash内容
127.0.0.1:6379> hgetall user1
1) "username"2) "redis"3) "password-auth"4) "ianhol"5) "NOSQL"6) "redis"
修改hash内容
127.0.0.1:6379> hset user1 password ianho
(integer) 1127.0.0.1:6379> hgetall user1
1) "username"2) "redis"3) "password-auth"4) "ianhol"5) "NOSQL"6) "redis"7) "password"8) "ianho"127.0.0.1:6379> hset user1 password-auth ianho
(integer) 0127.0.0.1:6379> hgetall user1
1) "username"2) "redis"3) "password-auth"4) "ianho"5) "NOSQL"6) "redis"7) "password"8) "ianho"
关闭服务器
127.0.0.1:6379> shutdown
not connected>
^C
关于key:
- 1.key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率;
- 2.key也不要太短,太短的话,key的可读性会降低;
- 3.在一个项目中,key最好使用统一的命名模式,例如user:10000:passwd。