`
langgufu
  • 浏览: 2285918 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

redis的简单使用和介绍(转载)

阅读更多

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP,Java客户端,使用很方便。
Redis使用单线程的IO复用模型,自己封装了一个简单的AeEvent事件处理框架,主要实现了epoll、kqueue和select,对于单纯只 有IO操作来说,单线程可以将速度优势发挥到最大,但是Redis也提供了一些简单的计算功能,比如排序、聚合等,对于这些操作,单线程模型实际会严重影 响整体吞吐量,CPU计算过程中,整个IO调度都是被阻塞住的。

Redis 除了作为存储之外还提供了一些其它方面的功能,比如聚合计算、pubsub、scripting等,对于此类功能需要了解其实现原理,清楚地了解到它的局 限性后,才能正确的使用,比如pubsub功能,这个实际是没有任何持久化支持的,消费方连接闪断或重连之间过来的消息是会全部丢失的,又比如聚合计算和 scripting等功能受Redis单线程模型所限,是不可能达到很高的吞吐量的,需要谨慎使用。

本例子Linux采用的centOs5.4

下面来介绍一下redis的安装

 

  1. wget http://redis.googlecode.com/files/redis-2.0.4.tar.gz
  2. tar zxvf redis-2.0.4.tar.gz
  3. cd redis-2.0.4
  4. make

make完后 redis-2.0.4目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli

安装成功


启动服务

 

./redis-server

也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动

./redis-server redis.conf

redis.conf是一个默认的配置文件。我们可以根据需要使用自己的配置文件。

启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了

注意启动的时候,会出现

WARNING overcommit_memory is set to 0!Background save may fail under

low memory condition. To fix this issue add'vm.overcommit_memory = 1' to /etc/sysctl.conf and

[6020] 10 Aug 20:58:21 * The server is nowready to accept connections on port 6379

[6020] 10 Aug 20:58:21 - 0 clientsconnected (0 slaves), 533432 bytes in use

[6020] 10 Aug 20:58:30 - 0 clientsconnected (0 slaves), 533432 bytes in use

由于默认配置是连接到本机的

这时候你要修改配置文件的ip地址连接你服务器啊

还有就是执行:sysctl vm.overcommit_memory=1

然后再启动服务就可以了

关于redis一些资料的学习可以到http://www.cnblogs.com/xhan/archive/2011/02/08/1949867.html去学习 ,很全面

下面介绍一个简单java客户端Jedis,大家可以到https://github.com/xetorthio/jedis这网址下载

这里给大家提供一个简单的对jedis的封装类以供参考

Redis.java

 

  1. package com.ajun.redis;
  2. import java.util.HashMap;
  3. import java.util.HashSet;
  4. import java.util.List;
  5. import java.util.Map;
  6. import java.util.Set;
  7. import redis.clients.jedis.Jedis;
  8. import redis.clients.jedis.JedisPool;
  9. import redis.clients.jedis.JedisPoolConfig;
  10. /**
  11. *
  12. * @author ajun
  13. *
  14. */
  15. public class Redis {
  16. private static JedisPool pool;
  17. private static int DBIndex;
  18. private static String host;
  19. private static int port=6379;
  20. private static int timeout=60*1000;
  21. static {
  22. DBIndex=Integer.parseInt(PubConstant.getConfigureValue("redis_dbindex"));
  23. host=PubConstant.getConfigureValue("redis_host");
  24. JedisPoolConfig config = new JedisPoolConfig();
  25. config.setMaxActive(100);
  26. config.setMaxIdle(20);
  27. config.setMaxWait((long)1000);
  28. config.setTestOnBorrow(false);
  29. pool = new JedisPool(config, host, port, timeout);//线程数量限制,IP地址,端口,超时时间
  30. }
  31. public static void addItemToList(String key,byte[] value)
  32. {
  33. Jedis jedis=null;
  34. try {
  35. jedis = pool.getResource();
  36. jedis.connect();
  37. jedis.select(DBIndex);
  38. jedis.lpush(key.getBytes(), value);
  39. } catch (Exception e) {
  40. e.printStackTrace();
  41. }
  42. finally{
  43. if(jedis!=null)
  44. pool.returnResource(jedis);
  45. }
  46. }
  47. @SuppressWarnings("finally")
  48. public static List<String> getItemFromList(String key)
  49. {
  50. Jedis jedis=null;
  51. //byte[] s=null;
  52. List<String> ss=null;
  53. try {
  54. jedis = pool.getResource();
  55. jedis.select(DBIndex);
  56. long len=jedis.llen(key);
  57. if(len==0) return null;
  58. ss = jedis.lrange(key, 0, (int)len);
  59. } catch (Exception e) {
  60. e.printStackTrace();
  61. }
  62. finally{
  63. if(jedis!=null)
  64. pool.returnResource(jedis);
  65. return ss;
  66. }
  67. }
  68. public static void addItem(String key,byte[] value)
  69. {
  70. Jedis jedis=null;
  71. try {
  72. jedis = pool.getResource();
  73. jedis.select(DBIndex);
  74. jedis.set(key.getBytes(), value);
  75. } catch (Exception e) {
  76. e.printStackTrace();
  77. }
  78. finally{
  79. if(jedis!=null)
  80. pool.returnResource(jedis);
  81. }
  82. }
  83. public static byte[] getItem(String key)
  84. {
  85. Jedis jedis=null;
  86. byte[] s=null;
  87. try {
  88. jedis = pool.getResource();
  89. jedis.select(DBIndex);
  90. s = jedis.get(key.getBytes());
  91. return s;
  92. } catch (Exception e) {
  93. e.printStackTrace();
  94. return s;
  95. }
  96. finally{
  97. if(jedis!=null)
  98. pool.returnResource(jedis);
  99. }
  100. }
  101. public static void delItem(String key)
  102. {
  103. Jedis jedis=null;
  104. try {
  105. jedis = pool.getResource();
  106. jedis.select(DBIndex);
  107. jedis.del(key.getBytes());
  108. } catch (Exception e) {
  109. e.printStackTrace();
  110. }
  111. finally{
  112. if(jedis!=null)
  113. pool.returnResource(jedis);
  114. }
  115. }
  116. public static long getIncrement(String key)
  117. {
  118. Jedis jedis=null;
  119. try {
  120. jedis = pool.getResource();
  121. jedis.select(DBIndex);
  122. return jedis.incr(key);
  123. } catch (Exception e) {
  124. e.printStackTrace();
  125. return 0L;
  126. }
  127. finally{
  128. if(jedis!=null)
  129. pool.returnResource(jedis);
  130. }
  131. }
  132. /**
  133. * 设置map 可以存储用户信息
  134. * @param key
  135. * @param map
  136. */
  137. public static void setHashMap(String key,HashMap<String,String> map){
  138. Jedis jedis=null;
  139. try {
  140. jedis = pool.getResource();
  141. jedis.select(DBIndex);
  142. if(map!=null && !map.isEmpty()){
  143. for(Map.Entry<String, String> entry : map.entrySet()){
  144. jedis.hset(key, entry.getKey(), entry.getValue());
  145. }
  146. }
  147. } catch (Exception e) {
  148. e.printStackTrace();
  149. }finally{
  150. if(jedis!=null)
  151. pool.returnResource(jedis);
  152. }
  153. }
  154. public static Map<String,String> getHashMap(String key){
  155. Map<String,String> map = new HashMap<String,String>();
  156. Jedis jedis=null;
  157. try {
  158. jedis = pool.getResource();
  159. jedis.select(DBIndex);
  160. map = jedis.hgetAll(key);
  161. } catch (Exception e) {
  162. e.printStackTrace();
  163. }finally{
  164. if(jedis!=null)
  165. pool.returnResource(jedis);
  166. }
  167. return map;
  168. }
  169. /**
  170. * 添加set
  171. * @param key
  172. * @param set
  173. */
  174. public static void addSet(String key,Set<String> set){
  175. Jedis jedis=null;
  176. try {
  177. jedis = pool.getResource();
  178. jedis.select(DBIndex);
  179. if(set!=null && !set.isEmpty()){
  180. for(String value : set){
  181. /*for ( Iterator<String> memberItr =
  182. jedis.smembers(str).iterator();//返回key对应set的所有元素,结果是无序的
  183. memberItr.hasNext();){
  184. final String member = memberItr.next();
  185. if (!jedis.sismember(str, member)){
  186. jedis.srem(str, member);
  187. }
  188. }*/
  189. jedis.sadd(key, value);
  190. }
  191. }
  192. } catch (Exception e) {
  193. e.printStackTrace();
  194. }finally{
  195. if(jedis!=null)
  196. pool.returnResource(jedis);
  197. }
  198. }
  199. public static Set<String> getSet(String key){
  200. Set<String> sets = new HashSet<String>();
  201. Jedis jedis=null;
  202. try {
  203. jedis = pool.getResource();
  204. jedis.select(DBIndex);
  205. sets = jedis.smembers(key);
  206. } catch (Exception e) {
  207. e.printStackTrace();
  208. }finally{
  209. if(jedis!=null)
  210. pool.returnResource(jedis);
  211. }
  212. return sets;
  213. }
  214. }
分享到:
评论

相关推荐

    Nginx安装包

    与一般数据库不同,redis是使用内存作为主存,而使用硬盘来实现数据持久化,而且redis是周期性的将数据写到硬盘上。这就意味着一旦我们服务器出现断电、重启之类的情况,我们很可能会出现数据丢失的情况,所以不建议...

    Symphony Java社区平台.rar

    数据库采用Mysql、TDengine和Redis;设备端支持ESP32、ESP8266、树莓派、合宙等;系统功能• 权限管理: 用户管理、部门管理、岗位管理、菜单管理、角色管理、字典和参数管理等• 系统监控: 操作日志、登录日志、...

    java异步编程框架

    Vert.x除了异步之外,还提供了非常多的吸引人的技术,比如EventBus,通过EventBus可以非常简单的实现分布式消息,进而为分布式系统调用,微服务奠定基础。除此之外,还提供了对多种客户端的支持,比如Redis,...

    seata1.3.0.zip

    Seata的高可用模式是通过TC使用db模式共享全局事务会话信息,使用非file的seata支持的第三方注册中心和配置中心来共享全局配置的方式来实现的。 Seata支持的第三方注册中心有nacos 、eureka、redis、zk、consul、...

    2018年最全Java面试通关秘籍第四套

    未经允许禁止一切形式的转载和复制,如有违反则追究其法律责任! 首先,我很懂你!当你看到这篇文章的时候可能是又喜又悲!喜的是,别人没看到这些悉心整理的面试题你看到了;悲的是,面试你的面试官可能也看到了!...

    大数据下的数据分析平台架构.pdf

    举个例⼦,Redis是⼀个性能⾮常⾼的 内存Key-Value NoSQL,它⽀持List和Set、SortedSet等简单集合,如果你的数据分析需求简单地通过排序,链表就可以解决,同时总的数 据量不⼤于内存(准确地说是内存加上虚拟内存再...

    SpringBootLearn:Spring Boot教程

    SpringBootLearn Spring Boot教程 转载请标明出处: 原文首发于: 本文出自李浩东...SpringBoot详细教程 | 第九篇:Spring Boot整合Redis简单实现消息队列 SpringBoot详细教程 | 第十篇:Spring Boot整合RabbitMQ 邮箱

    java8源码-JavaInterview:Java面试

    目的很简单,写这些文章,以及整个github的资料,都是为了面试而准备的,只希望能够给面试提供一些帮助,都能够进大厂最好了。 关于转载 如果你需要转载本仓库的一些文章到自己的博客的话,记得注明原文地址就可以了...

    java俄罗斯方块源码-GoodSourceCodes:好源代码

    商业转载请联系作者获得授权,非商业转载请注明出处。 碰巧读过之前大家提到的一些开源项目 网络编程: redis是单线程异步网络编程的范例: nginx是多进程网络编程的巅峰,模块化: memcached虽然是C++,但是C style的...

    JavaGuide:「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!

    转载须知 :以下所有文章如非文首说明皆为我(Guide哥)的原创,转载在文首注明出处,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!:fuel_pump: Sponsor Java 基础 ...

    JavaGuide:“ Java学习+面试指南”一部分覆盖了大部分Java程序员所需要的核心知识。准备Java面试,首选JavaGuide!

    :thumbs_up:推荐(Github访问速度比较慢可能会导致部分图片无法刷新出来) :thumbs_up:推荐一些闲话:简介:关于JavaGuide的相关介绍:。PDF版本: 。 PDF版本: 。面试专版:准备面试的小伙伴可以考虑面试专版: ,...

Global site tag (gtag.js) - Google Analytics