redis的用法,Redis 簡介、Linux 安裝 Redis、Redis 使用

 2023-10-15 阅读 38 评论 0

摘要:Redis 簡介 Redis 是一種內存型數據存儲,也可以將它寫入磁盤中來實現耐久性。Redis 可通過兩種方式來持久存儲數據:RDB 和 AOF。RDB 持久性按照指定的間隔對您的數據集執行時間點快照。它不是非常耐久,而且您可能會丟失一些數據,但它非常快。AOF

Redis 簡介


Redis 是一種內存型數據存儲,也可以將它寫入磁盤中來實現耐久性。Redis 可通過兩種方式來持久存儲數據:RDB 和 AOF。RDB 持久性按照指定的間隔對您的數據集執行時間點快照。它不是非常耐久,而且您可能會丟失一些數據,但它非常快。AOF 的持久性要長得多,而且記錄了服務器收到的每個寫入操作。在查詢 Redis 時,將從內存中獲取數據,絕不會從磁盤獲取數據,Redis 對內存中存儲的鍵和值執行所有操作。redis的用法,

Redis 采用了一種客戶端/服務器模型,借用該模型來監聽 TCP 端口并接受命令。Redis 中的所有命令都是原子性的,所以您可以從不同的客戶端處理同一個鍵,沒有任何爭用條件。如果您使用的是 memcached(一個內存型對象緩存系統),您會發現自己對它很熟悉,但 Redis(可以說)是 memcached++。Redis 也支持數據復制。

數據模型


Redis 數據模型不僅與關系數據庫管理系統 (RDBMS) 不同,也不同于任何簡單的 NoSQL 鍵-值數據存儲。Redis 數據類型類似于編程語言的基礎數據類型,所以開發人員感覺很自然。什么是Linux?每個數據類型都支持適用于其類型的操作。受支持的數據類型包括:?
- 字符串
- 列表
- 集合
- 有序集
- 哈希值

關鍵優勢


Redis 的優勢包括它的速度、它對富數據類型的支持、它的操作的原子性,以及它的通用性:
- Redis 非常快。它每秒可執行約 100,000 個 SET 以及約 100,000 個 GET 操作。您可以使用 redis-benchmark 程序在自己的機器上對它的性能進行基準測試。(redis-benchmark 模擬在它發送總共 M 個查詢的同時,N 個客戶端完成的 SET/GET 操作。)
- Redis 對大多數開發人員已知道的大多數數據類型提供了原生支持,這使得各種問題得以輕松解決。安裝打印機的方法和步驟?經驗會告訴您哪個問題最好由何種數據類型來處理。
- 因為所有 Redis 操作都是原子性的,所以多個客戶端會并發地訪問一個 Redis 服務器,獲取相同的更新值。
- Redis 是一個多效用工具,對許多用例很有用,這些用例包括緩存、消息隊列(Redis 原生支持發布/訂閱)、短期應用程序數據(比如 Web 會話、Web 頁面命中計數)等。

Redis 安裝


linux centos6.5安裝

1. 使用離線包tar安裝
(tar鏈接:http://pan.baidu.com/s/1qWvFXQO 密碼:k5r6 )
wget http://download.redis.io/releases/redis-3.0.3.tar.gz
tar xzf redis-3.0.3.tar.gz
cd redis-3.0.3
make
#啟動服務的
cd /src
./redis-server
#使用客戶端 可以輸入pinginfo查看信息
./redis-cli
2.?yum在線安裝
yum install epel-release
yum install redis
#啟動停止
service redis start/stop
#客戶端
redis-cli

Redis 數據類型操作示例


下面分別介紹Redis 支持的數據類型的簡單示例。

字符串(string)

redis> SET firstname shekhar
OK
redis> GET firstname
"shekhar"
如果您的鍵的值是整數,那么可使用 DECR 或 DECRBY 遞減這些值,使用 INCR 或 INCRBY 遞增它們。這些操作在您希望維護一些對象的數量(比如網頁的命中次數)的情形中很有用
redis> INCR votes
(integer) 1
redis> INCR votes
(integer) 2
redis> INCR votes
(integer) 3
redis> DECR votes
(integer) 2

其他一些操作(包括?APPENDGETRANGEMSET?和?STRLENGTH?也可用于字符串。etc設備安裝位置?請參見http://doc.redisfans.com/string/index.html?)


列表(list)


? ? ? ? 有序的字符串列表,按照插入順序排序。Redis 中的列表是一個有序的字符串集合,您可以向其中添加任意數量的(惟一或非惟一)元素。除了向列表添加元素和從中獲取元素的操作之外,Redis 還支持對列表使用取出、推送、范圍和其他一些操作。


使用 LPUSH 命令,最近添加的單詞位于列表頂部,以前添加的單詞會在后面:

redis> LPUSH words austerity
(integer) 1
redis> LPUSH words socialism moratorium socialism socialism
(integer) 5
使用 LRANGE 命令查看列表中頂部的三個單詞:

redis> LRANGE words 0 2
1) "socialism"
2) "socialism"
3) "moratorium"
獲得列表的長度,可使用 LLEN 命令:
redis > LLEN words
(integer) 5
刪除:
#刪除所有 socialism
redis> LREM words 0 socialism
(integer) 2
刪除列表:
redis 127.0.0.1:6379> DEL words
(integer) 1

集合(set)


集合(set)是惟一元素的無序集合。不可重復。

將一個元素添加到一個集合中,可使用 SADD 命令;要獲取一個集合的所有成員,可使用 SMEMBERS 命令。谷歌安裝器?
redis> SADD uniquewords austerity
(integer) 1
redis> SADD uniquewords socialism
(integer) 1
redis> SADD uniquewords socialism
(integer) 0
redis> SMEMBERS uniquewords
1) "austerity"
2) "socialism"

找出兩個集合中的所有共同元素,SINTER 命令。合并多個集合,我使用SUNION 命令。

有序集(zset)


有序集合字符串列表,不可重復。不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。有序集合的成員是唯一的,但分數(score)卻可以重復。mysql安裝教程。
假設您希望基于單詞的長度對一組單詞進行排序。使用 ZADD 命令將一個元素添加到一個有序集中,使用語法 ZADD 鍵分數 值。使用ZRANGE 命令按分數查看一個有序集的元素。
redis> ZADD wordswithlength 9 austerity
(integer) 1
redis> ZADD wordswithlength 7 furtive
(integer) 1
redis> ZADD wordswithlength 5 bigot
(integer) 1
redis> ZRANGE wordswithlength 0 -1
1) "bigot"
2) "furtive"
3) "austerity"
要獲得有序集的大小,可使用 ZCARD 命令:
redis 127.0.0.1:6379> ZCARD wordswithlength
(integer) 3

哈希值(hash)

hash 是一個string類型的field和value的映射表,hash特別適合用于存儲對象。

哈希值允許您針對一個哈希值存儲一個鍵-值對。此選項可能對您希望保存具有多個屬性的對象的情形很有用,就像以下示例一樣:
redis> HSET user:1 name shekhar
(integer) 1
redis> HSET user:1 lastname gulati
(integer) 1
redis> HGET user:1
redis> HGET user:1 name
"shekhar"
redis> HGETALL user:1
1) "name"
2) "shekhar"
3) "lastname"
4) "gulati"


Redis IDE 工具使用(RedisDesktopManager)


? ? ? ? 1. 下載  

? ? ? ? ? ??鏈接:http://pan.baidu.com/s/1bnwg0OZ?密碼:ekwu


使用java客戶端?jedis操作redis


pom

? <dependency>

? ?<groupId>redis.clients</groupId>

? ?<artifactId>jedis</artifactId>

? ?<version>2.1.0</version>

? </dependency>

?

測試代碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import?java.util.HashMap;
import?java.util.List;
import?java.util.Map;
import?redis.clients.jedis.Jedis;
public?class?TestRedis?{
????private?Jedis?jedis;
????public?TestRedis()?{
????????jedis?=?new?Jedis("123.59.42.xx",?6379);
????????//?權限認證
????????//?jedis.auth("admin");
????}
????/**
?????*?redis存儲字符串
?????*/
????public?void?testString()?{
????????jedis.set("name",?"Jerome蘇");
????????jedis.expire("name",?60);?//?設置存活時間
????????//?jedis.del("name");?//刪除某個鍵
????????System.out.println("name----->>>"?+?jedis.get("name"));
????}
????/**
?????*?redis操作Map
?????*/
????public?void?testMap()?{
????????Map<String,?String>?map?=?new?HashMap<String,?String>();
????????map.put("name",?"jerome");
????????map.put("age",?"24");
????????map.put("email",?"jerome_s@qq.com");
????????jedis.hmset("user",?map);?//?存入redis
????????//?取出
????????List<String>?rsmap?=?jedis.hmget("user",?"name",?"age");
????????System.out.println(rsmap);
????????//?刪除map中的某個鍵值
????????//?jedis.hdel("user",?"age");
????????//?System.out.println(jedis.hlen("user"));?//?返回key為user的鍵中存放的值的個數2
????????//?System.out.println(jedis.exists("user"));//?是否存在key為user的記錄?返回true
????????//?System.out.println(jedis.hkeys("user"));//?返回map對象中的所有key
????????//?System.out.println(jedis.hvals("user"));//?返回map對象中的所有value
????}
????/**
?????*?jedis操作List
?????*/
????public?void?testList()?{
????????//?開始前,先移除所有的內容
????????jedis.del("animals");
????????//?-1表示取得所有
????????System.out.println(jedis.lrange("animals",?0,?-1));
????????//?存入List
????????jedis.lpush("animals",?"cat");
????????jedis.lpush("animals",?"dog");
????????jedis.lpush("animals",?"tiger");
????????System.out.println(jedis.lrange("animals",?0,?-1));
????????//?刪除單個
????????jedis.rpush("animals",?"cat");
????????System.out.println(jedis.lrange("animals",?0,?-1));
????}
????/**
?????*?jedis操作Set
?????*/
????public?void?testSet()?{
????????//?添加
????????jedis.sadd("user",?"jerome");
????????jedis.sadd("user",?"jelly");
????????jedis.sadd("user",?"jack");
????????jedis.sadd("user",?"nemo");
????????jedis.sadd("user",?"who");
????????//?移除noname
????????jedis.srem("user",?"who");
????????System.out.println(jedis.smembers("user"));//?獲取所有加入的value
????????System.out.println(jedis.sismember("user",?"who"));//?判斷?who是否是user集合的元素
????????System.out.println(jedis.srandmember("user"));
????????System.out.println(jedis.scard("user"));//?返回集合的元素個數
????}
????/**
?????*?redis排序
?????*?
?????*?@throws?InterruptedException
?????*/
????public?void?testSort()?throws?InterruptedException?{
????????//?注意,此處的rpush和lpush是List的操作。路由器安裝教程、是一個雙向鏈表(但從表現來看的)
????????jedis.del("a");//?先清除數據,再加入數據進行測試
????????jedis.rpush("a",?"1");
????????jedis.lpush("a",?"6");
????????jedis.lpush("a",?"3");
????????jedis.lpush("a",?"9");
????????System.out.println(jedis.lrange("a",?0,?-1));//?[9,?3,?6,?1]
????????System.out.println(jedis.sort("a"));?//?[1,?3,?6,?9]?//輸入排序后結果
????????System.out.println(jedis.lrange("a",?0,?-1));
????}
????public?static?void?main(String[]?args)?{
????????TestRedis?redis?=?new?TestRedis();
????????redis.testMap();
????????//?RedisUtil.getJedis().set("newname",?"中文測試");
????????//?System.out.println(RedisUtil.getJedis().get("newname"));
????}
}

? ? 使用連接池

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import?redis.clients.jedis.Jedis;
import?redis.clients.jedis.JedisPool;
import?redis.clients.jedis.JedisPoolConfig;
public?final?class?RedisUtil?{
????//?Redis服務器IP
????private?static?String?ADDR?=?"192.168.0.100";
????//?Redis的端口號
????private?static?int?PORT?=?6379;
????//?訪問密碼
????//?private?static?String?AUTH?=?"admin";
????//?可用連接實例的最大數目,默認值為8;
????//?如果賦值為-1,則表示不限制;如果pool已經分配了maxActive個jedis實例,則此時pool的狀態為exhausted(耗盡)。
????private?static?int?MAX_ACTIVE?=?1024;
????//?控制一個pool最多有多少個狀態為idle(空閑的)的jedis實例,默認值也是8。
????private?static?int?MAX_IDLE?=?200;
????//?等待可用連接的最大時間,單位毫秒,默認值為-1,表示永不超時。如果超過等待時間,則直接拋出JedisConnectionException;
????private?static?int?MAX_WAIT?=?10000;
????private?static?int?TIMEOUT?=?10000;
????//?在borrow一個jedis實例時,是否提前進行validate操作;如果為true,則得到的jedis實例均是可用的;
????private?static?boolean?TEST_ON_BORROW?=?true;
????private?static?JedisPool?jedisPool?=?null;
????/**
?????*?初始化Redis連接池
?????*/
????static?{
????????try?{
????????????JedisPoolConfig?config?=?new?JedisPoolConfig();
????????????config.setMaxActive(MAX_ACTIVE);
????????????config.setMaxIdle(MAX_IDLE);
????????????config.setMaxWait(MAX_WAIT);
????????????config.setTestOnBorrow(TEST_ON_BORROW);
????????????//?jedisPool?=?new?JedisPool(config,?ADDR,?PORT,?TIMEOUT,?AUTH);
????????????jedisPool?=?new?JedisPool(config,?ADDR,?PORT,?TIMEOUT);
????????}?catch?(Exception?e)?{
????????????e.printStackTrace();
????????}
????}
????/**
?????*?獲取Jedis實例
?????*?
?????*?@return
?????*/
????public?synchronized?static?Jedis?getJedis()?{
????????try?{
????????????if?(jedisPool?!=?null)?{
????????????????Jedis?resource?=?jedisPool.getResource();
????????????????return?resource;
????????????}?else?{
????????????????return?null;
????????????}
????????}?catch?(Exception?e)?{
????????????e.printStackTrace();
????????????return?null;
????????}
????}
????/**
?????*?釋放jedis資源
?????*?
?????*?@param?jedis
?????*/
????public?static?void?returnResource(final?Jedis?jedis)?{
????????if?(jedis?!=?null)?{
????????????jedisPool.returnResource(jedis);
????????}
????}
}

code:?鏈接:http://pan.baidu.com/s/1qW5PJic?密碼:pyha



參考
http://www.ibm.com/developerworks/cn/java/os-springredis/index.html
Redis 命令參考
Java中使用Jedis操作Redis
? ? ? ??http://www.runoob.com/redis/redis-tutorial.html
? ? ? ??redis 五種數據類型的使用場景


代碼

? ? ? ??https://github.com/JeromeSuz/demo_code_repo/tree/master/src/main/java/redis

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/145007.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息