Redis简介
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。
它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。
内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
简言之,Redis是一种面向“键/值”对数据类型的内存数据库,可以满足我们对海量数据的快速读写需求。
Redis是一款NoSQL产品。
官网:http://www.redis.io
或者:http://redis.cn/
Redis的特点
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的k-v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave主从模式的数据备份。
Redis的优势
性能极高——Redis读的速度为11w/s,写的速度为8.1w/s。
丰富的数据类型——Redis支持二进制案例的Strings,Lists,Hashes,Sets即Ordered Sets数据类型操作。
原子性——Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。
丰富的特性——Redis还支持public/subscribe,通知,key过期等特性。
Redis应用
应用在高并发和实时请求的场景,eg新浪微博
hash:关注列表,粉丝列表
string:微博数,粉丝数
(避免使用select count(*) from...)
sorted set:
TopN,热门微博
还有github,
stackoverflow也
用到了redis
Redis安装配置
Redis安装
windows下直接解压即可使用,主要说明Linux下的安装方式 :
解压:
tar -zxvf soft/redis-3.2.0.tar.gz -C app/
重命名:
mv app/redis-3.2.0/ app/redis
编译:
make
安装:
make install PREFIX=/home/uplooking/app/redis
Redis配置
初始配置
修个redis.conf中的配置项
bind uplooking01
daemonize yes(后台运行)
logfile /opt/redis-3.2.0/logs/redis.log(日志文件,目录必须存在)
启动服务
make完成之后,在redis-3.2.0/src目录下会出现编译后的redis服务器程序redis-server,还有用于测试的客户端程序redis-cli。
redis-3.2.0]$ src/redis-server redis.conf
当然,如果再执行了make install则会在指定安装目录下生成一个bin目录,同时也会有相关的命令用于操作Redis.
启动客户端
redis-3.2.0]$ src/redis-cli -h localhost -p 6379
关闭服务
ps -ef | grep redis
找到进程id后直接kill -9就可以了。
Redis配置查看
Redis的配置文件位于Redis的安装目录之下,文件名为redis.conf。可以通过config命令来查看或设置配置项。
查看
语法,Redis config命令格式如下:
redis localost:6379> config get config_set_name
eg: redis localost:6379> config get loglevel
1) "loglevel"
2) "notice"
使用*号获取所有配置项:redis localost:6379> config get *
编辑
可以通过修改redis.conf文件或使用config set命令来修改配置
基本语法:
redis localost:6379> config set conf_setting_name new_value
eg: redis localost:6379> config set loglevel "warning"
redis localost:6379> config get loglevel
1) "loglevel"
2) "warning" -->对当前服务有效,之后当服务重启之后,才会失效
Redis操作
string(字符串)
string是redis最基本的类型,你可以理解成与memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
实例
redis 127.0.0.1:6379> SET name "redis.net.cn"
OK
redis 127.0.0.1:6379> GET name
"redis.net.cn"
在以上实例中我们使用了Redis的SET和GET命令。键为name,对应的值为redis.net.cn。
注意:一个键最大能存储512MB。
常见的string操作命令如下:
set key value 设置指定key的值(会覆盖无视数据类型) set name yaohuiying get key 获取指定key的值 get name getrange key start end 返回key中字符串值的子字符 getrange name 1 4 注意:字符串索引从0开始,获取索引片段[start, end],包头包尾 getset key value 将给定key的值设为value,并返回key的旧值(old value) getset name liuxiangqian 返回值为yaohuiying mget key1 [key2..] 获取所有(一个或多个)给定key的值 mget name name1 setex key seconds value 将值value关联到key,并将key的过期时间设为seconds(以秒为单位) setnx key value 只有在key不存在时设置key的值 作用同set,唯一和set的区别在于,只有当key不存在的时候,才进行设置, 而key存在,无法完成覆盖 setrange key offset value 用value参数覆写给定key所储存的字符串值,从偏移量offset开始 对key的原先的value进行局部覆盖,从offset偏移量开始, value有多长,就覆盖多长 strlen key 返回key所储存的字符串值的长度 mset key value [key value ...] 同时设置一个或多个key-value对 MSETNX key value [key value ...] 同时设置一个或多个key-value对,当且仅当所有给定key都不存在 psetex key milliseconds value 这个命令和SETEX命令相似,但它以毫秒为单位设置key的生存时间, 而不是像SETEX命令那样,以秒为单位 incr key 将key中对应储存的数字值增一 对key对应的value进行+1,但是value必须是数字类型的字符串 INCRBY key increment 将key所储存的值加上给定的增量值(increment) 之定义的步长 incrbyfloat key increment 将key所储存的值加上给定的浮点增量值(increment) decr key 将key中储存的数字值减一 decrby key decrement key 所储存的值减去给定的减量值(decrement) append key value 如果key已经存在并且是一个字符串, APPEND命令将value追加到key原来的值的末尾