Redis简介
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API, 包括Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等
Redis 是一个高性能的key-value数据库,它支持存储的value类型包括string (字符串)、list(链表)、set(集合)、zset(sorted set–有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。
为了保证效率,数据都是缓存在内存中,并且周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。Redis在一些应用场合可以对关系数据库起到很好的补充作用。在某些场合,可以认为Redis是一个内存数据库,通过内存缓存功能来达到性能的极大提升。
1. 环境搭建
Redis可以通过两种方式安装
通过源代码安装
从redis.io下载最新版redis-X.Y.Z.tar.gz后解压,然后进入redis-X.Y.Z文件夹后直接make即可
通过安装包管理工具安装
以ubuntu为例 :#sudo apt-get install redis-server
这种方式安装的redis server不是最新版本,但是满足基本使用是没有问题的
2. 常用配置
Redis提供了丰富的配置,缺省配置文件是安装根目录下的redis.conf。通常情况下大部分配置项只需要保持缺省值就能满足大多数应用场景,下面是一些常用的配置项。
是否以daemon形式来运行
daemonize no
缺省为no
响应请求的IP
bind 192.168.1.100 10.0.0.1
缺省会响应本机所有可用网卡的连接请求,如果要响应所有机器的连接,需要修改为bind 0.0.0.0
端口号
port 6379
日志等级
共分四级,即debug、verbose、notice、warning, 其中warning的级别最高
loglevel notice
logfile设置日志文件的生成位置
logfile
如果为空,则日志会输出到标准输出
数据库的总数量
databases 16
这16个数据库的编号将是0到15。默认的数据库是编号为0的数据库。用户可以使用select
数据保存到磁盘上,即控制RDB快照功能
save 900 1 //表示每15分钟且至少有1个key改变,就触发一次持久化
save 300 10 //表示每5分钟且至少有10个key改变,就触发一次持久化
save 60 10000 //表示每60秒至少有10000个key改变,就触发一次持久化
禁用RDB持久化的策略,只要不设置任何save指令就可以,或者给save传入一个空字符串参数也可以达到相同效果
设置Redis主从同步
slaveof
AOF持久化
appendonly no
redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了
3. 常用命令
客户端连接
#src/redis-cli
停止redis服务:
src/redis-cli> shutdown
取出当前匹配的所有key
> keys *
设置key的值
> set keyname keyvalue
获取key的值
> get keyname
当前的key是否存在, 0表示不存在
> exists larry
(integer) 0
删除指定的key
> del lv
设置过期时间
> expire larry 10
(integer) 1
移动larry键值对到ad4数据库
> move larry ad4
(integer) 1
移除当前key的过期时间
> persist lv
(integer) 1
随机返回一个key
> randomkey
重命名key
> rename
测试连接是否还在
> ping
PONG
打印
> echo name
“larry”
数据库切换
> select ad4databank
OK
退出连接
> quit
当前数据库中key的数量
> dbsize
(integer) 12
服务器基本信息
> info
获取服务器的参数配置
> config get
清空当前数据库
> flushdb
清除所有数据库
> flushall
4. 应用程序接口
因为Redis的数据操作非常简单,应用程序API接口用法也非常直观明了,有了相应的第三方库支持,连接上Redis Server之后,剩下的就是很简单的一些操作,上面第四节中命令支持的,应用程序API接口也基本上都支持。
Java
引入Jedis这个第三方库之后,就可以用例子代码进行简单的数据插入和查询动作了
public static void main(String[] args) {
Jedis jedis = new Jedis("147.151.240.234",6379);
jedis.set("foo", "bar");
String value = jedis.get("foo");
System.out.println(value);
}
当然也有好事者对Jedis进行了进一步封装,使得该API更方便灵活,很有名的例子就是Jfinal中的RedisPlugin
Python
首先需要安装python的支持库,通过执行命令sudo apt-get install python-redis或者在Windows环境下执行pip install redis即可,接下来就是对数据的增删查操作了,非常直观
import redis
r = redis.Redis(host='10.0.1.7', port=6379, db=1)
# 查数据库大小
print 'ndbsize: %s' % r.dbsize()
# 塞数据
r['c1'] = 'bar'
#或者
r.set('c2','bar')
# 取数据
print 'r['']:',r['c1']
#或者
print 'get:',r.get('a')
#或者 同时取一批
print 'mget:',r.mget('c1','c2')
#或者 同时取一批 它们的名字(key)很像 而恰好你又不想输全部
print 'keys:',r.keys('c*')
#又或者 你只想随机取一个:
print 'randomkey:',r.randomkey()
# 查看一个数据有没有 有 1 无0
print 'existes:',r.exists('a')
# 删数据 1是删除成功 0和None是没这个东西
print 'delete:',r.delete('cc')
# 哦对了 它是支持批量操作的
print 'delete:',r.delete('c1','c2')
5. 案例分析
在我们的项目中,Redis作为关系型数据库的一个内存缓存,当有用户查询时,先查看Redis中是否有用户需要的信息,有的话直接返回;没有需要的信息,再到关系型数据库中进行查询,同时查询的结果缓存到Redis中,加快后续查询的性能。总体而言,使用Redis之后,整个应用程序的性能提升了上百倍。
我的博物馆故事 官方安卓版v1.61.2
我的博物馆故事是一款以消除为主题的经营养成类手游,在这里玩家
专业模拟飞行10 手机版v12.2.4
专业模拟飞行10安卓版是一款飞行休闲手游,顶尖的物理飞行引擎
动物起义战斗模拟器二琳同款 最新版v4.1.1
动物起义战斗模拟器是一个非常有趣的模拟类游戏,玩家可以召唤各
迷你世界七周年 安卓手机版v1.43.0
迷你世界7周年是一款由《迷你世界》官方推出的庆祝特别版本,在
劫后公司无限资源版 v1.0.5.1
劫后公司内置菜单版是游戏的破解版本,在该版本中为玩家提供了内