大小
- 默认有16个数据库
- 使用的是第0个
切换数据库
- select [n] n是几就切换到第几个
查看大小
- DBSIZE 仅仅查的是当前数据库大小
查看所有的key
- keys *
清空当前数据库
- flushdb
清空全部数据库
- flushall
6379默认端口号
哈哈哈哈
redis 单线程
- 操作很快
- 基于内存操作
- cpu不是redis性能瓶颈
- 机器内存和网络带宽才是
- 完全不必memcache差 每秒不低于10玩QPS
- 高效能不一定是多线程
- 单线程并不一定比多线程差
- cpu>内存>硬盘
- 多线程会产生CPU的上下文切换,耗时操作
- 没有上下文切换,则效率最高
- 读写都在一个CPU上,效率很高
作用
- 数据库
- 缓存
- 消息代理
redis key基本命令
- 新建key:set name [nnn]
- 查看所有的key:keys *
- 移除key:mv [nnn]
- 设置过期时间:expire name 10 设置10秒后过期
- 查看当前key的剩余时间:ttl name
- 判断当前key是否存在:exits name
- 追加key,如果key不存在则创建:append key ‘xxx’
- 查看当前key的类型:type name
5大基本数据类型
-
字符串String
- 值+1:incr views
- 值-1:decr views
- 查看用:get views
- 步长+1:incrby views 10
- 步长-1:decrby views 10
- 获取区间值[0-10]:getrange views 1 10
- 获取所有值:getrange views 1 -1
- 替换从指定位置开始的字符串串:setrange views 1 xxx
- 当前值存在与不存在:
- 设置过期时间
- setex key3 30 ‘hello’ 设置key3的值为hrllo,30秒后过期
- ttl key3
- 不存在设置(应用于分布式锁中)
- setnx mykey ‘redis’ 如果mykey不存在则设置,存在则创建失败
- keys *
-
mset k1 v1 k2 v2 k3 v3 同时设置多个值
-
mget k1 k2 k3 批量获取
-
msetnx k1 v2 k4 v4 如果某个key不存在,返回值为0。msetnx是一个原子性操作,要么一起成功要么一起失败。
-
对象
- set user:1{name:zhangsan.age:3}设置一个对象,值为json字符来保存一个对象
- 这里的key是一个巧妙的设计,user:{id}:{field}
- mset user:1:name zhangsan user:1:age 12
- mget user:1:name user:1:age2
-
getset db redis 如果不存在值,则返回nil
-
(nil)
-
get db
-
“redis”
-
getset db mongdb 如果存在值,获取原值,设置新值
-
“mongdb”
-
String类型的应用场景:
- 计数器
- 统计多单位的数量
- 粉丝数
- 对象缓存存储
-
列表List
-
基本数据类型
-
栈、队列、阻塞队列的应用
-
所有list命令都是以l开头
-
lpush list one
-
1
-
lpush list two
-
2
-
lpush list three
-
3
-
lrange list 0 -1
-
‘three’
-
‘two’
-
‘one’
-
rpush list right
-
4
-
lrange list 0 -1
-
‘three’
-
‘two’
-
‘one’
-
‘right’
-
lpop list 移除列表第一个元素
-
‘three’
-
rpop list 移除列表最后一个元素
-
‘right’
-
lrange list 0 -1
-
‘two’
-
‘one’
-
linex list 1 通过下标获得list中的某一个值
-
‘one’
-
llen list 返回列表的长度
-
移除指定的值(可以存在重复的值)精确匹配
-
lrem list 1 one 移除list中的一个one
-
lrem list 2 three 移除list中的两个three
-
保留其中一部分元素
-
ltrim list 1 2 只截取中间两个值,list已经被修改只剩下截取的数据
-
rpoplpush list list2 移除列表最后一个元素放到新列表中
-
lset list 0 item 将列表中的指定值更新为另一个值
-(error)ERR index no such key不存在则报错 -
linsert list before ‘eord’ ‘other’ 将某一个具体的value插入到指定值的前面或者后
-
linsert list after ‘hello’ ‘java’
-
实际上是一个链表,before Node after, left,right都可以插入值
-
如果key不存在则创建新的链表
-
如果key存在,则新增内容
-
如果移除了所有值,空链表也代表不存在
-
在两边插入或者改动值效率最高
-
操作中间元素,相对来说效率较低
-
消息队列!(Lpush Rpop),栈(LPUSH,LPOP)
-
集合 Set
- 值不能重复
- s开头的命令
- sadd myset “hello” set集合中添加元素
- smembers myset 查看指定set的所有值
- sismember myset hello 判断某个值是不是在set集合中 返回值为Integer(1或0)
- scard myset 获取set集合中的内容元素个数
- srem myset hello 移除set集合中指定元素
- srandmember myset set无序随机抽出一个元素
- srandmember myset 2 set无序随机抽出2个元素
- spop myset 移除随机的key
- smov myset myset2 ‘xiamuzi’ 将一个指定元素移动到另外的set
- sunion key1 key2 并集
- sdiff key1 key2 差集
- sinter key1 key2 交集
-
哈希hash
-
hset myhash field1 xiamuzi
-
(integer)1
-
hget myhash field1
-
“xiamuzi”
-
hmset myhash field1 xiamuzi1 field2 xiamuzi2
-
ok
-
hmget myhash field1 field2
-
hdel myhash field1 删除hash指定的key字段,对应的value也会消失
-
ngetall myhash 获取所有
-
hlen myhash hash长度
-
hexits myhash fields 判断指定字段是否存在
-
只获得对应的field
-
hkeys myhash
-
只获得对应的value
-
hvals myhash
-
hset myhash fields 5 指定增量
-
hincrby myhash fields 1 给fields+1
-
hincrby myhash fields -1 给fields-1
-
hsetnx myhash fields4 hello 如果不存在则设置;如果存在则不能设置,返回值是1或0
-
hash更适合对象的存储
-
-
zset
-
比hash多了排序
-
zadd myzset 1 one 添加一个值
-
zadd myzset 2 two 3 three 添加多个值
-
zrange myzset 0 -1 查询所有
-
zrangebyscore myzset -inf +inf 查询所有(分别为+inf正无穷和-inf负无穷)
-
zrangebyscore myzset 1 2 查询前两个
-
zrangebyscore myzset (1 2 查询大于第一个小于等于第二个
-
zrangebyscore myzset (1 (2 查询大于第一个小于第二个
-
127.0.0.1:6379> zadd myset 1 ‘one’
-
(integer) 1
-
127.0.0.1:6379> zadd myset 2 ‘two’
-
(integer) 1
-
127.0.0.1:6379> zadd myset 3 ‘three’
-
(integer) 1
-
127.0.0.1:6379> zrank myset ‘three’ 查询指定数据有几个
-
(integer) 2
-
127.0.0.1:6379> zrank myset ‘four’ 不存在
-
(nil)
-
移除
-
127.0.0.1:6379> zrange myset 0 -1
-
- “one”
-
- “two”
-
- “three”
-
127.0.0.1:6379> zrem mset "two’
-
Invalid argument(s)
-
127.0.0.1:6379> zrem mset “two”
-
(integer) 0
-
127.0.0.1:6379> zrem myset “two”
-
(integer) 1
-
127.0.0.1:6379> zrange myset 0 -1
-
- “one”
-
- “three”
https://redis.io/commands/
- “three”
-