Redis----操作

Redis介绍

  • 默认16个数据库,类似数组下标从0开始,初始默认使用0号库

  • 使用命令select < dbid> 来切换库,如select 1
    在这里插入图片描述

  • 统一密码管理,所有库具有同样的密码

  • dbsize查看当前数据库的key的数量

  • flushdb清空当前库

  • flushall通杀全部库
    Redis使用单线程+多路IO复用技术

常用的五大数据类型

Redis的key的操作

  • keys :查看当前所有库的key(匹配:keys1)
  • exists key :判断某个key是否存在
  • type key:查看你的key是什么类型
  • del key:删除指定的key数据
  • unlink key:根据value选择非阻塞删除(仅将keys从keyspace元数据中删除,真正删除会在后续的异步操作)
  • expire key 10:10秒钟:为给定的key设置过期时间
  • ttl key:查看还有多少秒过期,-1表示永不过期,-2表示已过期
  • select:用于切换数据库
  • dbsize用于查看当前数据库的key的数量
  • flushdb:清空当前库(慎用)
  • flushall:通杀全部库(慎用)

Redis字符串String

简介

String是Redis中最基本的数据类型,是一个key对应一个value
String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化对象
String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M

数据结构

String的数据结构是简单动态字符串(Simple Dynamic String,缩写SDS)。是可以修改的字符串,采用预编译冗余空间的方式来减少内存的频繁分配。
在这里插入图片描述
内存为当前字符串实际分配的空间capacity一般来说要高于实际字符串的长度len。当字符串的长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容一次只会多扩1M的空间。字符串的最大长度是512M。

常用命令

  • set命令:set key value 向数据库中添加key和value,设置相同的key会将之前的value内容覆盖掉
  • get命令:get key 获取数据库中key对应的value值
  • append命令:append key xxx 会在key的value的末尾追加xxx内容
  • strlen命令:strlen key 得到该key对应的value的长度
  • setnx命令:setnx key value 只有当key不存在的时候才会设置成功
  • incr命令:incr key 将key存储的数字值增1,只能对数字值操作,如果数字值为空,新增值为1(原子操作)
  • decr命令:decr key 将key中存储的数字值减1
  • incrby / decrby命令:incrby / decrby key 步长:将key中存储的数字值自增减。自定义步长。
    原子操作:指的是不会被线程调度机制打断的操作
    这种操作一旦执行就会一直运行到执行结束,中间不会有任何切换到另一个线程的操作
    (1) 在单线程中,能够在单条指令完成的操作都可以认为是“原子操作”,因为中断只能发生于指令之间
    (2)在多线程中,不能被其他进程(线程)打断的操作就叫原子操作
  • mset命令:mset key1 value1 key2 value2....可以同时设置一个或者多个键值对
  • mget命令:mget key1 key2 key3可以同时取一个或者多个key的value值
  • msetnx命令:msetnx key1 value1 key2 value2.....同时设置一个或者多个key-value对,当且仅当所有给定的key都不存在。这是一个原子性操作,如果一个key value设置失败,则所有的都设置失败。
  • getrange命令:getrange key 起始位置 结束位置 获取key对应的值的范围,类似于java的substring。
  • setrange命令:setrange key 起始位置 value 从起始位置开始用value覆写key所存储的字符串值
  • setex命令:setex key 过期时间 value 设置键值的同时,设置过期时间,单位秒
  • getset命令:getset key value 以旧换新,设置新值同时获得旧值,当次返回的是旧值,之后value中存放的是新值

Redis列表List

简介

单键多值

Redis列表是简单的字符串列表,按照插入顺序排序。它的底层是一个双向链表,对两端的操作性能很高,但是通过索引获取中间值的性能比较差。

数据结构

List的数据结构为快速链表quickList
首先在列表元素比较少的情况下会使用一块连续的内存存储,这个内存结构是ziplist(压缩列表)。它将所有的元素紧挨在一起存储,分配的是一块连续的内存。当数据量比较多的情况下才会改为quickList。将多个压缩列表(ziplist)使用quickList连接起来,它是使用双向指针
在这里插入图片描述

常用命令

  • lpush/rpush命令:lpush/rpush key1 value1 key2 value2.....可以从从左边/右边插入一个或多个值。从左边放 v3 v2 v1,从右边放v1 v2 v3
  • lpop/rpop命令:lpop/rpop key 从左边或者右边取出一个值,如果值全部取完则键也销毁。
  • rpoplpush命令:rpoplpush key1 key2从key1列表的右边吐出一个值,插入到key2列表的左边
  • lrange命令:lrange key start stop 按照索引下标从左到右。0左边第一个元素,-1右边第一个元素,(0 -1表示取所有元素)
  • lindex命令:lindex key index按照索引下标获取元素(从左到右)
  • llen命令:llen key获得列表长度
  • linsert命令:linsert key before/after value newvalue在value的前面或者后面插入newvalue插入值。
  • lrem命令:lrem key n value从左边删除n个value(从左到右)
  • lset命令:lset key index value将列表key下标为index的值替换成value

Redis列表Set

简介

Set与List类似是一个列表功能不同的是Set可以自动重排。当需要存储一个列表并且不希望出现重复数据的时候,就可以选取set列表进行存储。Redis中的Set是string类型的无序集合,它的底层是一个value为null的hash表,它的添加删除查找的时间复杂度都是O(1).

数据结构

Set的底层结构是dict字典,字典使用哈希表实现的,所有value都指向同一个内部值。

常用命令

  • sadd命令:sadd key value1 value2.....将一个或者多个member元素加入到集合中,已经存在的member元素将被忽略
  • smembers命令:smembers key取出这个key的所有值
  • sismember命令:sismember key value判断集合key是否有该value值,有为1,没有为0
  • scard命令:scard key返回该集合的元素个数
  • srem命令:srem key value1 value2....删除集合中的某个元素
  • spop命令:spop key随机从该集合中吐出一个值
  • srandmember命令:srandmember key n随机从该集合中取出n个值。不会从集合中删除。
  • smove命令:smove source destination value把集合中的一个值从一个集合移动到另一个集合
  • sinter命令:sinter key1 key2 返回两个集合的交集元素
  • sunion命令:sunion key1 key2返回两个元素并集元素
  • sdiff命令:sdiff key1 key2返回两个元素交集元素

Redis哈希(Hash)

简介

Redis hash是一个键值对的集合,值是一个string类型的field和value的映射表,比较适合用来存储对象。类似于java中的Map<String,Object>
在这里插入图片描述

数据结构

Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。当field-value长度比较短且个数比较少时,使用ziplist,否则使用hashtable。

常用命令

  • hset命令:hset key field value给key集合中的field键赋值value
  • hget命令:hget key1 field从key1集合field取出value
  • hmset命令:hmset key1 field1 value1 field2 value2....批量设置hash的值
  • hexists命令:hexists key1 field查看哈希表key中,给定域field是否存在
  • hkeys命令:hkeys key列出该hash集合的所有field
  • hvals命令:hvals key列出该hash集合所有value
  • hincrby命令:hincrby key field increment为哈希表key中的域field的值加上增量 1 -1
  • hsetnx命令:hsetnx key field value将哈希表key中的域field的值设置为value,当且仅当域field不存在

Redis有序集合(Zset)

简介

Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。有序集合的每一个成员都关联了一个评分(score),这个评分被用来按照最低分到最高分的方式排序集合中的成员。集合中的成员是唯一的但是评分是可以重复的

数据结构

zset底层使用了两个数据结构
(1) hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值
(2)跳表,跳表的目的在于给元素value排序,根据score的范围获取元列表

常用命令

  • zadd命令:zadd key score1 value1 score2 value2将一个或者多个member元素及其score值加入到有序集key当中。
  • zrange命令:zrange key start stop [WITHSCORES]返回有序集key中,下标在start stop之间的元素。带WITHSCORES,可以让分数一起和值返回到结果集。
  • zrangebyscore命令:zrangebyscore key minmax [withscores][limit offset count]返回有序集key中,所有score值介于min和max之间(包括等于min和max)的成员。有序集成员按score值递增(从小到大)次序排列
  • zrevrangebyscore命令:zrevrangebyscore key maxmin [withscores][limit offset count]返回有序集key中,所有score值介于max和min之间(包括等于min和max)的成员。有序集成员按score值递减(从大到小)次序排列
  • zincrby命令:zincrby key increment value为key中value元素的score加上increment大小的增量
  • zrem命令:zrem key value删除该集合下指定值的元素
  • zcount命令:zcount key min max统计该集合,分数区间内的元素个数
  • zrank命令:zrank key value返回该值在集合中的排名,从0开始
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值