通过linux命令行操作redis数据库
1 docker exec -i -t 容器id /bin/bash
2 redis-cli
3 操作前缀变为127.0.0.1:6379>即进入redis数据库
常用redis命令:
清除当前数据库: flushdb
清除全部数据库内容: flushall
切换数据库: select 数据库序号 select 3切换到3号数据库
查看DB大小: DBSIZE
查看数据库所有key: keys *
插入key: set name zs zs==>value
查询内容是否存在: EXISTS name
移动key: move name 1 name===>key 1==>移动目标数据库
移除内容: del name
过期时间: EXPIRE name time(s) ----可通过ttl name查看剩余销毁时间
查看key类型: type name
linux自动补全快捷键:TAB,后期可通过自动补全查看相关内容
遇到不会的命令查看官网帮助文档 http://www.redis.cn/commands.html
Redis可用作数据库、缓存和消息中间件MQ
Redis类型使用操作:
1、 String(字符串)
字符串长度: strlen key
追加字符串:append key value
对数据+1操作:incr key
对数据-1操作 :decr key
对数据+n操作:incrby key n
对数据-n操作:decrby key n
字符串start-end区间内容:getrange key start end ==>查看所有字符串 getrange key 0 -1
替换区间内容:setrange key start value
设置过期时间:setex key seconds value
设置过期时间(不存在再设置):setnx key value ===>设置失败返回0,成功返回1(常用于分布式锁)
批量获取批量存入
mset key value [key value ...]
==>mset k1 v1 k2 v2 k3 v3
mget key ...
==>mget k1 k2 k3
msetnx:是原子性操作,一起成功/一起失败
对象
set user:1 {name:zs,age:3} 设置一个user:1对象 值为json保存
也可以 mset user:1:name zs user:1:age 2 user:{id}:{field} ==>id可实现复用
getset ==>先get再set
127.0.0.1:6379> getset db redis 不存在值返回nil
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db 123 存在值返回原始值并设置新值
"redis"
127.0.0.1:6379> get db
"123"
2、List
lpush list one 将一个值或者多个值,插入到列表头部(左)
lrange list 0 -1 查询列表所有值
rpush list right 将一个值或者多个值,插入到列表尾部(右)
Lpop list 移除list的第一个元素
Rpop list 移除list的最后一个元素
lindex list 1 通过下标获得list中的某一个值! 应用:阻塞队列
Llen list 返回列表长度
lrem list 1 one 移除list集合种指定个数的value,精确匹配
lrem list count one 移除list中count个one,count超过one总数将会删除所有one
ltrim list 1 2 通过下标截取指定的长度,这个list已经被改变了,只剩下未截取内容!
rpoplpush list otherlist || rpoplpush list list
移除列表的最后一个元素,并移动到新的列表otherlist中,可以移动到同一个list中
lset list 0 aa 将列表中指定下标的值替换为另外-一个值,更新操作;列表值不存在更新会报错
**linsert**
rpush list "world"
linsert list before "world" "aaa"====>字符串一定要一样才能定位
将某个具体的value插入到列中某个元素的前面或者后面
本质上是个链表,两边插入、改动值效率最高。可用于消息排队,消息队列(Lpush Rpop),
栈(Lpush Lpop)
3、Set
set中的值不能重复!!
sadd set 1 往set里添加元素
smembers set 查看指定set的所有值
sismember set 1 判断某个值在不在set集合中
scard set 获取set集合中内容元素个数
srem set 1 移除set集合中指定元素
srandmember set 随机抽取元素
srandmember set 1 随机抽取指定个数的元素
spop set 随机删除set中的元素
somove set set1 ”1“ 将一个指定的值移动到另一个set集合中
sdiff key1 key2 差集
sinter key1 key2 交集
sunion key1 key2 并集
=====》应用于关注共同用户,共同爱好,推荐好友
4、Hash
本质和string类型没有大区别,还是key-value
hash适合对象的存储
hset hash field zs 设置一个具体的key-value
hget hash field 查询一个具体的key-value
hmset hash f1 aa f2 bb 设置多个具体的key-value,该情况下如果已经存在f1会覆盖f1内容
hmget hash f1 f2 查询多个具体的key-value
hgetall hash 获取全部数据
hkeys hash 获取所有的key字段
hvals hash 获取所有的value值
hdel hash field 删除hash指定key字段
hlen hash 获取hash表的字段数量
hexists hash field 判断hash中key字段存在与否
hincrby hash field 1 自增
hincrby hash field -1 自减
hsetnx hash f4 hello 如果不存在则可以设置,存在不能设置==>分布式锁
5、Zset(有序集合)
zadd zset 1 one 增加值
zadd salart 2500 a 添加数据
ZRANGEBYSCORE salart -inf +inf 从小到大排序,显示所有用户(inf无穷)
zrevrange salart 0 -1 从大到小排序
ZRANGEBYSCORE salart +inf -inf ===> (empty array)
ZRANGEBYSCORE salart -inf +inf withscores 附带数据内容的返回
1) "a" 2) "2500"
zrem salart a 移除有序集合中的指定元素
zcard salart 获取有序集合中的数据数量
zcount myset 1 2 获取指定区间的成员数量
案例思路:工资表排序、存储班级成绩表
普通消息 1、重要消息 2、带权重进行判断
排行榜应用实现TOP N