目录
相关知识
redis安装
Linux下安装Redis_浅末年华的博客-CSDN博客_linux redis安装
redis启用和停止
Redis的启动、使用和停止_小蜗牛的博客-CSDN博客_redis停止命令
1.redis是单线程+多路复用
2.redis默认16个数据库
可以用select选择数据库,统一密码管理,所有的库同样的密码
常用五大数据类型数据类型
常用key命令
key *:查看当前库的所有key
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set key1 lizude
OK
127.0.0.1:6379> set key2 wufei
OK
127.0.0.1:6379> set key3 liu
OK
127.0.0.1:6379> keys *
1) "key2"
2) "key3"
3) "key1"
127.0.0.1:6379>
exist key:判断某个key是否存在
127.0.0.1:6379> exists key1
(integer) 1
127.0.0.1:6379>
type key:判断你的key是什么类型
del key:删除指定key数据
unlink key:根据value选择非阻塞删除,仅仅将keys从keyspace元数据中删除,真正的删除在后续的异步操作
expire key 10:给key设置过期时间,10相当于10秒
ttl key查看还有多少秒过期,-1永不过期,-2已过期
select 命令切换数据库
dbsize 查看当前数据库的key的数量
flushdb 清空当前库
flushall 杀死全部库
redis字符串
简介
string是redis最基本的数据类型,一个key,一个value。
String类型是二进制安全的,意味着redis String可以包含任何数据。比如jpg图片或者序列化对象
String类型是redis最基本数据类型,value值最多是512M
常用命令
set <key> <value>:添加键值对,如果已经key已经存在,再次set就会覆盖之前的value
get <key> :查询对应键值
append <key> <value>添加value在key值所对应的value值的后面添加value
strlen<key> 获得的长度
setnx <key> <value>只有key不存在时候,设置key值。存在将不设置
incr<key> 将key中存储的数字增加1,只能对数字进行操作,如果为空,新增值为1
decr<key>将key中存储的数字减1,只能对数字进行操作,如果为空,新增为-1
incrby/decrby <key> <步长>将key中存储的数字增减。自定义步长,key
原子性
所谓原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直到运行结束,中间不会有任何线程打断。
redis的原子性得益于他的原子性
mset <key> <value> <key2> <value2> :设置一个或者多个键值对
mget <key> <key1> <key2> <key3> : 同时获得一个或者多个value
msetnx <key> <value> <key2> <value2> 同时设置一个或者多个key-value,但是只有所有的key都是不存在的时候才能成功,否则将失败,有一个存在将不能成功
getrange <key> <数字(起始位置)> <数字(结束位置)>:获得key对应的value的指定位置的字符。
127.0.0.1:6379> getrange k1 0 1
"v1"
setex设置键值的时候设置过期时间 setex <key> <time> <value>
127.0.0.1:6379> setex k22 20 value2
OK
127.0.0.1:6379> k22 ttl
(error) ERR unknown command `k22`, with args beginning with: `ttl`,
127.0.0.1:6379> ttl k22
(integer) 7
127.0.0.1:6379> ttl k22
(integer) 4
127.0.0.1:6379> ttl k22
(integer) 2
127.0.0.1:6379> ttl k22
(integer) 0
127.0.0.1:6379> ttl k22
(integer) -2
127.0.0.1:6379>
getset <key> <value>以旧换新,设置新值的同时获得旧值
底层数据结构
String数据结构类型为简单动态字符串(SDS)。是可以修改的字符串,类似于java中的arrayList,采取预分配余空间的方式来减少内存的频繁分配。
一般来说内部当前字符串的实际分配内存空间capatity,要比实际字符串长度len要长。当字符串的长度小于1M,扩容加倍现有空间。当字符串的大小大于1M,扩容时候一次只会扩容1M空间,需要注意字符串的value最大空间为512M。
redis列表(List)
简介
单键多值
对两端操作性能很高,但是对中间节点操作的性能不高。value值以链表的形式存放
常用命令
lpush/rpush <key> <value1><value2><value3> 从左边或者右边插入一个或者多个值,
左边是相当于链表头插法,右边相当于链表的尾插法
lpop/rpop <key>从左边/右边吐出一个值。value值在键在,value值光键亡
lrange <key> <起始位置> <结束位置> 索引value获得元素
lrange <key> 0 -1代表所有的value
127.0.0.1:6379> lpush k1 v1 v2 v3
(integer) 3
127.0.0.1:6379> get k1
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> lrang k1 0 -1
(error) ERR unknown command `lrang`, with args beginning with: `k1`, `0`, `-1`,
127.0.0.1:6379> lrange k1 0 -1
1) "v3"
2) "v2"
3) "v1"
127.0.0.1:6379> rpush k2 v1 v2 v3
(integer) 3
127.0.0.1:6379> lrange k2 0 -1
1) "v1"
2) "v2"
3) "v3"
rpoplpush <key1> <key2> 从右边key1弹出一个value,插入key2到左边
127.0.0.1:6379> rpush k1 1 2 3
(integer) 3
127.0.0.1:6379> rpush k2 1 2 3
(integer) 3
127.0.0.1:6379> lpoplpush k1 k2
(error) ERR unknown command `lpoplpush`, with args beginning with: `k1`, `k2`,
127.0.0.1:6379> rpoplpush k1 k2
"3"
127.0.0.1:6379> lrange k1 0 -1
1) "1"
2) "2"
127.0.0.1:6379> lrange k2 0 -1
1) "3"
2) "1"
3) "2"
4) "3"
127.0.0.1:6379>
lindex <key> <index>按照索引下标获得元素,
127.