Set(集合)

set中的值不能重复 set是无序的且不重复

127.0.0.1:6379> sadd myset "hello" # set集合中添加值
(integer) 1
127.0.0.1:6379> sadd myset "kuangshen"
(integer) 1
127.0.0.1:6379> sadd myset "lovekuangshen"
(integer) 1
127.0.0.1:6379> smembers myset #查看指定set的所有值
1) "hello"
2) "lovekuangshen"
3) "kuangshen"
127.0.0.1:6379> sismember myset hello# 判断某一个值是不是在set集合中,是的话返回1  不是返回0
(integer) 1
127.0.0.1:6379> sismember myset world
(integer) 0
127.0.0.1:6379> scard myset #获取set集合中的内容元素个数
(integer) 3
127.0.0.1:6379> sadd myset "hello" # 如果set重复的值不会成功,因为set不能重复
(integer) 0
127.0.0.1:6379> sadd myset "hello2"
(integer) 1
127.0.0.1:6379> scard myset
(integer) 4
===========================================
#rem
127.0.0.1:6379> srem myset hello # 移除set集合中的指定元素
(integer) 1
127.0.0.1:6379> scard myset
(integer) 3
127.0.0.1:6379> smembers myset
1) "hello2"
2) "lovekuangshen"
3) "kuangshen"
============================================
set 无序不重复集合。随机!
127.0.0.1:6379> smembers myset
1) "hello2"
2) "lovekuangshen"
3) "kuangshen"
127.0.0.1:6379> srandmember myset # 随机抽选出一个元素
"kuangshen"
127.0.0.1:6379> srandmember myset
"kuangshen"
127.0.0.1:6379> srandmember myset
"hello2"
127.0.0.1:6379> srandmember myset
"lovekuangshen"
127.0.0.1:6379> srandmember myset 2# 随机抽选出指定个数的元素
1) "hello2"
2) "lovekuangshen"
===================================================
随机删除key!
127.0.0.1:6379> smembers myset
1) "hello2"
2) "lovekuangshen"
3) "kuangshen"
127.0.0.1:6379> spop myset # 随机移除一些set集合中的元素!
"lovekuangshen"
127.0.0.1:6379> spop myset
"hello2"
127.0.0.1:6379> smembers myset
1) "kuangshen"
======================================================
#将一个指定的值,移动到另外一个set集合中!
127.0.0.1:6379> sadd myset "hello"
(integer) 1
127.0.0.1:6379> sadd myset "world"
(integer) 1
127.0.0.1:6379> sadd myset "kuangshen"
(integer) 1
127.0.0.1:6379> sadd myset2 "set2"
(integer) 1
127.0.0.1:6379> smove myset myset2 "kuangshen"#将一个指定的值,移动到另外一个set集合中!
(integer) 1
127.0.0.1:6379> smembers myset
1) "hello"
2) "world"
127.0.0.1:6379> smembers myset2
1) "kuangshen"
2) "set2"
====================================================
微博 或者B站或者....有共同关注这个提示(这是个交集)
数学集合类:
- 差集 sdiff
- 交集 sinter
- 并集 sunion
127.0.0.1:6379> sadd key1 a
(integer) 1
127.0.0.1:6379> sadd key1 b
(integer) 1
127.0.0.1:6379> sadd key1 c
(integer) 1
127.0.0.1:6379> sadd key2 c
(integer) 1
127.0.0.1:6379> sadd key2 d
(integer) 1
127.0.0.1:6379> sadd key2 e
(integer) 1
127.0.0.1:6379> sdiff key1 key2 # 差集
1) "a"
2) "b"
127.0.0.1:6379> sinter key1 key2 #交集
1) "c"
127.0.0.1:6379> sunion key1 key2 # 并集
1) "b"
2) "c"
3) "a"
4) "e"
5) "d"

Hash(哈希)

127.0.0.1:6379> hset myhash field1 kuangshen #set 一个具体的key-value
(integer) 1
127.0.0.1:6379> hget myhash field1
"kuangshen"
127.0.0.1:6379> hmset myhash field1 hello field2 world
OK # 如果field1 里面有值  那么现在set的值会覆盖前面的值   set多个key-value
127.0.0.1:6379> hmget myhash field1 field2 #获取多个字段的值
1) "hello"
2) "world"
127.0.0.1:6379> hgetall myhash #获取全部的值  以key-value形式
1) "field1"
2) "hello"
3) "field2"
4) "world"
127.0.0.1:6379> hdel myhash field1 #删除hash指定的key字段,对应的value值也就消失了
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "field2"
2) "world"
====================================================
#hlen127.0.0.1:6379> hgetall myhash
1) "field2"
2) "world"
127.0.0.1:6379> hlen myhash
(integer) 1
127.0.0.1:6379> hmset myhash field1 hello field2 world# 如果field2 里面有值  那么现在set的值会覆盖前面的值
OK
127.0.0.1:6379> hgetall myhash
1) "field2"
2) "world"
3) "field1"
4) "hello"
127.0.0.1:6379> hlen myhash #获取hash表的字段数量
(integer) 2
======================================================
127.0.0.1:6379> hexists myhash field1 #判断hash中指定的 字段是否存在
(integer) 1
127.0.0.1:6379> hexists myhash field3
(integer) 0
=====================================================
# 只获得所有的key
# 只获得所有的value127.0.0.1:6379> hkeys myhash# 只获得所有的key
1) "field2"
2) "field1"
127.0.0.1:6379> hvals myhash# 只获得所有的value
1) "world"
2) "hello"
===================================================
#hincrby指定增量
#hsetnx 如果不存在则可以设置 如果存在则设置失败
127.0.0.1:6379> hset myhash field3 5
(integer) 1
127.0.0.1:6379> hincrby myhash field3 1 #指定增量
(integer) 6
127.0.0.1:6379> hincrby myhash field3 -1
(integer) 5
127.0.0.1:6379> hsetnx myhash field4 hello#如果不存在则可以设置
(integer) 1
127.0.0.1:6379> hsetnx myhash field4 world# 如果存在则设置失败
(integer) 0

hash可以存变更的数据 user name age 尤其是用户信息之类经常变动的信息!hash更适合于对象的存储,String更加适合字符串的存储!

127.0.0.1:6379> hset user:1 name qinjiang
(integer) 1
127.0.0.1:6379> hget user:1 name
"qinjiang

Zset(有序集合)

在set的基础上,增加了一个值, set k1 v1 zset k1 score1 v1

127.0.0.1:6379> zadd myset 1 one  #添加一个值
(integer) 1
127.0.0.1:6379> zadd myset 2 two 3 three #添加多个值
(integer) 2
127.0.0.1:6379> zrange myset 0 -1
1) "one"
2) "two"
3) "three"
==============================================
排序如何实现
#zrevrange 在排序的设置返回的成员范围,通过索引,下令从分数高到低
# zrangebyscore 返回的有序集合中指定分数区间内的成员 分数由低到高
127.0.0.1:6379> zadd salary 2500 xiaoming #添加3个用户
(integer) 1
127.0.0.1:6379> zadd salary 5000 zhangsan
(integer) 1
127.0.0.1:6379> zadd salary 500 kuangshen
(integer) 1
127.0.0.1:6379> zrangebyscore salary -inf +inf #显示全部的用户,从小到大!
1) "kuangshen"
2) "xiaoming"
3) "zhangsan"
127.0.0.1:6379> zrevrange salary 0 -1 #zrevrange 在排序的设置返回的成员范围,通过索引,下令从分数高到低
1) "zhangsan"
2) "xiaoming"
3) "kuangshen"
127.0.0.1:6379> zrangebyscore salary -inf +inf withscores#显示全部的用户并且附带成绩
1) "kuangshen"
2) "500"
3) "xiaoming"
4) "2500"
5) "zhangsan"
6) "5000"
127.0.0.1:6379> zrangebyscore salary -inf 2500 withscores#显示工资小于2500员工的升序排序
1) "kuangshen"
2) "500"
3) "xiaoming"
4) "2500"
==========================================================================
移除元素
127.0.0.1:6379> zrange salary 0 -1
1) "kuangshen"
2) "xiaoming"
3) "zhangsan"
127.0.0.1:6379> zrem salary xiaoming #移除有序集合中的指定元素
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) "kuangshen"
2) "zhangsan"
127.0.0.1:6379> zcard salary #获取有序集合中的个数
(integer) 2
==============================================================================
127.0.0.1:6379> zadd myset 1 hello
(integer) 1
127.0.0.1:6379> zadd myset 2 world 3 kuangshen
(integer) 2
127.0.0.1:6379> zcount myset 1 3 #获取指定区间的成员数量
(integer) 3
127.0.0.1:6379> zcount myset 1 2
(integer) 2
127.0.0.1:6379> zcount myset 2 3
(integer) 2

查看命令的官网地址:Redis命令中心(Redis commands) – Redis中国用户组(CRUG)

案例思路:set排序 存储班级成绩表 工资表排序

普通消息 1 重要消息 2 带权重进行判断

三种特殊数据类型

geospatial :地理位置

朋友的定位 附近的人 打车计算距离

Redis的Geo在Redis3.2版本就推出了,这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人!

可以查询城市的经纬度的网址:城市经纬度查询-国内城市经度纬度在线查询工具 (jsons.cn)

经纬度查询 - 坐标拾取系统 (bmcx.com)

只有6个命令:

getadd

  • 有效的经度从-180度到180度。
  • 有效的纬度从-85.05112878度到85.05112878度

官方文档:Redis GEOADD 命令_将指定的地理空间位置(纬度、经度、名称)添加到指定的key中

#getadd 添加地理位置
127.0.0.1:6379> geoadd china:city 116.40 39.90 beijing
(integer) 1
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
(integer) 1
127.0.0.1:6379> geoadd china:city 106.50.29.53 chongqing 114.05 22.52 shengzhen
(error) ERR syntax error
127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shengzhen
(integer) 2
127.0.0.1:6379> geoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian
(integer) 2

Redis GEOPOS 命令 - 从key里返回所有给定位置元素的位置(经度和纬度)

获得当前定位:一定是一个坐标值

127.0.0.1:6379> geopos china:city beijing  #获取指定城市的经度和纬度
1) 1) "116.39999896287918091"2) "39.90000009167092543"
127.0.0.1:6379> geopos china:city beijing chongqing
1) 1) "116.39999896287918091"2) "39.90000009167092543"
2) 1) "106.49999767541885376"2) "29.52999957900659211"

Redis GEODIST 命令 - 返回两个给定位置之间的距离

如果两个位置之间的其中一个不存在, 那么命令返回空值。

指定单位的参数 unit 必须是以下单位的其中一个:

  • m 表示单位为米。
  • km 表示单位为千米。
  • mi 表示单位为英里。
  • ft 表示单位为英尺。
127.0.0.1:6379> geodist china:city beijing shanghai
"1067378.7564"
127.0.0.1:6379> geodist china:city beijing shanghai km #查看上海到北京的直线距离 以km为单位
"1067.3788"
127.0.0.1:6379> geodist china:city beijing chongqing km#查看重庆到北京的直线距离以km为单位
"1464.0708"

Redis GEORADIUS 命令 - 以给定的经纬度为中心, 找出某一半径内的元素

附近的人?(获得所有附近的人的地址,定位!)通过半径来查询!

127.0.0.1:6379> georadius china:city 110 30 1000 km # 以110 30 这个经纬度为中心,寻找方圆1000km的城市
1) "chongqing"
2) "xian"
3) "shengzhen"
4) "hangzhou"
127.0.0.1:6379> georadius china:city 110 30 500 km
1) "chongqing"
2) "xian"
127.0.0.1:6379> georadius china:city 110 30 500 withdist
(error) ERR unsupported unit provided. please use m, km, ft, mi
127.0.0.1:6379> georadius china:city 110 30 500 km withdist # 显示到中心距离的位置
1) 1) "chongqing"2) "341.9374"
2) 1) "xian"2) "483.8340"
127.0.0.1:6379> georadius china:city 110 30 500 km withcoord # 显示他人的定位信息
1) 1) "chongqing"2) 1) "106.49999767541885376"2) "29.52999957900659211"
2) 1) "xian"2) 1) "108.96000176668167114"2) "34.25999964418929977"
127.0.0.1:6379> georadius china:city 110 30 500 km withdist withcoord count 1 # 删选出指定的结果
1) 1) "chongqing"2) "341.9374"3) 1) "106.49999767541885376"2) "29.52999957900659211"
127.0.0.1:6379> georadius china:city 110 30 500 km withdist withcoord count 2
1) 1) "chongqing"2) "341.9374"3) 1) "106.49999767541885376"2) "29.52999957900659211"
2) 1) "xian"2) "483.8340"3) 1) "108.96000176668167114"2) "34.25999964418929977"
127.0.0.1:6379> georadius china:city 110 30 500 km withdist withcoord count 3
1) 1) "chongqing"2) "341.9374"3) 1) "106.49999767541885376"2) "29.52999957900659211"
2) 1) "xian"2) "483.8340"3) 1) "108.96000176668167114"2) "34.25999964418929977"

Redis GEORADIUSBYMEMBER 命令 - 找出位于指定范围内的元素,中心点是由给定的位置元素决定

# 找出位于指定元素周围的其他元素
127.0.0.1:6379> georadiusbymember china:city beijing 500 km
1) "beijing"
127.0.0.1:6379> georadiusbymember china:city beijing 1000 km
1) "beijing"
2) "xian"
127.0.0.1:6379> georadiusbymember china:city chongqing 1000 km
1) "chongqing"
2) "xian"

Redis GEOHASH 命令 - 返回一个或多个位置元素的 Geohash 表示

该命令将返回11个字符的Geohash字符串 它将失去精度,但仍将指向同一地区

# 将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么距离越近
127.0.0.1:6379> geohash china:city beijing chongqing
1) "wx4fbxxfke0"
2) "wm5xzrybty0"

GEO底层的实现原理其实就是Zset!我们可以使用Zset命令操作geo!

127.0.0.1:6379> zrange china:city 0 -1 # 查看地图中全部的元素
1) "chongqing"
2) "xian"
3) "shengzhen"
4) "hangzhou"
5) "shanghai"
6) "beijing"
127.0.0.1:6379> zrem china:city beijing #移除指定的元素
(integer) 1
127.0.0.1:6379> zrange china:city 0 -1
1) "chongqing"
2) "xian"
3) "shengzhen"
4) "hangzhou"
5) "shanghai"

Hyperloglog

什么是基数

简单来说,基数(cardinality,也译作势),是指一个集合(这里的集合允许存在重复元素)中不同元素的个数。

简介

Redis 2.8.9 版本更新了Hyperloglog 数据结构

Reddis Hyperloglog 是基数统计的算法!

优点:占用的内存是固定的,2^64不同的元素的基数,只需要费12KB内存!如果从内存角度来比较的话Hyperloglog首选!

网页的UV(一个人访问一个网站多次,但是还是算作一个人) PV(Page view, 页面浏览量 )UV( unique visitor 网站独立访客)

传统的方式,set保存用户的id,然后就可以统计set中的元素数量作为标准判断!这个方式如果保存大量的用户id就会比较麻烦。我们的目的是为了计数,而不是保存用户id

测试使用

127.0.0.1:6379> pfadd mykey a b c d e f g h i j # 创建第一组元素 mykey
(integer) 1
127.0.0.1:6379> pfcount mykey#统计mykey元素的基数数量
(integer) 10
127.0.0.1:6379> pfadd mykey2 i o p j k h g v n n
(integer) 1
127.0.0.1:6379> pfcount mykey2 #统计mykey2元素的基数数量 不统计重复的
(integer) 9
127.0.0.1:6379> pfmerge mykey3 mykey mykey2# 合并两组 mykey mykey2 => mykey3并集
OK
127.0.0.1:6379> pfcount mykey3  # 查看并集的数量!
(integer) 15

如果允许容错,那么一定可以使用Hyperloglog

如果不允许容错,就使用set或者用自己的数据类型即可!

Bitmaps

位存储

Bitmaps位图,数据结构!都是操作二进制位来进行记录,就只有0和1两个状态!

用例:

使用bitmap来记录周一到周日的打卡! 0代表未打卡 1 代表打卡

127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 0
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 1
(integer) 0
127.0.0.1:6379> setbit sign 5 0
(integer) 0
127.0.0.1:6379> setbit sign 6 0
(integer) 0
127.0.0.1:6379> getbit sign 3 # 查看某一天是否打卡
(integer) 1
127.0.0.1:6379> getbit sign 6
(integer) 0
127.0.0.1:6379> bitcount sign  #统计操作,统计打卡的天数
(integer) 3

事务

Redis事务本质:一组命令的集合!一个事务中的所有命令都会被序列化,在事务执行的过程中,会按照顺序执行!

一次性 顺序性 排他性 执行一系列的命令!

Redis事务本质: 一组命令的集合!

Redis事务没有隔离级别的概念!

所有的命令在事务中,并没有被直接执行!只有发起执行命令的时候才会执行! Exec

Redis单条命令保存是保存原子性的,但是事务不保证原子性!

redis的事务:

  • 开启事务(multi)
  • 命令入队(…)
  • 执行事务(exec)

正常执行事务!

127.0.0.1:6379> multi #开启事务
OK
# 命令入队
127.0.0.1:6379(TX)> set k1 v1
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> get k2
QUEUED
127.0.0.1:6379(TX)> set k3 v3
QUEUED
127.0.0.1:6379(TX)> exec #执行事务
1) OK
2) OK
3) "v2"
4) OK

执行完这个事务,这个事务就结束了,下次使用要重新开启事务

放弃事务

127.0.0.1:6379> multi #开启事务
OK
127.0.0.1:6379(TX)> set k1 v1
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> set k4 v4
QUEUED
127.0.0.1:6379(TX)> discard # 取消事务
OK
127.0.0.1:6379> get k4 #事务队列中的命令都不会被执行!
(nil)

编译型异常(代码有错! 命令有错),事务中所有的命令都不会被执行!

127.0.0.1:6379> multi #开启事务
OK
127.0.0.1:6379(TX)> set k1 #错误命令
(error) ERR wrong number of arguments for 'set' command
127.0.0.1:6379(TX)> set k1 v1
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> set k3 v3
QUEUED
127.0.0.1:6379(TX)> set k4 v4
QUEUED
127.0.0.1:6379(TX)> set k5 v5
QUEUED
127.0.0.1:6379(TX)> exec #执行事务报错
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get k5 #所有的命令都不会被执行!
(nil)

运行时异常(1/0),如果事务队列中存在语法性错误,那么执行命令的时候,其他命令是可以正常执行的!错误命令抛出异常!

127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set k1 "v1"
QUEUED
127.0.0.1:6379(TX)> incr k1 # 执行的时候失败 自增是不能增字符串的 只能是数字
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> set k3 v3
QUEUED
127.0.0.1:6379(TX)> get k3
QUEUED
127.0.0.1:6379(TX)> exec
1) OK
2) (error) ERR value is not an integer or out of range #虽然第一条命令报错了,但是其他命令依旧正常执行成功了!
3) OK
4) OK
5) "v3"
127.0.0.1:6379> get k2
"v2"
127.0.0.1:6379> get k3
"v3"
127.0.0.1:6379> get k1
"v1"

监控 Watch(面试常问)

悲观锁:

  • 很悲观,认为什么时候都会出现问题,无论做什么都会加锁

乐观锁:

  • 很乐观,认为无论什么时候都不会出现问题,所以不会上锁!更新数据的时候去判断一下,在此期间是否有人修改过这个数据。
  • 获取version
  • 更新的时候比较version

Redis监测测试

正常执行成功:

127.0.0.1:6379> set money 100
OK
127.0.0.1:6379> set out 0
OK
127.0.0.1:6379> watch money #监视money对象
OK
127.0.0.1:6379> multi # 事务正常结束,数据期间没有发生变动,这个时候就正常执行成功!
OK
127.0.0.1:6379(TX)> decrby money 20
QUEUED
127.0.0.1:6379(TX)> incrby out 20
QUEUED
127.0.0.1:6379(TX)> exec
1) (integer) 80
2) (integer) 20

一旦事务执行成功后,监控就会自动取消掉

测试多线程修改值,使用watch 可以当做redis的乐观锁操作!

注意。在这个过程中不要有编译出错 保证都执行了 不然会报这个错误(error) EXECABORT Transaction discarded because of previous errors.

第一个线程

127.0.0.1:6379> watch money #监视
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> decrby money 10
QUEUED
127.0.0.1:6379(TX)> incrby out 10
QUEUED
127.0.0.1:6379(TX)> exec #这一步是执行完线程2之后再来执行  线程2修改了money的值,这个时候,就会导致事务执行失败!
(nil)

第二个线程

127.0.0.1:6379> get money
"80"
127.0.0.1:6379> set money 1000
OK

解决事务执行失败的方法:如果修改失败,获取最新的值就好 在线程1进行修改

127.0.0.1:6379> unwatch # 如果发现事务执行失败,就先解锁
OK
127.0.0.1:6379> watch money # 获取最新的值,再次监视, 相当于 select version
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> decrby money 1
QUEUED
127.0.0.1:6379(TX)> incrby out 1
QUEUED
127.0.0.1:6379(TX)> exec# 对比监视的值是否发生了变化,如果没有变化,那么就可以执行成功,如果变化了就执行失败,这里应该是指的线程2没有修改值
1) (integer) 999
2) (integer) 21

B站学习网址:【狂神说Java】Redis最新超详细版教程通俗易懂_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

第124天学习打卡(Redis Set Hash Zset 三种特殊数据类型 事务 乐观锁)相关推荐

  1. Redis五大基本类型三种特殊数据类型事务操作(悲观锁,乐观锁)

    Redis五大基本类型 Redis是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.它支持多种类型的数据 结构,如字符串(strings),散列(hashes) ...

  2. Redis(四)------三种特殊数据类型

    Redis(四)------三种特殊数据类型 7.三种特殊数据类型 7.1 Geospatial(地理位置) 使用经纬度定位地理坐标,并用一个有序集合Zset保存,所以,Zset的命令也可以使用 有效 ...

  3. redis学习--三种特殊数据类型,GEO地理位置,HyperLogLog,BitMap

    三种特殊数据类型,GEO地理位置,HyperLogLog,BitMap GEO地理位置 简介 Redis 的 GEO 特性在 Redis 3.2 版本中推出, 这个功能可以将用户给定的地理位置信息储存 ...

  4. Redis中五大基本数据类型和三种特殊数据类型详解

    目录 介绍 概念 基本命令 redis是单线程的 五大基本数据类型 String 命令 应用场景 List 命令 应用场景 Set 命令 应用场景 Hash 命令 应用场景 Zset 命令 应用场景 ...

  5. Redis三种特殊数据类型

    Redis三种特殊数据类型 geospatial 地理位置 朋友的定位, 附近的人, 打车的距离计算 Redis的Geo在Redis3.2版本就推出了.这个功能可以推算地理位置信息, 两地之间的距离, ...

  6. redis 三种特殊数据类型

    三种特性数据类型 geospatial 定位,附近的人,打车距离计算. redis的geo在redis3.2版本就推出了.可推算地理位置的信息,两地之间的距离,方圆几里的人. 6个命令. GEOADD ...

  7. redis的三种特殊数据类型

    三种特殊数据类型 GEO地理位置 简介 Redis 的 GEO 特性在 Redis 3.2 版本中推出, 这个功能可以将用户给定的地理位置信息储存起来, 并对这些信息进行操作.来实现诸如附近位置.摇一 ...

  8. Redis(三)【五大数据类型三种特殊数据类型】

    目录 三. 五大数据类型 Redis-Key String(字符串) List(列表) Set(集合) Hash(哈希) Zset(有序集合) 6. 三种特殊数据类型 geospatial 地理位置 ...

  9. Redis(测试连接, 五大数据类型,三种特殊数据类型)

    文章目录 测试性能 测试端口: 测试: 基础知识 总共有16个数据库,默认是0号数据库 数据库切换: 清空数据: redis是单线程的 redis为什么是单线程还运行如此快? 五大数据类型 Redis ...

最新文章

  1. 二叉树前序遍历python输出_Python 二叉树查找 前序 中序 后序遍历
  2. 如何把SAP CRM产品主数据隐藏的batch ID字段显示出来
  3. 两个分布的特征映射_跨语言分布表示学习方法概述
  4. redis作用_Redis高可用详解:持久化技术及方案选择
  5. linux中mysql主主搭建_mysql 主从配置 主主配置
  6. 如此轻松就能搭建聊天机器人,我也要弄一个~
  7. 3500常用汉字书法体检测数据集
  8. Oracle分析函数用法
  9. centos 7.7.1908上隐藏顶栏和任务栏
  10. 信息系统集成监理费收取标准_信息产业部信息系统工程监理与咨询服务收费参考标准Word1...
  11. python之小坑:IndentationError: expected an indented block
  12. android各版本市场占有率报告,百度报告:Android市场份额大增
  13. 看steam教育之风带来创新与变革
  14. 传奇玩家申请怪物攻城脚本
  15. Word 调整段落行间距无效怎么办
  16. Redis中的布隆过滤器与布谷鸟过滤器,你了解多少?
  17. 计算机 竞赛 甘肃,甘肃省第三届创新杯计算机应用能力大赛获奖名单
  18. 【Unity】用Text+Image实现神奇的文字下划线
  19. ZZULIOJ 1055 兔子繁殖问题(C++)
  20. 手机壁纸-小程序背景壁纸

热门文章

  1. 四个手机电池保养误区,请尽量避免
  2. word中某个图片另存为。快捷便捷的操作方法。
  3. 自组织网络(Ad Hoc Network)——TOPIC 4 IP地址和互联网协议【RIP内容更新】
  4. 低耦合高内聚 原则的应用
  5. 迁移学习概念、优点、策略
  6. double的精度与范围
  7. JAVA学习笔记(第十章 多线程)
  8. ora-01722 无效数字_SQL 错误: ORA-01722: 无效数字
  9. c语言输入输出语句题目,C语言题目解答8程序填空,不要改变与输入输出有关的语句输入一个 爱问知识人...
  10. 具备全局观念,系统解决问题