一、简介
redis是一个key-value存储系统。
和Memcached类似,它支持存储的value类型相对更多,
包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。
区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个高性能的key-value数据库。
redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。
它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。
- Memcache
内存缓存服务,缓存数据保存在内存中,一旦断电重启,数据将丢失- mongoDB
开源免费的NOSQL 数据库,提供数据持久化服务,以文档的形式提供数据组织方式,而不是表- Redis
开源免费的 NOSQL数据库,提供数据持久化服务,即能实现内存缓存服务,也能提供数据结构服务
取代MySQL 自建索引
用来弥补关系型数据的不足
二、安装
1、默认安装位置
|
|
2、指定安装位置
|
|
3、安装的可执行文件的作用
|
|
三、启动与关闭
1、 启动
路径/redis-server 配置文件
注意:需要修改配置文件
daemonizeno 改为
daemonize yes #后台启动
端口 6379
2、 关闭redis
|
|
或
四、配置文件
|
|
五、Redis的数据类型
1. 共计5种类型
string(字符串)、hash(哈希表) list(双向队列)、set(集合)和zset(有序集合)
2. String(子串类型)
String是最简单的类型,一个Key对应一个Value,string类型是二进制安全的。Redis的string可以包含任何数据,比如jpg图片或者序列化的对象。
1)set 键 “值”
设置一个键和值,键存在则覆盖,返回ok
2)get 键
获取一个键的值,返回值
3) setnx 键 值
只有当该键不存在时设置一个键的值,若键已存在则返回0表示失败(防止覆盖),
4) setex 键 [有效时间] 值
设置一个指定有效期的键和值(单位秒)。不写有效时间则表示永久有效,等价于set
5)ttl 键
以秒为单位,返回给定 key 的剩余生存时间
>当 key 不存在时,返回 -2 。
当 key 存在但没有设置剩余生存时间时,返回 -1 。
否则,以秒为单位,返回 key 的剩余生存时间。
|
|
6) setrange 键 位置 子字串
替换子字符串 (替换长度由子子串长度决定)
7) mset 键1 值1 键2 值2 键3 值3 ….
批量设置键和值,成功则返回ok
8) mget 键1 键2 键3….
批量获取值
9) msetnx 键1 值1 键2 值2 键3 值3 ….
批量设置不存在的键和值,成功则返回ok
10) getset 键 新值
获取原值,并设置新值
11) getrange 键 0 4
获取指定范围的值(获取指定0到4位置上的值,字符串位置从0开始计算)。参考setrange。
12) incr键
指定键的值做加1操作,返回加后的结果(只能加数字)。
13) incrby 键 m
//其中m可以是正整数或负整数
加指定值,键不存在时候会设置键
14)decr 键
指定键的值做减1操作,返回减后的结果。
15) decrby 键 n
//其中n可以是正整数或负整数
设置某个键减上指定值
16)append 键 追加字串
给指定key的字符串追加value,返回新字符串值的长度
17) strlen 键名
strlen求一个键长度
18)del命令:删除一个键
3. hashs类型
注意:redis中没有表概念,所有的数据都存入键中。
string键类型:所有的值(可以是任何数据类型)都保存在一个键当中,放在一个内存块中
hashs键类型:所有的值也都保存在一个键当中,只是放在不同的内存块中,每个块称作字段
1)hset key field value
设置一个键,在键中保存字段和值
hset 哈希集(键) 字段 值
|
|
2)hsetnx 键 字段 值
设置一个键中,不存在的字段和值。如果字段存在则报错(成功返回1,失败返回0)
3)hmset 键 字段1 值1 字段2 值2 …
在一个键中,批量设置字段
4)hget 键 字段
获取键中的一个指定字段的值
5)hmget 键 字段1 [字段2…]
获取键中一个或多个字段的值
6) hexists :判断指定的字段是否存在于键中
hexists 键 字段
例如:
7) hlen :获取键中的字段数量
hlen 键
|
|
8)hkeys :获取键中的所有字段名
9)hvals:获取键中所有字段的值
10)hgetall :获取键中的所有字段和值
11)hincrby:将键中指定字段的值,增加指定的数字
12)hdel 键 字段1 字段2
删除键中的一个或多个字段
4. list类型(双向链表结构)
List是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等,操作中key理解为链表的名字。Redis的list类型其实就是一个每个子元素都是string类型的双向链表。
1)lpush 键 值1 [值2…]
从队列左边向队列写入一个或多个值(认为队列的左面为队列头,右边为队列尾)
2)lrange 键 起始下标 终止下标
从队列中获取指定的返回值(从队列左边向右获取)
下标:0代表队列中第一个元素,1代表第二个元素,依次类推
-1代表队列中最后一个元素,-2代表倒数第二个元素
|
|
3)rpush键 值1 [值2…]
从队列右边向队列写入一个或多个值
4)linsert 键 before|after 原值 新值
在队列中指定元素之前或之后插入新值
5)lset 键 下标 新值
给队列中指定元素设定新值
6)lrem 键 n 指定值
从队列中删除n个值为“指定值”的元素
n > 0 从队列头向尾删除n个元素
n < 0 从队列尾向头删除n个元素
n = 0 删除所有值为“指定值”的元素
|
|
7)ltrim 键 起始下标 结束下标
修剪队列,让队列只保留指定指定范围内的元素
8)lpop 键
从指定的队列左面移除一个值
9)rpop 键
从指定队列的右边移除一个值
10)rpoplpush 源队列 目标队列
移除源队列的最后一个元素,并把该元素写入目标队列
11)lindex 键 下标
获取队列中指定下标元素的值
12)llen 键
获得队列的长度
5. sets类型和操作
Set是集合,它是string类型的无序集合。对集合我们可以取并集、交集、差集。通过这些操作我们可以实现社交网站中的好友推荐和blog的tag功能。
1) sadd 键 值1[值2…]
添加一个或多个元素到集合中
2) smembers 键
获取集合里面所有的元素
3) srem 键 值1[值2…]
从集合中删除指定的一个或多个元素
4) spop 键
随机从集合中删除一个元素,并返回
5) srandmember 键 值
随机返回集合中一个元素,但不删除
6) scard 键
获取集合里面元素个数
7) sismember 键 值
确定一个指定的值是否是集合中的元素
8) sdiff 集合1 集合2
返回集合1与集合2的差集。以集合1为主
9) sdiffstore 新集合 集合1 集合2
返回集合1和集合2的差集,并把结果存入新集合
10) sinter 集合1 集合2
获得两个集合的交集
11) sinterstore 新集合 集合1 集合2
获得集合1和集合2的交集,并把结果存入新集合
12) sunion 集合1 集合2
获得指定集合的并集
13) sunionstore 新集合 集合1 集合2
获得指定集合的并集,并把结果保存如新集合
14) smove 源集合 目标集合 值
将指定的值从源集合移动到目标集合
参考资料:
1.Redis http://redis.io
2.Redis中文官方网站 http://www.redis.cn
3.Redis 教程 | 菜鸟教程 http://www.runoob.com/redis/redis-tutorial.html