标题
redis
安装部署测试
安装
tar xzf redis-2.8.17.tar.gz
cd redis-2.8.17
make
启动
./redis-server
//中文乱码
redis-cli --raw
远程连接
redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
设置密码
config set requirepass redis@123
发布订阅
创建订阅
SUBSCRIBE redisChat
发布消息
PUBLISH redisChat "Redis is a great caching technique"
java API
https://blog.csdn.net/zhangguanghui002/article/details/78770071
连接redis
package database;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* @description:
* @author: HYW
* @create: 2019-12-20 16:41
*/
public class RedisPool {
//服务器IP地址
private static String ADDR = "xx.x.x.xxx";
//端口
private static int PORT = 6379;
//密码
private static String AUTH = "xxxxx";
//连接实例的最大连接数
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;
//数据库模式是16个数据库 0~15
public static final int DEFAULT_DATABASE = 0;
/**
* 初始化Redis连接池
*/
static {
try {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(MAX_ACTIVE);
config.setMaxIdle(MAX_IDLE);
config.setMaxWaitMillis(MAX_WAIT);
config.setTestOnBorrow(TEST_ON_BORROW);
jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT,AUTH,DEFAULT_DATABASE);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取Jedis实例
*/
public synchronized static Jedis getJedis() {
try {
if (jedisPool != null) {
Jedis resource = jedisPool.getResource();
System.out.println("redis--服务正在运行: "+resource.ping());
return resource;
} else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/***
*
* 释放资源
*/
public static void returnResource(final Jedis jedis) {
if(jedis != null) {
jedisPool.returnResource(jedis);
}
}
public static void main(String[] args) {
Jedis jedis=RedisPool.getJedis();
jedis.set("name","小米");
System.out.println(jedis.get("name"));
}
}
案例
消息队列
生产者
package database;
import redis.clients.jedis.Jedis;
/**
* @description:
* @author: HYW
* @create: 2019-12-20 17:33
*/
public class Producter extends Thread {
public static final String MESSAGE_KEY = "myQueue";
private volatile int count;
public void putMessage(String message) {
Jedis jedis = RedisPool.getJedis();
Long size = jedis.lpush(MESSAGE_KEY, message);
System.out.println(Thread.currentThread().getName() + " put message,size=" + size + ",count=" + count);
count++;
}
@Override
public synchronized void run() {
for (int i = 0; i < 5; i++) {
putMessage("message" + count);
}
}
public static void main(String[] args) {
Producter messageProducer = new Producter();
Thread t1 = new Thread(messageProducer, "product_1");
Thread t2 = new Thread(messageProducer, "product_2");
Thread t3 = new Thread(messageProducer, "product_3");
Thread t4 = new Thread(messageProducer, "product_4");
Thread t5 = new Thread(messageProducer, "product_5");
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}
}
消费者
package database;
import redis.clients.jedis.Jedis;
import java.util.ArrayList;
import java.util.List;
/**
* @description:
* @author: HYW
* @create: 2019-12-20 17:34
*/
public class Consumer extends Thread {
public static final String MESSAGE_KEY = "myQueue";
private volatile int count;
public void consumerMessage() {
Jedis jedis = RedisPool.getJedis();
List message=jedis.brpop(0,MESSAGE_KEY);
if(message==null){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + " consumer message,message=" + message.toString() + ",count=" + count);
count++;
}
@Override
public void run() {
while (true) {
consumerMessage();
}
}
public static void main(String[] args) {
Consumer messageConsumer = new Consumer();
Thread t1 = new Thread(messageConsumer, "thread6");
Thread t2 = new Thread(messageConsumer, "thread7");
t1.start();
t2.start();
}
}
热点排行
package database;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.SortingParams;
import redis.clients.jedis.Tuple;
import java.util.Date;
import java.util.Set;
/**
* @description: 热点点击
* @author: HYW
* @create: 2019-12-20 16:51
*/
public class Demo {
Jedis jedis= RedisPool.getJedis();
void getOne(){
// Set set=jedis.smembers("zset");
Set set=jedis.zrange("zset",-1,-1);
for(Object key :set ){
System.out.println(key+"得分:"+
jedis.zscore("zset",String.valueOf(key)));
}
}
void print(){
Set<Tuple> tuples = jedis.zrangeWithScores("zset", 0, -1);
for (Tuple tuple : tuples) {
System.out.println(tuple.getElement() + ":" + tuple.getScore());
}
}
void click(String key){
Object o=jedis.zrank("zset",String.valueOf(key));
if(o==null){
jedis.zadd("zset",1,key);
}else {
jedis.zincrby("zset", 1, key);
}
System.out.println(o);
}
public static void main(String[] args) {
Demo main=new Demo();
main.print();
main.getOne();
main.click("a");
main.click("a");
main.click("a");
main.print();
main.getOne();
}
}