数据类型
一个key对应一个value value字符串小于1M加倍扩容 大于1M时,加1M
二进制安全,可包含任何数据,jpg图片或序列对象
一个redis字符串value最多可以是512M
set k1 v100
get k1 得到k1的值 v100
set k1 v1100 会覆盖v100的值
append k1 abc 拼接v100 返回k1的长度
strlen k1 查看k1的长度
setnx 只有key只有不存在才能设置key 错误返回0 成功返回ok
incr k1 值加一 返回值
decr k1 值减一
incrby k4 10 k4的值加10
decrby k4 5 k4的值减5
原子操作:不会被线程调度机制打断的操作 一旦开始,它就会运行到结束,没有任何东西context switch(切换到另一个线程)
在单线程中,可以在单个指令中完成的操作可以视为原子操作
java中的i 非原子操作
题目:i=二线程进行 i 100次,值是2-200
i 取值 -----> -----> 赋值
mset k1 v1 k2 v2 k3 v3 设置多个key-value
mget k1 k2 k3 得到多个key的值
msetnx k11 v11 k12 v12 如果有一个key如果存在,功,返回0,成功返回1(原子性)
getrange name 0 3 拿到value中0-3的值 获取范围值
setrange name 3 abc 在第三位设置值 原本为aqyayyaya 设置后为aqyabcaya
setex age 20 value30 设置键值时间 setex 《key》 时间 《vakue》
getset name java 用新值换旧值 返回原始值
List
单键多值 是字符串列表,按插入顺序排序,底层为双向列表,两端操作性能高 找中间性能差
数据结构为quickList(由多个压缩链表组成)
redis将链表和ziplist组合在一起quickList,就是将多个zipList使用双向指针串,既满足插入删除功能,又避免过多冗余
name Jack lusy aqya
常用命令
lpush k1 v1 v2 v3 从左边加
lrange k1 0 -1 查看所有值 得出结果为 v3 v2 v1
rpush k2 v1 v2 v3 从右边加
lpop k1 得到v3
rpop k1 得到v1 从左侧或右侧吐出值 吐出后消失
rpoplpush 《k1》 《k2》 从k1列表右侧的吐出值插入k2列表左边
lindex k1 0 根据索引查值
llen k1 获取列表长度
linsert key after/before value1 value 在value前后插入值 linsert k2 after "v22" "v22after"
lrem key n value 从左边删除n个value(从左到右)
lset key index value 将列表key下标为index的值替换成value
集合Set
类似于List,自动排重,不能重复,无序,底层是value为null的 hash时间复杂度为O(n)
内部使用hash,所有的value都指向相同的内部值
sadd k1 v1 v2 v3 添加值
smembers k1 取出k1 的值
sismember k1 v1 是否存在v1 返回值为1 不存在返回0
scard k1 k1元素的个数
srem k1 v1 v2 删除集合的元素 删除v1 v2
spop k1 随机吐出一个value
srandmember k2 n 随机取n个值(不删)
smove k1 k2 v3 将k1中的v3移入k2
sinter k2 k3 找两个集合交集
sunion k2 k3 找两集并集
sdiff k2 k3 找两个集合差集 查找k2里面没有k3.
hash
键值对集合
对应的是zipList(压缩列表) hashtable(哈希表) 当field-value短时间使用长度ziplist 否则使用hashtable
value是映射表 存储对象时
常用命令
hset user id 1 设置user的id为1
hset user name zhangsan 设置user的name为zhangsan
hget user id 得到user的id
hget user name 得到user的name
hmset user:102 id 1 name lisi age 30 写多个数据
hexists user:102 id 在user:102是否存在id 存在返回1 不存在返回0
hkeys user:102 查出所有field
hvals user:102 查出所有value
hincrby user:102 age 3 将age的值加3
hsetnx user:102 gender 1 加入不存在field的值
Zset
有序集合