redis操作1 对存储String的操作
redis默认使用6379端口,默认具有16个数据库,初始默认使用0号库
redis与memcached三个区别
(支持数据类型多)memcached:string redis:String List Set Hash Zset(有序集合)
(支持持久化)
(机制不同)memcached:多线程加锁(锁住票,挨个买票) redis:单线程+多路复用(买票人让黄牛代买票)
value中的String的数据结构为可修改字符串,内部实现类似java中的arraylist使用预分配冗余空间方式减少频繁分配内存
(先分配了固定的长度,
当字符串小于1M 扩容 加倍空间
大于1M 扩容 增加1M空间)(字符串最大长度512M)
进入redis数据库
redis-cli
切换数据库
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379>
查看当前数据库的key数量
dbsize
清空当前库
flushdb
清空所有库
flushall
放入一个key-value值(覆盖之前的)
set k1 mary
set k2 lucky
set k3 jack
放入且设置过期时间(覆盖之前的)(10秒)
setex k1 10 v1
设置新值同时返回旧值
getset k1 v2
放入多个key-value(覆盖之前的)
mset k1 v1 k2 v2 k3 v3
在不存在该key时才放入key(返回1设置成功,返回0已有该key)
setnx k1 mary
放入多个key-value 在不存在该key时才放入key(返回1设置成功,返回0已有该key)(原子性,当有部分失败了都不会成功)
msetnx k1 v1 k2 v2 k3 v3
给key设置过期时间(过期就删了)
expire k1 10(10秒)
查看还有多久过期 (-1永不过期,-2已过期)
ttl k1
获取key对应的value
get k1
获取多个key对应的value
mget k1 k2 k3
获取key对应的value的一部分(从下标0 到1 )
getrange k1 0 1
在指定下标后修改新的value(在下标1 后连同下标1修改为abc)返回长度
setrange k1 1 abc
修改前
127.0.0.1:6379> get k1
"abc"
修改后
127.0.0.1:6379> get k1
"aabc"
在key对应的value后添加String(abc) 返回添加后的字符长度
append k1 abc
获得key对应value的长度
strlen k1
redis的加减操作是原子操作,在运行时多线程中不会发生切换线程的操作
java中的自增减操作不是原子操作,两个线程将i=0值i++ 100次 会出现切换线程最终值不同 范围( 2~200)
在value值为数字时,自增+1数字(返回自增后的数字)
incr k1
在value值为数字时,自减-1数字(返回自减后的数字)
decr k1
在value值为数字时,增加数字(20)(返回增后的数字)
incrby k1 20
在value值为数字时,减少数字(20)(返回减后的数字)
decrby k1 20
查看所有key值( keys *1 *代表通配符匹配所有后面带有1的key)
keys *
判断是否存在key(返回integer 0为没有1为有)
exists k1
查看key为什么类型
type k1
删除key
del k1(直接删除)
unlink k1 (非阻塞删除,只从元数据中删除,真正的删除在之后的异步操作中)