Redis-key
> keys * #查看所有key
> set name value #设置键值
> exists name # 判断key 是否存在
> expire name 10 # 设置key的过期时间,单位是秒
> ttl name # 查看当前key的剩余过期时间
> type age # 查看当前key的类型
数据类型
1、String
> set key1 v1 #设置值
> append key1 "hello" # 追加值,如果不存在,相当于 set key
> strlen key1 # 获取字符串长度
> incr views # 自增 1
> decr views # 自减 1
> incrby views 10 # 设置步长、自增 10
> decrby views 5 # 设置步长、自减 5
> getrange key 0 3 # 截取字符串[0, 3]
> setrange key2 1 xx # 替换从下标1开始的字符串为xx,保留尾部剩余
> setex key3 30 "hello" # 设置 30 秒后过期
> setnx mykey "redis" # mykey 不存在时设置成功
> mset k1 v1 k2 v2 k3 v3 # 同时设置多个键值
> mget k1 k2 k3 # 同时获取多个值
> getset db redis # 如果不存在值,则返回 nil
String 的使用场景:value 除了是字符串以外还可以是数字
-
计数器
-
统计多单位的数量
-
粉丝数
-
对象缓存存储
2、List(列表)
> lpush list one # 将一个值或者多个值,插入到列表的头部(左)
> lrange list 0 -1 # 查看全部元素
> lpop list # 移除list的第一个元素
> lindex list 1 # 通过下标获取list中的某一个值
> llen list #获取list长度
> lrem list 1 value # 移除list集合中指定个数的value
> ltrim mylist 1 2 # 通过下标截取指定长度,这个list已经被破坏了,截断之后只剩下截断后的元素
> rpoplpush list newlist # 移除列表的最后一个元素,将他移动到新的列表中
> lset list 0 item # 将列表中指定下标的值替换为另一个值,如果不存在的话,更新会报错(error) ERR no such key
> linsert list before "hello2" hello # 在hello2前插入hello
> linsert list after "hello2" hello # 在hello2后插入hello
-
list 实际上是一个链表,前后都可以插入
-
如果key不存在,创建新的链表
-
如果移除了所有的值,空链表,也代表不存在
-
在两边插入或者改动值,效率最高。
3、Set (集合)
> sadd myset "hello" # set 集合中添加元素,元素不重复
> smembers myset # 查看指定Set的所有值
> sismember myset hello # 判断某一个值是不是在set中
> scard myset # 获取集合中的个数
> srem myset hello # 移除元素
> srandmember myset # 随机获取一个元素,不改变集合
> spop myset # 随机删除元素
> smove myset myset2 "kkk" # 将kkk,移动到另一个set集合中
> sdiff key1 key2 # 差集;key1中存在,key2不存在的集合
4、Hash(哈希)
> hset myhash field xxx # set 一个 key-value
> hget myhash field # 获取一个字段值
> hmget myhash field field1 field2 # 获取多个字段值
> hdel myhash field1 # 删除指定的key,对应的value也就没有了
> hgetall myhash # 获取hash内所有值
> hlen myhash # 获取长度
> hexists myhash field1 # 判断指定key是否存在
> hkeys myhash # 获取所有的key
> hincrby myhash field3 1 # 指定增量
> hsetnx myhash field4 hello # 如果不存在则可以设置
Hash 适合存储经常变动的对象信息,String 更适合于存储字符串。
5、zset (有序集合)
> zadd myset 1 one # 添加一个值
> zadd myset 2 two 3 three # 添加多个值
> zrange myset 0 -1 # 获取所有元素
> zrevrange myset 0 -1 # 从大到小进行排序
> zrangebyscore myset -inf +inf # 从小到大显示全部的数据
> zrangebyscore myset -inf +inf withscores # 附带成绩的显示所有数据
> zrangebyscore myset -inf 2500 withscores # 显示score小于 2500 的数据
> zrem myset xiaohong # 移除特定元素
> zcard myset # 获取有序集合的个数
> zcount myset 1 3 # 获取指定score区间的人员数量
6、geospatial
Redis 在 3.2 推出 Geo 类型,该功能可以推算出地理位置信息,两地之间的距离
> geoadd china:city 116.40 39.90 beijing # 添加单个地理位置
> geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shengzhen # 添加多个地理位置
> geopos china:city shanghai # 获取当前定位坐标值
> geodist china:city beijing shanghai km # 查看北京和上海直接的直线距离,单位 m:米 km:千米 mi:英里 ft:英尺
> georadius china:city 110 30 1000 km # 以110, 30 这个点为中心,寻找方圆 1000km 的城市
7、hyperloglog
这个数据结构常用于统计网站的 UV。传统的方式是使用 set 保存用户的ID,然后统计 set 中元素的数量作为判断标准。
但是这种方式保存了大量的用户 ID,ID 一般比较长,占空间,还很麻烦。我们的目的是计数,不是保存数据,所以这样做有弊端。但是如果使用 hyperloglog 就比较合适了。
> pfadd mykey a b c d e f g h i j # 创建第一组元素
> pfcount mykey # 统计 mykey 基数
> pfmerge mykey3 mykey mykey2 # 合并两组到新的组mykey3
8、bitmap 位图
bitmap就是通过最小的单位bit来进行0或者1的设置,表示某个元素对应的值或者状态。一个bit的值,或者是0,或者是1;也就是说一个bit能存储的最多信息是2。
bitmap 常用于统计用户信息比如活跃粉丝和不活跃粉丝、登录和未登录、是否打卡等
> setbit sign 0 1 # 设置下标 0 的值为 1
> getbit sign 0 # 获取下标 0 的值
> bitcount sign # 获取 值为 1 的数量