redis的簡單使用和介紹(轉載)

langgufu314發表於2012-03-02

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. }

相關文章