redis基本操作
什么是redis
redis是一个高性能的key-value存储的NoSQL数据存储系统。
为什么是nosql——大数据下需要更好的性能
补充:
1、一共有15个数据库,select 1; 默认是0号库
2、单线程多路IO复用
3、与memchche的区别:支持多数据类型,支持持久化,单线程多路IO复用
基本命令
【数据库操作】
1、选择数据库【0-15】
selectc 16
2、查看key的数量
bdsize
3、云服务器打开客户端
redis-cli
4、查看是否含有key
keys *
5、清空当前库,清空所有库
flushdb
flushall
【常规操作】
1、添加key
set key value
2、查看key是否存在
exists key
3、删除key
del key
unlink key
4、设置过期时间为10s「-1表示用不过期,-2表示已过期」
expire key 10
查看还有多少秒过期
ttl key
5、获取key
get key
5种数据类型
字符串
【String:底层的数据结构是一个简单动态字符串,实现有一点类似Java中的ArrayList】
1、追加 「如果是3,表示添加成功;如果是6,表示追加成功」
append key value
2、获得该key的value长度
strlen key
3、只有key不存在时,才设置key的值「1表示设置成功,0表示失败(已经存在该key)」
setnx key 123
4、加减1
incr key
decr key
5、加减10
incrby key 10
decrby key 10
6、设置、得到多个
mset
mget
msetnx
7、获取范围的值「包含前后的值,如0 3 ,则表示0 1 2 3位置的值」
getrange <key> <起始位置> <结束位置>
8、设置某位置的值
setrange <key> <起始位置> <结束位置>
9、添加key,直接设置过期时间
setex <key> <过期时间> <value>
10、查看旧值的同时,更新值,以新换旧
getset <key> <value>
列表
【list】「底层原理是双向链表」
1、添加「lpush是逆序,rpush是添加时的顺序」
lpush <key> v2 v3 v4
rpush <key> v2 v3 v4
2、获取所有值
lrange <key> 0 -1
3、获取最左边|最右边的值 「会删除该元素」「值在key在,值光key无」
lpop <key>
rpop <key>
4、从key1右边吐出一个值,插到key2列表的左边
rpoplpush <key1> <key2>
5、获取列表的长度
llen <key>
6、指定位置插入「会在找到的第一个元素后面插入」
linsert <key> before <value> <newValue>
linsert <key> after <value> <newValue>
7、删除指定个数的某元素 「从走往右,删除两个v2元素」
lrem <key> 2 v2
8、替换,将列表key下标为index的值替换成value
lset <key> <index> <value>
集合
【Set】「底层结构是value=null的哈希表,添加删除的复杂度都是O(-1)」
1、添加
sadd <key> <value1> <value2> <value3>
2、取值
smembers <key>
3、判断集合中是否含有 <value>,有1,无0
sismember <key> <value>
4、集合大小
scard <key>
5、删除集合中某个元素
srem <key> <value1> <value2> …
6、随机从该集合中吐出一个值,会删除
spop <key>
7、随机从该集合中取出n个值,不会删除
srandmember <key> <n>
8、把value从set1中移到set2中
smove <key1> <key2> <value>
9、返回两个集合的交集元素
sinter <key1> <key2>
10、返回两个集合的并集元素
sunion <key1> <key2>
11、返回两个集合的差集元素(key1中有的元素,key2中没有的)
sdiff <key1> <key2>
哈希
有序集合
【hash】【底层结构是压缩列表+哈希表,适合储存对象】
1、添加
zadd <key> <score> <value>
zadd lang 200 java 100 python
2、获取全部
zrange <key> 0 -1
zrange lang 0 -1
zrange lang 0 -1 withscores
3、获取区间中的元素
zrangebyscore <key> 100 200
逆序区间
zrevrangebyscore lang 200 100
4、增加score
zincrby <key> <increment> <value>
zincrby lang 100 java
5、区间内的元素个数
zcount <key> <min> <max>
zcount lang 1 500
6、得到排名(从0开始)
zrank <key> <value>
zrank lang java
7、删除该集合下,指定值的元素
zrem <key> <value>