String 字符串类型
redis 不区分大小写
设置值:set name 123
获取值:get name
获取所有的key :keys *
判断某一个key 是否存在:exists name
追加字符串:append name 456 (如果这个key 不存在,则相当于set key)
获取字符串的长度:strlen name
判断某个博客的浏览量可以使用,自增:
set views 0 初始化浏览量为0
自增1 incr views
获取当前浏览量:get views
自减1:decr views
同时可以增加指定数量的值:incrby views 10
也可以减少指定数量的值:decrby views 8
通过range 截取字符串:getrange name 0 1
获取全部字符串:getrange name 0 -1
替换某个位置的字符串:setrange name 1 xx
设置某个key的过期时间:setex name 20 hello
获取剩余的过期时间:ttl name
同时设置多个值:mset k1 v1 k2 v2
同时获取多个值:mget k1 k2
msetnx 是一个原子性操作,要么全部成功,要么全部失败:msetnx k1 v1 k4 v4
此时k4 会设置失败!
对象设置:mset user:1:name zhangsan user:1:age 2
获取对象:mget user:1:name user:1:age
String 字符串的使用场景:
计数器,文章阅读数,浏览量,粉丝数,统计数量,对象缓存存储
List(列表类型)
lpush list one 将值插入到左边
lpush list two
lpush list three
lrange list 0 -1 获取全部数据
rpush list four 将值插入到右边
lpop list 移除左侧第一个数据
rpop list 移除右侧第一个数据
lindex list 1 通过下标获取list 中的某一个值
llen list 返回列表的长度
移除指定列表中的值:lrem list 1 one
通过下标截取指定的长度:ltrim list 1 2
通过下标更新指定的值:lset list 1 item(如果不存在,则报错)
这种类型类似于消息队列,栈。
Set(集合类型)
sadd myset 111 设置值
smembers myset 查看指定set 的所有值
sismember myset 111 判断某一个值是不是在set 集合中。
scard myset 获取set 集合中的个数
srem myset 111 移除指定列表中的元素
srandmember myset 随机抽取其中的一个元素
srandmember myset 2 随机抽取指定个数的元素
spop 随机删除set 集合中的元素
差集,交集,并集
sdiff 差集 sdiff key1 key2
sinter 交集 (共同好友)sinter key1 key2
sunion 并集 sunion key1 key2
Hash 哈希类型
set 一个具体的key value 值 hset myhash field1 xc
获取值:hget myhash field1
设置多个值:hmset myhash field1 xc field2 zz
获取多个值:hmget myhash field1 field2
获取全部值:hgetall myhash
删除hash指定key 字段:hdel myhash field1
获取长度:hlen myhash
判断hash中指定字段是否存在:hexists myhash field1
获取所有的field:hkeys myhash
获取所有的value:hvals myhash
自增,自减:hincrby myhash field3 1 hdecrby myhash field3 1
hash 更适合对象存储,string 更适合字符串存储
Zset(有序集合)
zadd myset 1 one 添加一个值 zadd myset 1 one 2 two 添加多个值
zrange myset 0 -1 获取所有值
zadd salary 2500 xiaohong 添加用户
zrangebyscore salary -inf +inf 显示所有数据,从小到大
zrevrange salary 0 -1 从大到小排序
zrangebyscore salary -inf 2500 withscores 显示工资小于2500 的员工并按照升序排序
zrem salary xiaohong 移除指定元素
zcard salary 获取元素个数
还有三种特殊的数据类型
Geospatial 地理位置
添加坐标命令:geoadd china:city 116.40 39.90 beijing
获取经纬度的值:geopos china:city beijing shanghai zhengzhou
获取两地之间的距离:geodist china:city beijing zhengzhou km
获取附近的人:georadius china:city 110 30 1000km 110是经度,30 为纬度 半径为1000km 之内的城市
GEORADIUS china:city 110 30 500 km withdist 显示到110 30 这个位置的距离
GEORADIUS china:city 110 30 500 km withcoord 显示到110 30 这个地方的定位信息
GEORADIUSBYMEMBER china:city beijing 1000 km 显示距离到北京500km 的城市名
GEOhash china:city beijing zhengzhou 把经纬度转换为大小为11的字符串,字符串越接近,则距离越近
geo 地理位置是使用zset 来实现的,所以可以使用zset 的命令查询到,比如:zrange china:city 0 -1
Hyperloglog 数据结构
应用场景:统计一个网站的访问人数,某一个人访问了2次网站,还算做访问一次,去除重复的数据。
命令:pfadd mykey a b v s w e r t
pfadd mykey1 a d d f b s t h
合并 pfmerge mykey3 mykey mykey1
查看数量:pfcount mykey3
缺点是这种方式有一定0.81% 的错误率,如果需求允许容错,则可以采用这种方式,如果不允许容错,则采用用set 集合存储id 的方式,比较占用内存。
Bitmaps
应用场景:登录与未登录,打卡与未打卡
setbit sign 0 1 0 代表周一 0 1 代表打卡
setbit sign 1 0
setbit sign 2 1
查看某一天的值:getbit sign 2
统计打卡记录:bitcount sign
------------------------------------------------