001.windows Redis 3.0入门学习(转载加整合)
一、Redis安装教程(转载)
Windows下安装Redis服务
说明:本文拷贝自https://jingyan.baidu.com/article/0f5fb099045b056d8334ea97.html
Redis是有名的NoSql数据库,一般Linux都会默认支持。但在Windows环境中,可能需要手动安装设置才能有效使用。这里就简单介绍一下Windows下Redis服务的安装方法,希望能够帮到你。
1、要安装Redis,首先要获取安装包。Windows的Redis安装包需要到以下GitHub链接找到。链接:https://github.com/MSOpenTech/redis。打开网站后,找到Release,点击前往下载页面。
2、在下载网页中,找到最后发行的版本(此处是3.2.100)。找到Redis-x64-3.2.100.msi和Redis-x64-3.2.100.zip,点击下载。这里说明一下,第一个是msi微软格式的安装包,第二个是压缩包。
3、双击刚下载好的msi格式的安装包(Redis-x64-3.2.100.msi)开始安装。
4、选择“同意协议”,点击下一步继续。
5、选择“添加Redis目录到环境变量PATH中”,这样方便系统自动识别Redis执行文件在哪里。
6、端口号可保持默认的6379,并选择防火墙例外,从而保证外部可以正常访问Redis服务。
7、设定最大值为100M。作为实验和学习,100M足够了。
8、点击安装后,正式的安装过程开始。稍等一会即可完成。
9、安装完毕后,需要先做一些设定工作,以便服务启动后能正常运行。使用文本编辑器,这里使用Notepad++,打开Redis服务配置文件。注意:不要找错了,通常为redis.windows-service.conf,而不是redis.windows.conf。后者是以非系统服务方式启动程序使用的配置文件。
10、找到含有requirepass字样的地方,追加一行,输入requirepass 12345。这是访问Redis时所需的密码,一般测试情况下可以不用设定密码。不过,即使是作为本地访问,也建议设定一个密码。此处以简单的12345来演示。
11、点击“开始”>右击“计算机”>选择“管理”。在左侧栏中依次找到并点击“计算机管理(本地)”>服务和应用程序>服务。再在右侧找到Redis名称的服务,查看启动情况。如未启动,则手动启动之。正常情况下,服务应该正常启动并运行了。
12、最后来测试一下Redis是否正常提供服务。进入Redis的目录,cd C:\Program Files\Redis。输入redis-cli并回车。(redis-cli是客户端程序)如图正常提示进入,并显示正确端口号,则表示服务已经启动。



-
1.Windows使用的这个Redis是64位版本的,32位操作系统的同学就不要折腾了。
-
2. 作为服务运行的Redis配置文件,通常为redis.windows-service.conf,而不是redis.windows.conf。小心不要选错了。
二、测试类以及jar包
jar包:slf4j-api-1.7.7.jar、jedis-3.0.1.jar、commons-pool2-2.3.jar、junit-4.7.jar
1. Redis连接池
package com.redis;
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 = "127.0.0.1";
//Redis的端口号
private static int PORT = 6379;
//访问密码
private static String AUTH = "12345";
//可用连接实例的最大数目,默认值为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.setMaxTotal(MAX_ACTIVE);//config.setMaxActive(MAX_ACTIVE);
config.setMaxIdle(MAX_IDLE);
config.setMaxWaitMillis(MAX_WAIT);//config.setMaxWait(MAX_WAIT);
config.setTestOnBorrow(TEST_ON_BORROW);
jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT, AUTH);
} 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 close(final Jedis jedis) {
if (jedis != null) {
jedisPool.close();
}
}
}
2. Redis测试类
package com.redis;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
public class RedisOperate {
private Jedis jedis;
@Before
public void setup() {
//连接redis服务器,192.168.0.100:6379
jedis = new Jedis("127.0.0.1", 6379);
//权限认证
jedis.auth("12345");
}
/**
* redis存储字符串
*/
@Test
public void testString() {
//-----添加数据----------
jedis.set("name","xinxin");//向key-->name中放入了value-->xinxin
System.out.println(jedis.get("name"));//执行结果:xinxin
jedis.append("name", " is my lover"); //拼接
System.out.println(jedis.get("name"));
jedis.del("name"); //删除某个键
System.out.println(jedis.get("name"));
//设置多个键值对
jedis.mset("name","liuling","age","23","qq","476777XXX");
jedis.incr("age"); //进行加1操作
System.out.println(jedis.get("name") + "-" + jedis.get("age") + "-" + jedis.get("qq"));
}
/**
* redis操作Map
*/
@Test
public void testMap() {
//-----添加数据----------
Map<String, String> map = new HashMap<String, String>();
map.put("name", "xinxin");
map.put("age", "22");
map.put("qq", "123456");
jedis.hmset("user",map);
//取出user中的name,执行结果:[minxr]-->注意结果是一个泛型的List
//第一个参数是存入redis中map对象的key,后面跟的是放入map中的对象的key,后面的key可以跟多个,是可变参数
List<String> rsmap = jedis.hmget("user", "name", "age", "qq");
System.out.println(rsmap);
//删除map中的某个键值
jedis.hdel("user","age");
System.out.println(jedis.hmget("user", "age")); //因为删除了,所以返回的是null
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
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
public void 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.del("java framework");
jedis.rpush("java framework","spring");
jedis.rpush("java framework","struts");
jedis.rpush("java framework","hibernate");
System.out.println(jedis.lrange("java framework",0,-1));
}
/**
* jedis操作Set
*/
@Test
public void testSet(){
//添加
jedis.sadd("users","liuling");
jedis.sadd("users","xinxin");
jedis.sadd("users","ling");
jedis.sadd("users","zhangxinxin");
jedis.sadd("users","who");
//移除noname
jedis.srem("users","who");
System.out.println(jedis.smembers("users"));//获取所有加入的value
System.out.println(jedis.sismember("users", "who"));//判断 who 是否是user集合的元素
System.out.println(jedis.srandmember("users"));
System.out.println(jedis.scard("users"));//返回集合的元素个数
}
@Test
public void test() throws InterruptedException {
//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));
}
@Test
public void testRedisPool() {
RedisUtil.getJedis().set("newname", "中文测试");
System.out.println(RedisUtil.getJedis().get("newname"));
}
}
三、常用控制台指令
redis 常用命令行指令汇总
Redis 配置
Redis
配置放在文件名为 redis.conf
的文件中。
1、获取配置信息
语法:
CONFIG GET CONFIG_SETTING_NAME
样例:
192.168.56.101:0>CONFIG GET port
1) por
2、 编辑配置
语法:
CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
样例:
192.168.56.101:0>select 6 //选择数据库,选不选择不影响下面设置操作
OK
192.168.56.101:6>CONFIG GET timeout
1) timeout
2) 0
192.168.56.101:6>CONFIG SET timeout 5000
OK
192.168.56.101:6>CONFIG GET timeout
1) timeout
2) 5000
数据操作
Redis
支持五种数据类型:string
(字符串),hash
(哈希),list
(列表),set
(集合)及zset
(sorted set:有序集合)。
1、String(字符串)
一个key对应一个value。一个键最大能存储512MB。string类型是二进制安全的。
192.168.56.101:6>SET name "hello" //存值
OK
192.168.56.101:6>GET name //取值
h
2、Hash(哈希)
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。每个 hash 可以存储 232192.168.56.101:6>HMSET user name "张三" age 18 //存多个值 HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN 存单个值用 HSET KEY_NAME FIELD VALUE
OK
192.168.56.101:6>HGET user age //取值 HGET KEY_NAME FIELD_NAME
18
192.168.56.101:6>HGET user name
张三
192.168.56.101:6>HGETALL user //所有的字段和值 HGETALL KEY_NAME
1) name
2) 张三
3) age
4) 18
5) sex
6) 男
192.168.56.101:6>HKEYS user //获取key HKEYS key
1) name
2) age
3) sex
192.168.56.101:6>H
192.168.56.101:6>exists tecp
0
192.168
2、DEL KEY_NAME
删除key。被删除 key 的数量。
192.168.56.10
3、Expire KEY_NAME TIME_IN_SECONDS
设置 key 的过期时间,单位为 s(秒)。key 过期后将不再可用。设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。
192.168.56.101:6>set name zhangsan
OK
192.168.56.101:
4、 TTL KEY_NAME
以秒为单位返回 key 的剩余过期时间。
192.168.56.101:6>set name zhangsan
OK
192.168.56.101:6>expire name 60
1
192.168.56.101:6>ttl name //已经过了6s
54
转载于:https://www.cnblogs.com/redlittleface/p/10511857.html
作者:weixin_30773135
来源链接:https://blog.csdn.net/weixin_30773135/article/details/97923338
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。