redis的五种数据类型的使用场景,已经redis的发布和订阅功能的实现
一、redis 支持五种数据类型
string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)
1、string 类型 存放结构 key-value ,value可以是string或者数字,
使用场景:存放一些系统常用的变量、参数等数据
2、hash , 可以存储对象数据,可以将系统数据换成到缓存中:
使用场景:存储、读取、修改用户属性
user1 name "zhangsan" age "22" sex "1"
user2 name "lisi" age "20" sex "0"
3、list,按顺序将数据存放到,可以作为一个有序队列,在项目中可以做做有先后顺序要求的业务,
使用场景:微博 TimeLine、 消息队列
eg:秒杀行为,记录用户描述行为到队列中,从队列中筛选秒杀成功用户
4、set就是一个集合,集合的概念就是一堆不重复值的组合。利用Redis提供的set数据结构,可以存储一些集合性的数据。set中的元素是没有顺序的。
使用场景:
(1)利用唯一性,可以统计访问网站的所有独立 IP
(2)好友数量的统计:两个人相同好友人数、微博关注人数统计,等利用set集合做交集,并集,差集行为,得出相应结果数据的结果集合
5、sorted set 权重集合,是将 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列
使用场景:
(1)带有权重的元素,比如一个游戏的用户得分排行榜
二、redis其他功能的使用场景
package redis.demo;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
public class RedisClient1 {
public static void main(String[] args){
Jedis jRedis = new Jedis("115.159.31.89",6379);
jRedis.auth("admin123");
JedisPubSub jedisPubSub=new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
super.onMessage(channel, message);
System.out.println( "1:" +message);
doSomeThing(message);
}
};
jRedis.subscribe(jedisPubSub,"redis1");
}
public static void doSomeThing(String msg){
System.out.println("客户端1获得主题:JRedisChat下发布的内容:" + msg);
}
}
客户端2: 订阅主题为 redis2
package redis.demo;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
public class RedisClient2 {
public static void main(String[] args){
Jedis jRedis = new Jedis("115.159.31.89",6379);
jRedis.auth("admin123");
JedisPubSub jedisPubSub=new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
super.onMessage(channel, message);
System.out.println( "2:" +message);
doSomeThing(message);
}
};
jRedis.subscribe(jedisPubSub,"redis2");
}
public static void doSomeThing(String msg){
System.out.println("客户端2获得主题:JRedisChat下发布的内容:" + msg);
}
}
服务端:发布两个主题 redis1 和 redis2
package redis.demo;
import redis.clients.jedis.Jedis;
public class RedisPublish {
public static void main(String[] args) {
Jedis jRedis = new Jedis("115.159.31.89", 6379);
jRedis.auth("admin123");
jRedis.publish("redis1", "Send a message to client 1");
jRedis.publish("redis2", "Send a message to client 2");
}
}