设为首页 收藏本站
查看: 810|回复: 0

[经验分享] redis操作

[复制链接]

尚未签到

发表于 2016-12-17 08:38:14 | 显示全部楼层 |阅读模式
  Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持.
  它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets)和 有序集合(sorted sets)等类型。
  Redis支持诸如列表、集合或有序集合的交集、并集、差集等高级原子操作.

持久化

通常,Redis将数据存储于内存中,或被配置为使用虚拟内存。[3]通过两种方式可以实现数据持久化:使用快照的方式,将内存中的数据不断写入磁盘;或使用类似MySQL的日志方式,记录每次更新的日志。前者性能较高,但是可能会引起一定程度的数据丢失;后者相反。

[编辑]主从同步

Redis支持将数据同步到多台从库上,这种特性对提高读取性能非常有益。

[编辑]性能

相比需要依赖磁盘记录每个更新的数据库,基于内存的特性无疑给Redis带来了非常优秀的性能。读写操作之间没有显著的性能差异,如果Redis将数据只存储于内存中。

Redis的优点


  • 性能极高 – Redis能支持超过 100K+ 每秒的读写频率。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子(事务性) – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。(你可以将数据推到某个信息管道中,然后其它人可以通过订阅这些管道来获取推送过来的信息)
  • 持久化: 1. 数据快照的原理是将整个Redis中存的所有数据遍历一遍存到一个扩展名为rdb的数据文件中。通过SAVE(BGSAVE)命令可以调用这个过程。2.Redis还支持一种追加式的操作日志记录,叫append only file,其日志文件以aof结局,我们一般各为aof文件。
  redis命令在线练习
  http://try.redis.io/
  http://redis.cn/
  redis命令操作类可以参考:Redis系统性介绍
  http://blog.nosqlfan.com/html/3139.html?ref=rediszt
  MEMCACHE与REDIS的对比:
  1. 没有必要过多的关心性能,因为二者的性能都已经足够高了。由于Redis只使用单核,而Memcached可以使用多核,所以在比较上,平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。说了这么多,结论是,无论你使用哪一个,每秒处理请求的次数都不会成为瓶颈。(比如瓶颈可能会在网卡)
  2. 如果要说内存使用效率,使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。当然,这和你的应用场景和数据特性有关。
  3. 如果你对数据持久化和数据同步有所要求,那么推荐你选择Redis,因为这两个特性Memcached都不具备。即使你只是希望在升级或者重启系统后缓存数据不会丢失,选择Redis也是明智的
  4. 当然,最后还得说到你的具体应用需求。Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果你需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。
  1、查看keys

redis 127.0.0.1:6379> keys *
1) "serverMinutes.1.1336284900"
2) "serverMinutes.1.1340192100"
3) "serverDay.1.20120620"
4) "server.1.lastState"
5) "serverMinutes.1.1340192400"
  2、列表操作

Jedis jedis = getJedis();
jedis.rpush(cacheKey,"list_data1");
jedis.rpush(cacheKey,"list_data2");
jedis.rpush(cacheKey,"list_data3");
jedis.expire(cacheKey, expireSeconds);
//get data
List<String> list =jedis.lrange(cacheKey, 0, -1); //start, end
  命令模式查看:

redis 127.0.0.1:6379> lrange serverMinutes.1.1340192100 0 -1
1) "1.266667"
2) "0.9641184807561425"
3) "3.5300000000000002"
4) "0.33855871944968086"
5) "0.0"
  3. MAP操作

Jedis jedis = getJedis();
jedis.hset(cacheKey, "lastRecv", "1340192603");
jedis.hincrBy(cacheKey, "packetNum", 1);
Map<String, String>  map = jedis.hgetAll(key);
String fieldData = jedis.hget(cacheKey, field);
  命令模式查看:

redis 127.0.0.1:6379> hgetall server.1.lastState
1) "lastRecv"
2) "1340192603"
3) "lastSend"
4) "1340192500"
5) "lastRRD"
6) "1340192400"
7) "lastDiskReadIoNum"
8) "3000"

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-315335-1-1.html 上篇帖子: redis小结 下篇帖子: redis初识
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表