Redis数据类型
key键
- keys * 查看当前库中所有的key 。
-
exists key 判断某个key是否存在。
可以设置多个key,只返回存在的个数,但不返回哪一个存在/不存在。
exists k1 查看k1是否存在,如果存在返回1 exists k1 k2 k3 查看k1 k2 k3是否存在,如果k1 k2存在,k3不存在,则返回2
-
move key db 将当前数据库的 key 移动到给定的数据库 db 当中。
move k1 8 将k1从当前数据库移动到8号库
-
type key 查看当前key 所储存的值的类型。
返回当前key所储存的值的类型,如string 、list等。
-
del key 删除已存在的key,不存在的 key 会被忽略。
可以设置多个key,返回删除成功的个数。
del k1 删除k1,如果成功返回1,失败返回0 del k1 k2 k3 删除k1 k2 k3,如果k1 k2存在,k3不存在,则返回2
-
expire key time 给key设置time秒的过期时间。
设置成功返回 1 。 当 key 不存在返回 0。
expire k1 10 给k1设置10秒后过期
-
ttl key 以秒为单位返回 key 的剩余过期时间。
当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间。
-
persist key 移除给定 key 的过期时间,使得 key 永不过期。
当过期时间移除成功时,返回 1 。 如果 key 不存在或 key 没有设置过期时间,返回 0 。
五大数据类型-String(字符串)
简介
- String是Redis最基本的类型,一个key对应一个value。
- String是二进制安全的,意味着String可以包含任何数据,比如序列化对象或者一张图片。
- String最多可以放512M的数据。
String底层数据结构
- String底层数据结构是简单动态字符串(simple dynamic string,SDS)。
- 类似于 Python 中的 List ,采用预分配方式来减少内存的频繁分配。
如图,内存实际大小一般都要高于字符串实际大小。当字符串长度小于1M时,扩容都是加倍现有的空
间,如果超过1M,扩容时每次只会多扩1M的空间。字符串最大长度为512M。
常用命令
-
set key value 用于设置给定 key 的值。如果 key 已经存储其他值, set 就重写旧值,且无视类型。
set k1 v1 向Redis中设置一个k1的键值对 set k1 100 将k1的值由v1重置为100
-
get key 用于获取指定 key 的值。如果 key 不存在,返回 nil 。
-
append key value 将给定的value追加到key原值末尾。
如果 key 已经存在并且是一个字符串, append 命令将 value 追加到 key 原来的值的末尾。
如果 key 不存在, append 就简单地将给定 key 设为 value ,就像执行 set key value 一样。append k2 v2 在Redis中不存在k1,所以直接设置k1的值为v2 append k1 v2 向k1的值末尾添加一个v2,最终结果为100v2
-
strlen key 获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。
-
setex key time value 给指定的 key 设置值及time 秒的过期时间。如果 key 已经存在, setex命令将会替换旧的值,并设置过期时间。
setex k1 10 v1 向Redis中设置一个k1的键值对并且10秒后过期
-
setnx key value当key不存在时,设置给定 key 的值。如果key存在,则没有任何影响。
setnx k1 v1 向Redis中设置一个k1的键值对 setnx k1 v2 Redis中存在k1,则没有影响,k1的值仍然为v1
-
incr key 将 key 中储存的数字值增一。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 incr 操作。
如字符串类型的值不能表示为数字、或者是其他类型,那么返回一个错误。incr k3 因为Redis中不存在k3,所以先初始化为0,再递增,值为1 incr k3 存在k3,递增后k3的值为2 incr k1 incr k2 因为k1,k2不为数值,Redis返回一个错误
-
decr key将 key 中储存的数字值减一。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 decr 操作。
如字符串类型的值不能表示为数字、或者是其他类型,那么返回一个错误。decr k4 因为Redis中不存在k4,所以先初始化为0,再递增,值为-1 decr k4 存在k4,递增后k1的值为-2 decr k2 因为k2不为数值,Redis返回一个错误
-
incrby/decrby key step 将key存储的数字值按照step进行增减。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 incrby/decrby 命令。
如字符串类型的值不能表示为数字、或者是其他类型,那么返回一个错误。 -
mset key1 value1 key2 value2 ……同时设置一个或多个 key-value 。
mset k1 v1 k2 v2 k3 v3 同时向Redis中设置了k1 k2 k3
-
mget key1 key2 ……返回所有(一个或多个)给定 key 的值。
如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。
mget k1 k2 k3 k4 k5 k6 同时获取k1 k2 k3 k4 k5 k6
-
msetnx key1 value1 key2 value2 ……用于所有给定 key 都不存在时,同时设置一个或多个key-value 。
msetnx具有原子性特性,有一个失败,则都失败。
msetnx k6 v6 k7 v7 向Redis中设置k6 k7两个键值对 msetnx k1 v6 k8 v8 Redis中存在k1,k1设置失败,由于原子性特性,k8也设置失败
-
getrange key start end用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由start 和 end 两个偏移量决定(包括 start 和 end 在内)。
set java helloworld 设置一个key为java,value为helloworld的值 getrange java 0 3 获取索引0-3的值,结果为hell
-
setrange key offset value用指定的字符串重写给定 key 所储存的字符串值,重写的位置从偏移量 offset 开始。
set java helloworld 设置一个key为java,value为helloworld的值 setrange java 5 baizhan 从偏移位置5(w)开始,用baizhan重写key