NOSQL--Redis常用命令

Rdies数据结构及其数据类型

数据结构:

        整个Redis中所有数据以KV结构存在

  • K: 作为唯一标识符,固定为String类型,根据Key读取Value
  • V:真正存储数据,可以用多种类型
    • String、Hash、List、Set、Zset、Bitmap、HypeLogLog

数据类型: 

Key:StringValue类型应用场景
StringString一般用于存储单个数据 指标的结果
String

Hash

用于存储整个对象所有 属性值
StringList有序允许重复的集合, 每天获取最后一个值
StringSet无序且不重复的集合, 直接通过长度得到UV
String

Zset

有序不可重复的集合,统计TopN
StringBitMap将一个字符串构建位, 通过0和1来标记每一位
StringHypeLogLog类似于Set集合,底层实 现原理不一样,数据量大的情况下,性能会更好,结果可能存在一定的误差

通用命令

  • keys:列举当前数据库中所有Key         语法:keys 通配符
  • del key:删除某个KV
  • exists key :判断某个Key是否存在
  • type key:判断这个K对应的V的类型的
  • expire K 过期时间:设置某个K的过期时间,一旦到达过期时间,这个K会被自动删除
  • ttl K:查看某个K剩余的存活时间
  • select N:切换数据库的 Redis默认由16个数据:db0 ~ db15,个数可以通过配置文件修改,名称不能改 Redis是一层数据存储结构:所有KV直接存储在数据库中 默认进入db0
  • move key N:将某个Key移动到某个数据库中
  • flushdb:清空当前数据库的所有Key
  • flushall:清空所有数据库的所有Key

String类型命令

命令 语法

作用

setset K V给String类型的Value的进行赋值或者更新
getget K根据key读取String类型的Value的值
msetmset K1 V1 K2 V2 ……用于批量写多个String类型的KV
mgetmget K1 K2 K3 ……用于批量读取String类型的Value
setnxsetnx K V只能用于新增数据,当K不存在时可以进行新增
incrincr K用于对数值类型的字符串进行递增,递增1,一般用于做计数器
incrbyincrby K N指定对数值类型的字符串增长固定的步长
decrdecr K对数值类型的数据进行递减,递减1
decrbydecrby K N按照指定步长进行递减
incrbyfloatincrbyfloat K N基于浮点数递增
strlenstrlen K统计字符串的长度
getrangegetrange s2 start end用于截取字符串

Hash类型命令

命令 语法作用
hsethset K k v用于为某个K添加一个属性
hgethget K k用于获取某个K的某个属性的值
hmsethmset K k1 v1 k2 v2 ……批量的为某个K赋予新的属性
hmgethmget K k1 k2 k3……批量的获取某个K的多个属性的值
hgetallhgetall K获取所有属性的值
hdelhdel K k1 k2 ……删除某个属性
hlenhlen K统计K对应的Value总的属性的个数
hexistshexists K k判断这个K的V中是否包含这个属性
hvalshvals K获取所有属性的value的

list类型常用命令

命令 语法作用
lpushlpush K e1 e2 e3……将每个元素放到集合的左边,左序放入
rpushrpush K e1 e2 e3……将每个元素放到集合的右边,右序放入
lrange

lrange K start end

lrange K 0 -1:所有元素

通过下标的范围来获取元素的数据
llenllen K统计集合的长度
lpoplpop K删除左边的一个元素
rpoprpop K删除右边的一个元素

Set类型的常用命令(无序不重复)

命令 语法作用
saddsadd K e1 e2 e3 e4 e5……用于添加元素到Set集合中
smemberssmembers K用于查看Set集合的所有成员
sismembersismember K e1判断是否包含这个成员
sremsrem K e删除其中某个元素
scardscard K统计集合长度
sunionsunion K1 K2取两个集合的并集
sintersinter K1 K2取两个集合的交集

Zset类型的常用命令

命令 语法作用
zaddzadd K score1 k1 score2 k2 ……用于添加元素到Zset集合中
zrangezrange K start end [withscores]范围查询
zrevrangezrevrange K start end [withscores]倒序查询
zremzrem K k1移除一个元素
zcardzcard K统计集合长度
zscorezscore K k获取评分

Redis中不建议存储小数值,存在精度问题,建议转换为整形存储

HyperLogLog类型的常用命令

命令 语法作用
pfaddpfadd K e1 e2 e3……用于添加元素
pfcountpfcount K用于统计个数
pfmergepfmerge pfrs pf1 pf2……用于实现集合合并

功能:类似于Set集合,用于实现数据的去重

  • 区别:底层实现原理不一样

  • 应用:适合于数据量比较庞大的情况下的使用,存在一定的误差率

BitMap类型的常用命令

命令 语法作用
setbitsetbit bit1 位置 0/1修改某一位的值
getbitgetbit K 位置查看某一位的值
bitcount

bitcount K [start end]    start和

end表示的是字节:1 字节 = 8 位

用于统计位图中所有1的个数
bitopbitop and/or/xor/not bitrs bit1 bit2用于位图的运算:and/or/not

  • 功能:通过一个String对象的存储空间,来构建位图,用每一位0和1来表示状态

    • Redis中一个String最大支持512M = 2^32次方,1字节 = 8位

    • 使用时,可以指定每一位对应的值,要么为0,要么为1,默认全部为0

    • 用下标来标记每一位,第一个位的下标为0

  • 举例:统计UV

    • 一个位图中包含很多位,可以用每一个位表示一个用户id

    • 读取数据,发现一个用户id,就将这个用户id对应的那一位改为1

    • 统计整个位图中所有1的个数,就得到了UV

使用测试代码(使用jedis)

package jedis;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;


public class Demo02 {
    //单节点连接对象:Jedis
    Jedis jedis = null;
    //创建分片集群连接对象
    JedisCluster jedisCluster = null;

    //创建连接池 
    @Before
    public void getConnection() {
        //构建连接池配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(10);//最大连接数
        //创建连接池对象
        JedisPool jedisPool = new JedisPool(config, "node1", 6379);
        //从子池中获取连接对象
        jedis = jedisPool.getResource();
    }

    //创建测试
    @Test
    public void test() {
        //使用上面的命令即可
        jedis.hset("m1", "name", "zhangsan");
        System.out.println(jedis.hget("m1", "name"));
    }

    @After
    public void closeCollection() {
        jedis.close();
    }
}

依赖 

    <properties>
        <jedis.version>3.2.0</jedis.version>
    </properties>

    <dependencies>
        <!-- Jedis 依赖 -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>${jedis.version}</version>
        </dependency>
        <!-- JUnit 4 依赖 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值