五、(补充)redis的一些简介和使用场景

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其他功能的使用场景

1、订阅-发布系统
Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),就是设定一个key值进行消息的发布和订阅,当给指定key值发送消息的时候,所有订阅这个key值的客户端都会收到相应的消息值。
这里有个简单的demo,可以很形象的说明这个问题,具体是两个redis的订阅客户端,和一个redis的发布服务端
客服端1:订阅主题为 redis1
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");
	}
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值