redis安装
基于windows安装和Linux安装
安装教程
预备知识
//redis命令不区分大小写
一个redis服务器默认有16个数据库(从0 到15)
默认的端口号为:6379
测试连通:ping ------>PONG(表示连通)
切换数据库:select 5 //切换到5号数据库
查看数据库大小:dbsize
查看所有的key: keys *
清空当前数据库:flushdb
清空全部数据库:flushall
//认识redis-key
判断件是否存在:exists key /*存在为1 否则为0*/
移动当前数据库的key到另一个数据库:move key 1 (这里为1号数据库)
过期实现:expire key 10 (10s后过期)
判断还有多久过期:ttl key
查看key的数据类型:type key
设置密码:config set requirepass "123456" //设置密码为123456
获取密码:config get requirepass
使用密码登录:auth 123456
五大基本数据类型
String(字符串)
为key添加字符串:set key1 'test'
追加字符串,如果key值不存在,相当于setkey: append key1 'hello'
//key必须是数字
自增1:incr key
自减1:incr key
//步长
设置步长,增加10:incrby key 10
decrby key 5
//字符串范围
set key1 "hello,redis"
截取字符串【0,3】:getrange key1 0 3
截取全部字符串,相当于get key1: getrange key1 0 -1
替换指定位置字符串:setrange key1 1 o
返回结果: -> hollo,redis
设置key3的值为hello 30s过期: setex keys 30 'hello'
如果mykey不存在,创建mykey,否则创建失败:setnx mykey 'redis'
同时设置多个值:mset k1 v1 k2 v2 k3 v3
同时获取多个值:mget k1 k2 k3
原子操作,一起成功,一起失败:msetnx k1 v1 k4 v4
先get在set:getset db redis --> nil
如果不存在则返回nil:get db -->redis
如果存在值,获取原来的值并设置新的值:
getset db mongodb ---->redis
get db --->mongodb
List(集合,有序可重复)
大部分的list命令都是l开头
将一个值或多个值插入到列表头部(左):lpush list one
将一个值或多个值插入到列表尾部(右):rpush list two
获取list中的值:lrange list 0 -1
移除list的第一个元素:lpop list
移除list的最后一个元素:rpop list
通过下标获取list的第0个值:lindex list 0
返回列表长度:llen list
移除list集合中指定个数value: lrem list 1 one
通过下标截取长度: ltrim list 1 2
移除列表的最后一个元素并移动到新的列表中:rpoplpush
将列表中指定的下标值替换为另一个值(更新列表):lset list 0 'test'
将某个具体的value插入到列表中,可在before/after
linsert mylist after name "test"
//链表
before node after
如果key值不存在,创建新的链表(优点:在两边插入或者改动效率最高)
Set(无序不重复)
大部分命令以s开头
添加元素:sadd myset hello
查看指定set的所有值:smembers myset
判断值是否在set集合中:sismember myset hello//存在 1 不存在 0
获取set集合中元素个数:scard myset
移除set中的指定元素:srem myset hello
随机抽选一个元素: srandmember myset
随机抽选多个元素:srandmember myset 3
随机删除set集合中的元素(用法同上):spop myset
将指定值移到另一个set集合中:smove myset myset2 hello
//数字类的交集,并集和差集
交集:sinter set1 set2
并集:sunion set1 set2
差集:sdiff set1 set2
Hash(散列)
以h开头的命令。hash是一个map集合,通过key-map(本质上是String)
设置一个k-v:hset myhash field1 hello
获得具体的值:hget myhash field1
设置多个k-v:hmset myhash field1 hello2 field2 hello3
获取多个字段值:hmget myhash field1 field2
获取全部数据:hgetall myhash //以k-v键值对显示
删除hash指定的key字段:hdel myhash field1
获取字段长度:hlen myhash
判断key是否存在: hexists myhash field1
获取所有的key: hkeys myhash
获取所有的value: hvals myhash
自增:hincrby
自减:hdecrby
hash应用场景:变更数据(用户信息)
zset(有序集合)
在set基础上增加一个值,作为序号
添加值:zadd myset 1 one
添加多个值:zadd myset 2 two 3 three 4 four
遍历集合:zrange myset 0 -1
//eg: 可以实现排序
zadd salary 5000 zs
zadd salary 8000 ls
zadd salary 6500 ww
显示全部用户(按照工资从小到大): zrangebyscore salary -inf +inf
显示全部用户(按照工资从大到小):zrevrange salary 0 -1
上面两条命令后面加上withscores:可以实现用户并附带成绩
移除元素:zrem salary zs
获取集合元素个数:zcard salay
获取指定区间的成员数量:zcount salary 5000 6500 --->2
zset使用场景:set排序,存储班级成绩表,排行榜等
三种特殊数据类型
geospatial(地理位置)
//只有6个命令
1.geoadd:添加地理位置(两极无法添加,一般使用经纬度添加地理位置)
//有效的经度:[-180,180],有效的纬度: [-85.*,85.*]
geoadd china:city 116.40 39.90 beijing 106.55 29.57 chongqing
参数:key 值(经度,纬度,名称)
2.geopos:获取当前定位
geopos china:city beijing chongqing
3.geodist:查看某地到某地的直线距离
geodist china:city beijing chongqing km
4.georadius:(找附近的人)以给定的经纬度为中心。找出某一半径的元素
georadius china:city 110 30 1000 km(withdist 直线距离,withcoord 经纬度,count 1数量限制)
5.georadiusbymember:(找地理位置)找出位于指定元素周围的其他元素
georadiusbymember china:city beijing 1000km
6.geohash:返回一个或多个位置的geohash
该命令将返回11个字符串的geohash,两个字符窜越接近,则距离越近
//geospatial的数据类型就是zset有序集合
geospational应用场景:朋友地位,附近的人,打车距离计算
Hyperloglog(基数统计)
什么是基数
a{1,3,5,7,9,7}
b{1,3,5,7,9}
基数(不重复的元素) = 5
命令以p开头
1.pfadd mykey a b c d e f g h i j 创建一组元素
2.pfcount mykey 统计基数数量
3.pfmerge mykey1 mykey2 mykey 合并2组元素到另一组
使用场景:网页的浏览量
Bitmap(位运算存储)
只要有两个状态对的都可以使用bitmap
eg;
模拟一周上班打卡:(1,0)
setbit sign 0 1
setbit sign 1 0
setbit sign 2 1
setbit sign 3 0
setbit sign 4 1
setbit sign 5 1
setbit sign 6 1
getbit sign 6 判断具体某一天是否打卡
bitcount sign 统计打卡记录