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

第一次使用redis看的文章(转)

 
阅读更多
摘要redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从...

0.前言

因为是初次使用,所以是在windows下进行安装和使用,参考了几篇博客,下面整理一下

1.安装Redis

官方网站:http://redis.io/

官方下载:http://redis.io/download可以根据需要下载不同版本

windows版:https://github.com/MSOpenTech/redis

github的资源可以ZIP直接下载的(这个是给不知道的同学友情提示下)

下载完成后 可以右键解压到 某个硬盘下 比如D:\Redis\redis-2.6

在D:\Redis\redis-2.6\bin\release下 有两个zip包 一个32位一个64位

根据自己windows的位数 解压到D:\Redis\redis-2.6 根目录下

2.启动Redis

进入redis目录后 开启服务 (注意加上redis.conf)

?
1
redis-server.exe redis.conf

这个窗口要保持开启 关闭时redis服务会自动关闭

redis会自动保存数据到硬盘 所以图中是我第二次开启时 多了一个 DB loaded from disk

3.测试使用

另外开启一个命令行窗口 进入redis目录下 (注意修改自己的ip)

?
1
redis-cli.exe -h 192.168.10.61 -p 6379

4.Java开发包Jedis

Jedis :http://www.oschina.net/p/jedis(Redis的官方首选Java开发包)

?
1
2
3
4
5
6
7
8
<!--Redis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.0.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>

测试例子原帖:http://flychao88.iteye.com/blog/1527163

?
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
packagecom.lujianing.utils;
importorg.junit.Before;
importorg.junit.Test;
importredis.clients.jedis.Jedis;
importredis.clients.jedis.JedisPool;
importredis.clients.jedis.JedisPoolConfig;
importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Map;
/**
* Created by lujianing on 14-2-28.
*/
publicclass JedisUtilTest {
JedisPool pool;
Jedis jedis;
@Before
publicvoid setUp() {
pool = newJedisPool(newJedisPoolConfig(), "192.168.10.61");
jedis = pool.getResource();
// jedis.auth("password");
}
@Test
publicvoid testGet(){
System.out.println(jedis.get("lu"));
}
/**
* Redis存储初级的字符串
* CRUD
*/
@Test
publicvoid testBasicString(){
//-----添加数据----------
jedis.set("name","minxr");//向key-->name中放入了value-->minxr
System.out.println(jedis.get("name"));//执行结果:minxr
//-----修改数据-----------
//1、在原来基础上修改
jedis.append("name","jarorwar");//很直观,类似map 将jarorwar append到已经有的value之后
System.out.println(jedis.get("name"));//执行结果:minxrjarorwar
//2、直接覆盖原来的数据
jedis.set("name","闵晓荣");
System.out.println(jedis.get("name"));//执行结果:闵晓荣
//删除key对应的记录
jedis.del("name");
System.out.println(jedis.get("name"));//执行结果:null
/**
* mset相当于
* jedis.set("name","minxr");
* jedis.set("jarorwar","闵晓荣");
*/
jedis.mset("name","minxr","jarorwar","闵晓荣");
System.out.println(jedis.mget("name","jarorwar"));
}
/**
* jedis操作Map
*/
@Test
publicvoid testMap(){
Map<String,String> user=newHashMap<String,String>();
user.put("name","minxr");
user.put("pwd","password");
jedis.hmset("user",user);
//取出user中的name,执行结果:[minxr]-->注意结果是一个泛型的List
//第一个参数是存入redis中map对象的key,后面跟的是放入map中的对象的key,后面的key可以跟多个,是可变参数
List<String> rsmap = jedis.hmget("user","name");
System.out.println(rsmap);
//删除map中的某个键值
// jedis.hdel("user","pwd");
System.out.println(jedis.hmget("user","pwd"));//因为删除了,所以返回的是null
System.out.println(jedis.hlen("user"));//返回key为user的键中存放的值的个数1
System.out.println(jedis.exists("user"));//是否存在key为user的记录 返回true
System.out.println(jedis.hkeys("user"));//返回map对象中的所有key [pwd, name]
System.out.println(jedis.hvals("user"));//返回map对象中的所有value [minxr, password]
Iterator<String> iter=jedis.hkeys("user").iterator();
while(iter.hasNext()){
String key = iter.next();
System.out.println(key+":"+jedis.hmget("user",key));
}
}
/**
* jedis操作List
*/
@Test
publicvoid testList(){
//开始前,先移除所有的内容
jedis.del("java framework");
System.out.println(jedis.lrange("java framework",0,-1));
//先向key java framework中存放三条数据
jedis.lpush("java framework","spring");
jedis.lpush("java framework","struts");
jedis.lpush("java framework","hibernate");
//再取出所有数据jedis.lrange是按范围取出,
// 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有
System.out.println(jedis.lrange("java framework",0,-1));
}
/**
* jedis操作Set
*/
@Test
publicvoid testSet(){
//添加
jedis.sadd("sname","minxr");
jedis.sadd("sname","jarorwar");
jedis.sadd("sname","闵晓荣");
jedis.sadd("sanme","noname");
//移除noname
jedis.srem("sname","noname");
System.out.println(jedis.smembers("sname"));//获取所有加入的value
System.out.println(jedis.sismember("sname","minxr"));//判断 minxr 是否是sname集合的元素
System.out.println(jedis.srandmember("sname"));
System.out.println(jedis.scard("sname"));//返回集合的元素个数
}
@Test
publicvoid test() throwsInterruptedException {
//keys中传入的可以用通配符
System.out.println(jedis.keys("*"));//返回当前库中所有的key [sose, sanme, name, jarorwar, foo, sname, java framework, user, braand]
System.out.println(jedis.keys("*name"));//返回的sname [sname, name]
System.out.println(jedis.del("sanmdde"));//删除key为sanmdde的对象 删除成功返回1 删除失败(或者不存在)返回 0
System.out.println(jedis.ttl("sname"));//返回给定key的有效时间,如果是-1则表示永远有效
jedis.setex("timekey",10,"min");//通过此方法,可以指定key的存活(有效时间) 时间为秒
Thread.sleep(5000);//睡眠5秒后,剩余时间将为<=5
System.out.println(jedis.ttl("timekey"));//输出结果为5
jedis.setex("timekey",1,"min");//设为1后,下面再看剩余时间就是1了
System.out.println(jedis.ttl("timekey"));//输出结果为1
System.out.println(jedis.exists("key"));//检查key是否存在
System.out.println(jedis.rename("timekey","time"));
System.out.println(jedis.get("timekey"));//因为移除,返回为null
System.out.println(jedis.get("time"));//因为将timekey 重命名为time 所以可以取得值 min
//jedis 排序
//注意,此处的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));
}
}

Redis会定时 保存数据到硬盘上

分享到:
评论

相关推荐

    Redis数据库

    4. **事务**:Redis支持事务,可以一次性执行多个操作,保证这些操作的原子性。 5. **数据结构丰富**:除了基本的键值对,Redis还提供了哈希表、列表、集合和有序集合等复杂数据结构,适合处理各种应用场景。 6. **...

    redis面试相关问题整理(含答案)

    高性能:假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,...

    Redis-x64-5.0.14安装包

    5. **事务**:Redis 提供了事务功能,允许一次执行多个命令,并确保原子性。 6. **发布/订阅**:作为消息中间件,Redis 具有 Pub/Sub(发布/订阅)模式,可用于实现简单的消息传递。 7. **Lua 脚本**:用户可以...

    redis 2.8zip文件

    $redis-&gt;set('article_title', '我的第一篇文章'); $redis-&gt;lPush('articles', 'article_id_1'); // 将文章ID推入列表 // 获取数据 $title = $redis-&gt;get('article_title'); $latest_articles = $redis-&gt;lRange('...

    redis命令详解

    集合成员是唯一的,这意味着集合中的每个元素只能出现一次。 - **命令示例:** - `SADD key member1 [member2]`: 添加一个或多个成员到集合中。 - `SMEMBERS key`: 获取集合中的所有成员。 - `SCARD key`: 获取...

    springboot +redis 实现点赞、浏览、收藏、评论等数量的增减操作

    第一次写博客,记录一下: 最近做了一个帖子的收藏、点赞数量的功能,其实之前也做过类似的功能,因为之前一直使用的mysql 总是感觉对于这种频繁需要改变的值,不应该给予Mysql过大的压力,本文章采用的是redis 做...

    redismq:用于基于redis的持久消息队列系统,另请参见https

    它使用原子列表命令来确保消息仅以正确的顺序传递一次,而不会因崩溃的使用者而丢失。 可以在有关其初始设计的博客文章中找到详细信息: : 第二篇文章描述了当前版本的性能改进: ://big-elephants....

    在CentOS 7环境下安装Redis数据库详解

    使脚本可执行并添加到 cron 定时任务,例如每 3 分钟检查一次: ```bash chmod +x /scripts/redis-check.sh crontab -e ``` 在 crontab 文件中添加以下行: ```cron */3 * * * * /bin/bash /scripts/redis-check....

    php+redis实现消息队列功能示例

    2. `lpop`: 这个命令用于移除并返回列表的第一个元素。在消息队列中,消费者(订阅者)通过调用此命令获取并处理队列头部的消息。 以下是一个简单的PHP+Redis消息队列实现步骤: 1. **连接Redis**: 使用`new Redis...

    Node.js + Redis Sorted Set实现任务队列

    若任务执行失败,则可以将任务的分值更新为当前时间戳,并将其重新加入到队列尾部,等待下一次重试。 实际代码示例 文章中提供了相关的代码示例,包括使用Node.js实现API来接收用户请求、将任务加入队列(producer...

    PHP+redis实现的购物车单例类示例

    当第一次调用 `getInstance()` 时,它会创建一个新实例并将其存储,之后的调用将返回已存在的实例。 2. **Redis连接**: `CartSingleton` 类的构造函数是私有的,防止外部直接创建对象实例。在构造函数中,实例化了...

    redis实现简单队列

    它使用 Lazy 初始化模式来确保在第一次使用时连接 Redis,并且缓存连接,以提高性能。`Instance` 属性返回 `ConnectionMultiplexer` 对象,它是与 Redis 服务器交互的基础。 `SimpleRedisQueue` 类封装了对 Redis ...

    PHP实现redis限制单ip、单用户的访问次数功能示例

    总结一下,本篇文章介绍了如何使用PHP和Redis实现限制单IP和单用户访问次数的策略。主要涉及的知识点包括: 1. PHP与Redis的连接和授权。 2. 使用Redis的`exists`、`incr`和`expire`方法管理访问计数。 3. 获取...

    Redis命令1

    - `mset`:一次设置多个键值对,`mset key1 value1 key2 value2`等。 - `mget`:获取多个键的值,`mget key1 key2`将返回对应键的值。 - `append`:向已有键的值后面追加内容,`append key val`。 - `type`:...

    22拓展 1:耳听八方 —— Stream(1).md

    这个变量记录了已被客户端读取但未确认(ack)的消息,确保消息至少被消费一次,避免在网络传输过程中丢失。 文章还详细解释了消息ID的结构,它由时间戳和序列号组成,例如***-5,表示在***毫秒时间戳生成的第5条...

    Redis列表类型的常用命令小结

    弹出操作也是原子性的,即这些命令会一次性完成,不会有其他命令插队。 3. 获取列表中元素的个数 - LLEN key:获取列表长度。 当指定的键不存在时,返回0;如果键存在但不是列表类型,将返回错误。 4. 获取列表...

    my_site:Django + Python + MySQL + Redis + Docker + Supervisor 搭建的个人博客

    实现文章阅读量统计,12小时内连续访问的IP只记录一次6. 后台引入wangEditor富文本编辑器和editor.md Markdown编辑器,前端使用prism.js进行代码高亮7. Celery + Redis + Supervisor进行异步任务和定时任务的启动和...

    毕业设计-博客(moti-blog)是一个基于 SpringBoot 开发的标准 Java Web 项目

    其实这个应该叫做绑定QQ,如果之前数据库里面没有QQ用户的信息,那么第一次登录的时候就将这个QQ的信息写到数据库实现绑定的功能,这应该叫先入为主。 之后用户可以修改个人资料,直接上图吧~ 上传完微信...

    spring实现集群同步锁

    // 如果是第一次自增,返回true,表示获取到锁 } public void unlock(String key) { redisTemplate.opsForValue().decrement(key); // 释放锁,减1操作 } } ``` 4. **锁超时与公平性**:为了防止死锁,我们...

Global site tag (gtag.js) - Google Analytics