下载安装
wget http://download.redis.io/redis-stable.tar.gz
tar -zxvf reids-stable.tar.gz
cd redis-stable
make
make install
启动redis
redis-server
在redis源代码的utils的文件下面有一个名字redis-init-script的初始化脚本
我们需要配置redis的运行方式和持久化文件,日志的存储位置,
(1)配置初始化脚本,首先将初始化脚本复制到/etc/init.d目录中,名为redis_端口号,其中端口号是redis监听的端口号,客户端通过该端口连接redis,然后修改脚本中的port为同样的端口号
(2)建立需要的文件夹
/etc/redis 存放配置文件
/var/redis/端口号 存放redis的持久化文件
(3)修改配置文件。首先将配置文件模板复制到/etc/redis/,
以端口号命名 按照以下表的部分参数进行编辑
参数 值 说明
daemonize yes使redis以守护进程模式运行
pidfile /var/run/redis_端口号.pid 设置redis的pid文件位置
port 端口号 设置redis监听的端口号
dir /var/redis/端口号 设置持久化文件存储位置
停止redis
redis-cli SHUTDOWN
2.3.1命令返回值
命令返回值有5种类型
1状态回复 ping~pong
2错误回复ERR unknown command
3整数回复
4字符串回复
5多行字符串回复
2.4配置
启用配置文件的方法是在启动时将配置文件的路径作为启动参数传递给redisserver
redis-server /path/to/redis.conf
2.5 多数据库
每个数据库对外都是以0开始的递增数字命名,redis默认支持16个数据库,可以通过配置参数databases来修改这一参数,客户端与redis连接后会默认选择0号数据库,,不过可以随时使用select 更换数据库
3.1 入门实践
打开redis-cli
1获得符合规则的键名列表
KEYS pattern
2判断一个键是否存在
EXIST key
3删除键
DEL key
4获得键值得数据类型
TYPE key
3.2 字符串 String
字符串类是redis的的最基本的数据类型,他能存储任何形式的的字符串,
命令 赋值与取值
SET key value
GET key
递增数字
INCR key
3.3散列类型
散列类型适合存储对对象,使用对象类别和ID构成键名,使用字段表示对象属性,而字段值存储属性值,
1赋值与取值
HSET key field value
HGET key field
HMSET key field value[field value]
2判断字段是否存在
HEXIST key field
4增加数字
HINCREBY persor score 60
5删除字段
HDEL car price
返回值是被删除字段的个数
3.3.3实践
3.3.4
只获取字段名或字段值
HKEYS key
HVALS key
获得字段的数量
HLEN car
3.4列表
列表类型可以存储一个有效的字符串列表,列表类型内部使用的是双向链表实现的,获取两端的元素是很快的,这种特性使得列表类型能够非常快速的完成关系数据库难以应付
的场景,如社交网站的新鲜事,我们关心的只是最新内容,
3.4.2
向列表两端增加元素
LPUSH key value
RPUSH key value
LPUSH 表示向列表左边增加元素,返回值为增加元素后的列表个数
同时支持加添多个数据
LPUSH number 2,3
2从列表两端弹出数据
LPOP RPOP
3获取列表元素个数
LLEN numbers
4获取列表片段
LRANGE start stop它能够获取列表中的某一个片段
5删除列表中指定的值
LREM key count value
删除列表中钱count个值为value的元素
3.4.5
LINDEX key index
返回指定索引元素,索引从0开始
LSET index value 他会将索引为index的元素赋值为value
3.5 集合类型
集合类型和列表类型的对比
集合 列表
存储内容 至多2^32-1个字符串 至多2^32-1个字符串
有序性 否 是
唯一性 是 否
集合常用的操作是向集合中加入或删除元素,判断某个元素是否存在,由于集合类型redis内部使用的是散列表实现的,所以这些操作的是时间复杂度都是1
最方便的是多个集合类型键之间还能进行并集交集
3.5.2
SADD key member
SREM key member
SADD 命令向集合中添加元素,如果键不存在 则会创建,因为集合中不能有相同的元素,所以如果加入的元素已经存在则会忽略这个元素
返回值为成功加入元素的个数
2获取集合中的所有元素
SMEMBERS key
3判断元素是否在集合中
SISMEMBER key menber
4集合之间运算
SDIFF key1 key2
SINTER key1 key2
SUNION key 1 key2
SDIFF 表示集合之间的差集运算
SINTER 表示集合之间的交集运算
SUNION 表示集合之间的并集运算
3.6 有序集合类型
有序集合sorted set,在集合类型的基础上有序集合为集合中的每一个元素都关联了一个分数,这使得我们不仅可以插入 删除 判断是否存在这个元素还能够获得分数最高的钱n个元素,指定分数范围的元素等与分数相关的操作,虽然集合中的每个元素是不同的,他是他们的分数却可以相同
有序集合在一些方面与列表类似
(1)二者都是有序的
(2)二者都可以获得一定范围的元素
但是二者有很大区别,这使得他们的应用场景是不同的
(1)列表是通过链表实现的,获取靠近两端的数据很快,而当元素增多之后,访问中间的元素速度很慢,所以更加适合新鲜事这样的应用
(2)有序集合是使用散列表和跳跃表实现的,所以即使读取中间的元素速度也很快
(3)列表不能简单的调整元素的位置,但是有序集合可以,(通过更改这个元素的分数)
(4)有序集合比列表更消耗内存
3.6.2 命令
ZADD key score member
ZADD命令,用来向有序集合中就一个元素和该元素的分数,如果该元素存在就好会用新的分数替代旧的分数
返回值是新加入到有序集合中的个数
2获得元素的分数
ZSCORE key member
3获得排名在某个范围的元素列表
ZRANGE key start stop
ZRANGE 会按照元素分数从小到大返回从start 到stop范围之间的所有元素,包括两端元素
4增加某个元素的分数
ZINCREBY key increment member
4.1 事务
MULTI
ok
SADD "user :i:followings " 2
QUEUE
SADD "user:2:followers":1
QUEUE
EXEC
解释一下上面的程序,首先使用multi命令告诉redis,下面我发给你的命令属于同一事务,你先不要执行,而是把他们暂存起来,redis回答ok
而后我发了两个SADD命令来实现关注和被关注,redis返回queue表示两条命令已经存储到事务队列,
当我们把所有要执行的命令都发送给redis后,我们用exec告诉redis 执行所有的已发送命令
不过redis 的不支持回滚,
4.1.3watch命令
watch命令的作用只是当被监控的键值被修改后阻止一个事务的执行,而不能保证其他客户端不修改这一值
执行完exec后会取消对所有键的监控
如果不想执行事务中的命令也可以使用unwatch命令取消监控,
4.2 生存时间
Redis中可以使用EXPIRES命令设置一个键的生存时间,到时间后redis会自动删除他
使用方法为 EXPIRES key seconds
返回1表示成功
如果想知道一个键还有多久时间被删除,可以使用TILL命令,返回值是键的剩余时间,
SET fool bar
EXPIRES foo 20
TTL foo
当键不存在时,TTL命令会返回-1但是没有设置生存时间的话也会返回-1
SORT 命令可以对列表类型,集合类型,有序集合类型,键进行排序