国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Redis基本操作之Java實(shí)現(xiàn)(所有類型)

Imfan / 1260人閱讀

摘要:前不久分享過的基本數(shù)據(jù)結(jié)構(gòu)及基本命令詳解。在熟悉了的基本操作之后如果還有對(duì)的基本操作不熟悉的,可以點(diǎn)擊前面的連接先熟悉下,今天給大家分享下實(shí)際開發(fā)中對(duì)操作的實(shí)現(xiàn)版本。

前不久分享過Redis的基本數(shù)據(jù)結(jié)構(gòu)及基本命令詳解。在熟悉了redis的基本操作之后(如果還有對(duì)redis的基本操作不熟悉的,可以點(diǎn)擊前面的連接先熟悉下),今天給大家分享下實(shí)際開發(fā)中對(duì)redis操作的Java實(shí)現(xiàn)版本。

Maven依賴

使用maven來構(gòu)建項(xiàng)目在當(dāng)下應(yīng)該已經(jīng)是主流了,所以我們也不例外使用了Maven。因?yàn)槭褂昧藄pring對(duì)redis封裝的jar,所以也需要引入spring基本jar,Maven依賴如下:


    org.springframework
    spring-core
    5.1.5.RELEASE


    org.springframework
    spring-context
    5.1.5.RELEASE


    org.springframework.data
    spring-data-redis
    2.1.3.RELEASE


    redis.clients
    jedis
    2.9.2


    
    redis
實(shí)現(xiàn)代碼

實(shí)現(xiàn)代碼篇幅有點(diǎn)長(zhǎng),而且segmentfault代碼div的高度有限制,建議大家把代碼拷貝到開發(fā)工具中再閱讀。

package spring.redis;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Service;

import java.io.UnsupportedEncodingException;
import java.util.*;
import java.util.stream.Collectors;

@Service
public class SpringRedisHandler implements InitializingBean {

    //redis編碼
    private static final String redisCode = "utf-8";
    private static final String EmptyString = "";

    @Autowired
    private RedisTemplate jtRedis;

    /**
     * 設(shè)置key-value【不含超時(shí)時(shí)間】
     *
     * @param key
     * @param value
     */
    public void set(String key, Object value) {
        this.set(key, String.valueOf(value), 0L);
    }

    /**
     * 設(shè)置key-value【含超時(shí)時(shí)間】
     *
     * @param key
     * @param value
     * @param liveTime
     */
    public void set(String key, Object value, long liveTime) {
        this.set(key.getBytes(), String.valueOf(value).getBytes(), liveTime);
    }


    @SuppressWarnings({"unchecked", "rawtypes"})
    private void set(final byte[] key, final byte[] value, final long liveTime) {
        jtRedis.execute(new RedisCallback() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                connection.set(key, value);
                if (liveTime > 0) {
                    connection.expire(key, liveTime);
                }
                return 1L;
            }
        });
    }

    /**
     * get key的值
     *
     * @param key
     * @return
     */
    public String get(final String key) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
                try {
                    return new String(connection.get(key.getBytes()), redisCode);
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                    return "";
                }
            }
        });
    }

    /**
     * 是否存在key
     *
     * @param key
     * @return
     */
    public boolean exists(final String key) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
                return connection.exists(key.getBytes());
            }
        });
    }

    /**
     * 某數(shù)據(jù)中所有key的總數(shù)
     *
     * @return
     */
    public long dbSize() {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                return connection.dbSize();
            }
        });
    }

    /**
     * 檢測(cè)redis服務(wù)器是否能平通
     */
    public String ping() {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
                return connection.ping();
            }
        });
    }

    /**
     * value增加某個(gè)值
     *
     * @param key
     * @param value
     * @return
     */
    public Long incr(String key, long value) {
        return incr(key.getBytes(), value);
    }

    private Long incr(byte[] key, long value) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                return connection.incrBy(key, value);
            }
        });
    }

    /**
     * 自增
     *
     * @param key
     * @return
     */
    public Long incr(String key) {
        return incr(key.getBytes(), 1);
    }

    /**
     * 自減
     *
     * @param key
     * @return
     */
    public Long decr(String key) {
        return decr(key.getBytes(), 1);
    }

    /**
     * value減少某個(gè)值
     *
     * @param key
     * @param value
     * @return
     */
    public Long decr(String key, long value) {
        return decr(key.getBytes(), value);
    }

    private Long decr(byte[] key, long value) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                return connection.decrBy(key, value);
            }
        });
    }

    /**
     * 刪除key
     *
     * @param key
     * @return
     */
    public Long del(String key) {
        return del(key.getBytes());
    }

    private Long del(byte[] key) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                return connection.del(key);
            }
        });
    }

    /**
     * flushdb:刪除db下的所有數(shù)據(jù)
     */
    @SuppressWarnings({"rawtypes", "unchecked"})
    public void flushDb() {
        jtRedis.execute(new RedisCallback() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                connection.flushDb();
                return 1L;
            }
        });
    }

    /**
     * 設(shè)置hash
     *
     * @param key
     * @param field
     * @param value
     * @return
     */
    public Boolean hSet(String key, String field, String value) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public Boolean doInRedis(RedisConnection redisConnection) throws DataAccessException {
                return redisConnection.hSet(key.getBytes(), field.getBytes(), value.getBytes());
            }
        });
    }

    /**
     * 獲取hash的屬性值
     *
     * @param key
     * @param field
     * @return
     */
    public String hGet(String key, String field) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public String doInRedis(RedisConnection redisConnection) throws DataAccessException {
                return new String(redisConnection.hGet(key.getBytes(), field.getBytes()));
            }
        });
    }

    /**
     * 批量設(shè)置hash
     *
     * @param key
     * @param values
     */
    public void hMSet(String key, Map values) {
        jtRedis.execute(new RedisCallback() {
            @Override
            public Long doInRedis(RedisConnection redisConnection) throws DataAccessException {
                redisConnection.hMSet(key.getBytes(), stringObjectMapToBytes(values));
                return null;
            }
        });
    }

    /**
     * 批量獲取hash的多個(gè)屬性
     *
     * @param key
     * @param fields
     * @return
     */
    public List hMGet(String key, String... fields) {
        return jtRedis.execute(new RedisCallback>() {
            @Override
            public List doInRedis(RedisConnection redisConnection) throws DataAccessException {
                List listFileds = new ArrayList<>();
                for (int i = 0; i < fields.length; i++) {
                    listFileds.add(fields[i]);
                }

                List byteFileds = stringListToByte(listFileds);
                return bytesListToString(redisConnection.hMGet(key.getBytes(), byteFileds.toArray(new byte[byteFileds.size()][byteFileds.size()])));
            }
        });
    }

    /**
     * 獲取hash的所有屬性
     *
     * @param key
     * @return
     */
    public Map hGetAll(String key) {
        return jtRedis.execute(new RedisCallback>() {
            @Override
            public Map doInRedis(RedisConnection redisConnection) throws DataAccessException {
                return bytesMapToString(redisConnection.hGetAll(key.getBytes()));
            }
        });
    }

    /**
     * 針對(duì)hash中某個(gè)屬性增加指定的值
     *
     * @param key
     * @param field
     * @param value
     * @return
     */
    public Double hIncrBy(String key, String field, double value) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public Double doInRedis(RedisConnection redisConnection) throws DataAccessException {
                return redisConnection.hIncrBy(key.getBytes(), field.getBytes(), value);
            }
        });
    }

    /**
     * hash是存在某屬性
     *
     * @param key
     * @param field
     * @return
     */
    public Boolean hExists(String key, String field) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public Boolean doInRedis(RedisConnection redisConnection) throws DataAccessException {
                return redisConnection.hExists(key.getBytes(), field.getBytes());
            }
        });
    }

    /**
     * 刪除hash的某屬性
     *
     * @param key
     * @param field
     * @return
     */
    public Long hDel(String key, String field) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public Long doInRedis(RedisConnection redisConnection) throws DataAccessException {
                return redisConnection.hDel(key.getBytes(), field.getBytes());
            }
        });
    }

    /**
     * 向zset中的某個(gè)key添加一個(gè)屬性幾分?jǐn)?shù)(可以根據(jù)分?jǐn)?shù)排序)
     *
     * @param key
     * @param score
     * @param field
     * @return
     */
    public Boolean zAdd(String key, double score, String field) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public Boolean doInRedis(RedisConnection redisConnection) throws DataAccessException {
                return redisConnection.zAdd(key.getBytes(), score, field.getBytes());
            }
        });
    }

    /**
     * 給zset中的某個(gè)key中的某個(gè)屬性增加指定分?jǐn)?shù)
     *
     * @param key
     * @param score
     * @param field
     * @return
     */
    public Double zIncrBy(String key, double score, String field) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public Double doInRedis(RedisConnection redisConnection) throws DataAccessException {
                return redisConnection.zIncrBy(key.getBytes(), score, field.getBytes());
            }
        });
    }

    /**
     * 從list左側(cè)插入一個(gè)元素
     *
     * @param key
     * @param values
     * @return
     */
    public Long lPush(String key, String value) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                return connection.lPush(key.getBytes(), value.getBytes());
            }
        });
    }

    /**
     * 從list左側(cè)插入多個(gè)元素
     *
     * @param key
     * @param values
     * @return
     */
    public Long lPush(String key, List values) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                List bytes = stringListToByte(values);
                return connection.lPush(key.getBytes(), bytes.toArray(new byte[bytes.size()][bytes.size()]));
            }
        });
    }

    /**
     * 從list的左側(cè)取出一個(gè)元素
     *
     * @param key
     * @return
     */
    public String lPop(String key) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
                if (connection.lLen(key.getBytes()) > 0) {
                    return new String(connection.lPop(key.getBytes()));
                } else {
                    return EmptyString;
                }
            }
        });
    }

    /**
     * 向list的右側(cè)插入一個(gè)元素
     *
     * @param key
     * @param value
     * @return
     */
    public Long rPush(String key, String value) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                return connection.rPush(key.getBytes(), value.getBytes());
            }
        });
    }

    /**
     * list的rpush,從右側(cè)插入多個(gè)元素
     *
     * @param key
     * @param values
     * @return
     */
    public Long rPush(String key, List values) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                List bytes = stringListToByte(values);
                return connection.rPush(key.getBytes(), bytes.toArray(new byte[bytes.size()][bytes.size()]));
            }
        });
    }

    /**
     * 從list的右側(cè)取出一個(gè)元素
     *
     * @param key
     * @return
     */
    public String rPop(String key) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
                if (connection.lLen(key.getBytes()) > 0) {
                    return new String(connection.rPop(key.getBytes()));
                } else {
                    return EmptyString;
                }
            }
        });
    }

    /**
     * 給set中添加元素
     *
     * @param key
     * @param values
     * @return
     */
    public Long sadd(String key, List values) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                List bytes = stringListToByte(values);
                return connection.sAdd(key.getBytes(), bytes.toArray(new byte[bytes.size()][bytes.size()]));
            }
        });
    }

    /**
     * 獲取set中的所有元素
     *
     * @param key
     * @return
     */
    public List smembers(String key) {
        return jtRedis.execute(new RedisCallback>() {
            @Override
            public List doInRedis(RedisConnection connection) throws DataAccessException {
                return bytesListToString(connection.sMembers(key.getBytes()));
            }
        });
    }

    /**
     * set中是否包含某元素
     *
     * @param key
     * @param value
     * @return
     */
    public Boolean sIsMember(String key, String value) {
        return jtRedis.execute(new RedisCallback() {
            @Override
            public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
                return connection.sIsMember(key.getBytes(), value.getBytes());
            }
        });
    }

    private byte[][] change(List values) {
        byte[][] result = {};
        return result;
    }

    private List stringListToByte(List values) {
        return values
                .stream()
                .map(p -> p.getBytes())
                .collect(
                        Collectors.toList()
                );
    }

    private List bytesListToString(Collection values) {
        return values
                .stream()
                .map(p -> new String(p))
                .collect(
                        Collectors.toList()
                );
    }

    private Map bytesMapToString(Map values) {
        Map result = new HashMap<>();
        values.forEach((k, v) -> result.put(new String(k), new String(v)));
        return result;
    }

    private Map stringObjectMapToBytes(Map values) {
        Map result = new HashMap<>();
        values.forEach((k, v) -> result.put(k.getBytes(), String.valueOf(v).getBytes()));
        return result;
    }

    /**
     * 正則表達(dá)式獲取值
     *
     * @param pattern
     * @return
     */
    public Set keys(String pattern) {
        return jtRedis.keys(pattern);
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        RedisSerializer stringSerializer = new StringRedisSerializer();
        jtRedis.setKeySerializer(stringSerializer);
        jtRedis.setValueSerializer(stringSerializer);
        jtRedis.setHashKeySerializer(stringSerializer);
        jtRedis.setHashValueSerializer(stringSerializer);
    }
}
配置文件

配置文件主要有兩個(gè),一個(gè)是spirng相關(guān)配置的配置文件applicationContext-redis.xml,還有一個(gè)是redis相關(guān)配置文件redis-config.properties
applicationContext-redis.xml配置文件內(nèi)容如下:



        
    

    
    

    
    
        
        
        
    

    
    
        
        
        
        
        
    

    
        
    

redis-config.properties配置文件內(nèi)容如下:

#裝有redis數(shù)據(jù)庫的虛擬機(jī)中的一臺(tái)機(jī)器的ip
redis.host=127.0.0.1
redis.port=6379
redis.pass=
#默認(rèn)存儲(chǔ)在databse[0]數(shù)據(jù)庫, redis的database相當(dāng)于一個(gè)數(shù)據(jù),默認(rèn)也是0
redis.database=0
#maxIdle:最大空閑數(shù)
redis.maxIdle=300
#maxWait:最大等待時(shí)長(zhǎng),3秒
redis.maxWait=3000
#testOnBorrow:在提取一個(gè)jedis實(shí)例時(shí),是否提前進(jìn)行驗(yàn)證操作;如果為true,則得到的jedis實(shí)例均是可用的;
redis.testOnBorrow=true
結(jié)語
雖然代碼篇幅有點(diǎn)長(zhǎng),但是都是基于spring封裝之后的再次封裝,大家應(yīng)該都能理解。并且以上方法我都有測(cè)試過,親測(cè)可用,因?yàn)闇y(cè)試代碼也比較的簡(jiǎn)單,因此就不貼出來了。最后,歡迎大家補(bǔ)充、批評(píng)、指正。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/75182.html

相關(guān)文章

  • Java基礎(chǔ)知識(shí)整理操作Redis(三)

    摘要:如果鍵不存在,則執(zhí)行壓棧操作之前創(chuàng)建的空列表。聲明當(dāng)前類注教程的中文網(wǎng)官網(wǎng)附基礎(chǔ)知識(shí)整理之操作一基礎(chǔ)知識(shí)整理之操作二 Java操作Redis之操作數(shù)據(jù) 1.操作 String 1.1 源碼 public void stringOperator(){ //添加數(shù)據(jù) jedis.set(name, Wayfreem);// 添加一個(gè) key 為 n...

    fanux 評(píng)論0 收藏0
  • 面試中關(guān)于Redis的問題看這篇就夠了

    摘要:所以查閱官方文檔以及他人造好的輪子,總結(jié)了一些面試和學(xué)習(xí)中你必須掌握的問題。在微博應(yīng)用中,可以將一個(gè)用戶所有的關(guān)注人存在一個(gè)集合中,將其所有粉絲存在一個(gè)集合。 昨天寫了一篇自己搭建redis集群并在自己項(xiàng)目中使用的文章,今天早上看別人寫的面經(jīng)發(fā)現(xiàn)redis在面試中還是比較常問的(筆主主Java方向)。所以查閱官方文檔以及他人造好的輪子,總結(jié)了一些redis面試和學(xué)習(xí)中你必須掌握的問題。...

    yanbingyun1990 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<