ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

原来这就是Redis啊!

2021-02-27 19:01:23  阅读:217  来源: 互联网

标签:java name 元素 Redis books Jedis jedis 原来 就是


一.命令

String

set name xiaoming
get name
exprie name 5 #5秒过期
setex name 5 xiaohong 
setnx name #不存在时设置

set age 10
incr age #对于数字可以增加1
incrby age 10 

#批量操作
mset name xiaoming age 10
mget name age

List

左右添加、左右删除
lpush books java python c++
lpop books
rpush c
rpop books
lindex books 1 #获取下标为1的元素(下标从0开始)
lindex books -1 #获取倒数第一个元素
注意下标从右往左计数。另外没有rindex命令。
lrange books 0 -1 #获取0到倒数第一个元素,即全部元素
ltrim books 1 -1 #保留下标1到最后一个元素,删除其它元素。即删除第一个元素
ltrim books -1 -1 #保留最后一个元素
ltrim books 2 3 #保留下标2到下标3的元素

底层结构:quicklist,用双向指针连接的zipList

Hash

hset nums one 1 #添加值
hget nums one    #获取值
hgetall nums       #获取所有键值对
hmset nums two 2 three 3 #批量添加
hmget nums one two #批量获取
hincrby nums one 1 #对value为int的键值对进行加法操作

底层结构:数组+链表

SET

sadd books python #添加元素
smembers books #列出所有元素
sismember books java #判断元素是否存在
scard books #列出set中元素个数
spop books #弹出一个元素。弹出规则?

底层结构:基于Hash,value设置为null

ZSET

是Redis独有的数据结构。一方面它是一个set,保证了内部value的唯一性。另一方面它可以给每一个value赋一个score,代表这个value的排序权重。按score从小到大排序。

#添加元素时要带着一个权重值
zadd books 9.0 "think in java"
zadd books 8.9 "java concurrency"
zadd books 8.6 "java cookbook"

zrange books 0 -1 #按score从小到大排序列出
zrevrange books 0 -1 #按score逆序排列
zcard books #获取元素个数
zscore books "think in java" #获取元素的score
zrank books "think in java"  #获取位次,从0开始,低到高排序
zrangebyscore books 0 8.91 #获取分值区间内的元素
zrangebyscore books -inf 8.91 withscore #-inf表示负无穷,withscore表示列出分数
zrem books "java concurrency" #删除value

底层结构:跳表

通用规则

对于list、hash、set、zset四种容器类型,有两个通用规则:
(1)create if not exists
(2)drop if no elements

过期时间

所有类型的元素都可以使用expire设置过期时间,只能对数据整体设置,例如不能对hash中的某个key单独设置过期时间。

删除命令

所有类型都可以用del进行删除

二.使用Jedis操作Redis

引入依赖:

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.5.1</version>
        </dependency>

连接Redis

    /**
     * 连接Redis
     * */
    public static Jedis connectJedis() {
        Jedis jedis = new Jedis("localhost");
        return jedis;
    }

执行命令
通过Jedis对象执行命令

//Jedis中的方法和Redis命令基本是一一对应的
Jedis jedis = ConnectRedis.connectJedis();
jedis.set("name","xiaoming");
jedis.get("name");
jedis.hmset(key,hashmap);

思考:存储结构体信息改用hash还是string?
根据使用场景决定,原则是尽可能地减少查询次数。
每次使用是只使用其中的某个字段呢(hash)?还是需要全部字段呢(String)?
Hash不需要进行序列化、反序列化,是否可以承受这部分的性能损失?

标签:java,name,元素,Redis,books,Jedis,jedis,原来,就是
来源: https://blog.csdn.net/vxzhg/article/details/114168362

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有