Redis的所有操作都是原子性?

1、redis 介绍

Redis 是完全开源的,是一个高性能的 key-value 数据库。
redis 的优势

性能高 – Redis能读的速度是110000次/s,写的速度是81000次/s
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。。

2、在项目中的应用

在游戏服务器中的应用主要有下面几个场景:
基于redis 的高性能,所以我们当做跨服的数据存储使用
基于redis的发布订阅功能,我们当做服务器之间的消息发布使用,统领所有的服务器
基于redis 的排序功能,我们当做跨服的排行榜使用。

3、代码展示

在项目中加入下面的依赖


    redis.clients
    jedis

如果你使用springboot搭建的项目,可以加入下面到pom


    org.springframework.boot
    spring-boot-starter-data-redis

1、数据存储

数据的存储比较简单,常规的使用就行

@Component
public class RedisUtil {
 
    public static RedisUtil util;
 
    public RedisUtil(@Autowired  JedisPool jedisPool) {
        this.jedisPool = jedisPool;
        RedisUtil.util = this;
    }
 
    public static RedisUtil getInstance(){
        return util;
    }
 
 
    @Autowired
    private JedisPool jedisPool;
 
    /**
     * 向Redis中存值,永久有效
     */
    public String set(String key, String value) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            return jedis.set(key, value);
        } catch (Exception e) {
            return "0";
        } finally {
            jedis.close();
        }
    }
 
    /**
     * 根据传入Key获取指定Value
     */
    public String get(String key) {
        Jedis jedis = null;
        String value;
        try {
            jedis = jedisPool.getResource();
            value = jedis.get(key);
        } catch (Exception e) {
            return "0";
        } finally {
            jedis.close();
        }
        return value;
    }
 
    /**
     * 校验Key值是否存在
     */
    public Boolean exists(String key) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            return jedis.exists(key);
        } catch (Exception e) {
            return false;
        } finally {
            jedis.close();
        }
    }
 
    /**
     * 删除指定Key-Value
     */
    public Long del(String key) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            return jedis.del(key);
        } catch (Exception e) {
            return 0L;
        } finally {
            jedis.close();
        }
    }
 
    /**
     * 分布式锁
     * @param key
     * @param value
     * @param time 锁的超时时间,单位:秒
     *
     * @return 获取锁成功返回"OK",失败返回null
     */
    public String getDistributedLock(String key,String value,int time){
        Jedis jedis = null;
        String ret = "";
        try {
            jedis = jedisPool.getResource();
 
            ret = jedis.set(key, value, new SetParams().nx().ex(time));
            return ret;
        } catch (Exception e) {
            return null;
        } finally {
            jedis.close();
        }
    }
 
    public void pub(){
        jedisPool.getResource().publish("test","msg");
    }
 
}

你可能感兴趣的:(redis)