主頁 > 資料庫 > Redis系列(二)Redis的8種資料型別

Redis系列(二)Redis的8種資料型別

2020-09-10 19:12:02 資料庫

NoSQL 開發中或多或少都會用到,也是面試必問知識點,最近這幾天的面試每一場都問到了,但是感徑訓答的并不好,還有很多需要梳理的知識點,這里通過幾篇 Redis 筆記整個梳理一遍,后面再加上面試題,

Redis 系列:

  1. Redis系列(一)Redis入門
  2. Redis系列(二)Redis的8種資料型別
  3. Redis系列(三)Redis的事務和Spring Boot整合
  4. Redis系列(四)Redis組態檔和持久化
  5. Redis系列(五)發布訂閱模式、主從復制和哨兵模式
  6. Redis系列(六)Redis 的快取穿透、快取擊穿和快取雪崩
  7. Redis系列(七)Redis面試題
  8. Redis命令參考

1、Redis 的五大資料型別

官網可查看命令: http://www.redis.cn/commands.html

Redis-key

127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name xxx
OK
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> set age 1
OK
127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> exists name		# 判斷key 是否存在
(integer) 1
127.0.0.1:6379> exists name1
(integer) 0
127.0.0.1:6379> move name 1
(integer) 1
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> set name yyy
OK
127.0.0.1:6379> expire name 10  # 設定key的過期時間,單位是秒
(integer) 1
127.0.0.1:6379> ttl name		# 查看當前key的剩余過期時間
(integer) 7
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> type age		# 查看當前key的型別
string
127.0.0.1:6379> 

Redis 有以下 5 種基本的資料型別

1、String(字串)

127.0.0.1:6379> set key1 v1			#設定值
OK
127.0.0.1:6379> get key1
"v1"
127.0.0.1:6379> append key1 "hello"		# 追加值,如果不存在,相當于 set key
(integer) 7
127.0.0.1:6379> get key1
"v1hello"
127.0.0.1:6379> strlen key1		# 獲取字串長度
(integer) 7
127.0.0.1:6379> 

自增、自減

127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views		# 自增 1
(integer) 1
127.0.0.1:6379> get views
"1"
127.0.0.1:6379> decr views       # 自減 1
(integer) 0
127.0.0.1:6379> decr views
(integer) -1
127.0.0.1:6379> get views
"-1"
127.0.0.1:6379> incrby views 10		# 設定步長、自增 10 
(integer) 9
127.0.0.1:6379> decrby views 5      # 設定步長、自減 5
(integer) 4

字串范圍

127.0.0.1:6379> set key1 "hello,world!"
OK
127.0.0.1:6379> get key1
"hello,world!"
127.0.0.1:6379> getrange key1 0 3		# 截取字串[0, 3]
"hell"
127.0.0.1:6379> getrange key1 0 -1		# 獲取全部的字串,和 get key一樣
"hello,world!"
127.0.0.1:6379> 

替換:

127.0.0.1:6379> set key2 abcdefg
OK
127.0.0.1:6379> get key2
"abcdefg"
127.0.0.1:6379> setrange key2 1 xx
(integer) 7
127.0.0.1:6379> get key2
"axxdefg"
127.0.0.1:6379> 

setex(set with expire):設定過期時間

setnx(set if not exist):不存在再設定(在分布式鎖中會經常使用)

127.0.0.1:6379> setex key3 30 "hello"		# 設定 30 秒后過期
OK
127.0.0.1:6379> ttl key3					# 剩余過期時間
(integer) 25
127.0.0.1:6379> setnx mykey "redis"			# mykey 不存在時設定成功
(integer) 1
127.0.0.1:6379> keys *
1) "key2"
2) "key1"
3) "views"
4) "mykey"
127.0.0.1:6379> setnx mykey "mongoDB"		# mykey 存在時設定失敗
(integer) 0
127.0.0.1:6379> get mykey					# mykey 值不變
"redis"
127.0.0.1:6379> 

msetmget

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3		# 同時設定多個值
OK
127.0.0.1:6379> keys *
1) "k1"
2) "k3"
3) "k2"
127.0.0.1:6379> mget k1 k2 k3			# 同時獲取多個值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k1 v1 k4 v4       # msetnx 是一個原子性的操作,要么一起成功,要么都失敗
(integer) 0
127.0.0.1:6379> get k4
(nil)
127.0.0.1:6379>

物件

set user:1 {name:zhangsan, age:3}     # 設定一個 user:1 物件 值為 json  字符來保存一個物件

127.0.0.1:6379> mset user:1:name zhangsan user:1:age 2
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "2"
127.0.0.1:6379> 

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 mongodb		# 如果存在值,獲取原來的值,并設定新的值
"redis"
127.0.0.1:6379> get db
"mongodb"
127.0.0.1:6379> 

String 的使用場景:value 除了是字串以外還可以是數字

  • 計數器
  • 統計多單位的數量
  • 粉絲數
  • 物件快取存盤

2、List(串列)

基本的資料型別,串列,

在 Redis 中可以把 list 用作堆疊、佇列、阻塞佇列,

list 命令多數以 l開頭,

127.0.0.1:6379> lpush list one			# 將一個值或者多個值,插入到串列的頭部(左)
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three 
(integer) 3
127.0.0.1:6379> lrange list 0 -1			# 查看全部元素
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrange list 0 1				# 通過區間獲取值
1) "three"
2) "two"
127.0.0.1:6379> rpush list right			# 將一個值或者多個值,插入到串列的尾部(右)
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> 

彈出 pop

127.0.0.1:6379> lrange list 0 -1
1) "!"
2) "world"
3) "world"
4) "hello"
127.0.0.1:6379> lpop list		# 移除list的第一個元素
"!"
127.0.0.1:6379> lrange list 0 -1
1) "world"
2) "world"
3) "hello"
127.0.0.1:6379> rpop list			# 移除list的第一個元素
"hello"
127.0.0.1:6379> lrange list 0 -1
1) "world"
2) "world"
127.0.0.1:6379> 

索引 Lindex

127.0.0.1:6379> lrange list 0 -1
1) "hjk"
2) "world"
3) "world"
127.0.0.1:6379> lindex list 1		# 通過下標獲取list中的某一個值
"world"
127.0.0.1:6379> lindex list 0
"hjk"
127.0.0.1:6379> 

Llen 長度:

127.0.0.1:6379> llen list
(integer) 3
127.0.0.1:6379>

移除指定的值:

127.0.0.1:6379> lrange list 0 -1
1) "hjk"
2) "world"
3) "world"
127.0.0.1:6379> lrem list 1 world		# 移除list集合中指定個數的value,精確匹配
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "hjk"
2) "world"
127.0.0.1:6379> lpush list hjk
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "hjk"
2) "hjk"
3) "world"
127.0.0.1:6379> lrem list 2 hjk
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "world"
127.0.0.1:6379> 

trim 截斷

127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello2"
3) "hello3"
4) "hello4"
127.0.0.1:6379> ltrim mylist 1 2 # 通過下標截取指定長度,這個list已經被破壞了,截斷之后只剩下截斷后的元素
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello2"
2) "hello3"
127.0.0.1:6379> 

rpoplpush :移除串列的最后一個元素,將他移動到新的串列中,

127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello2"
3) "hello3"
127.0.0.1:6379> rpoplpush mylist myotherlist		# 移除串列的最后一個元素,將他移動到新的串列中,
"hello3"
127.0.0.1:6379> lrange mylist 0 -1		# 查看原來的串列
1) "hello1"
2) "hello2"
127.0.0.1:6379> lrange myotherlist 0 -1		# 查看目標串列中,確實存在該值
1) "hello3"
127.0.0.1:6379> 

lset:將串列中指定下標的值替換為另一個值,更新操作

127.0.0.1:6379> exists list		# 判斷這個串列是否存在
(integer) 0
127.0.0.1:6379> lset list 0 item		# 如果不存在的話,更新會報錯
(error) ERR no such key
127.0.0.1:6379> lpush list value1
(integer) 1
127.0.0.1:6379> lrange list 0 0 
1) "value1"
127.0.0.1:6379> lset list 0 item		# 如果存在,更新當前下標的值
OK
127.0.0.1:6379> lset list 1 other		# 如果不存在的話,更新會報錯
(error) ERR index out of range
127.0.0.1:6379> 

linsert:將某個具體的value插入到串列中某個元素的前面或者后面

127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello2"
127.0.0.1:6379> linsert mylist before "hello2" hello
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello"
3) "hello2"
127.0.0.1:6379> linsert mylist after "hello2" hello
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello"
3) "hello2"
4) "hello"
127.0.0.1:6379> 

小結

  • list 實際上是一個鏈表,前后都可以插入
  • 如果key不存在,創建新的鏈表
  • 如果移除了所有的值,空鏈表,也代表不存在
  • 在兩邊插入或者改動值,效率最高,

3、Set (集合)

127.0.0.1:6379> sadd myset "hello"		# set 集合中添加元素
(integer) 1
127.0.0.1:6379> sadd myset "world"		
(integer) 1
127.0.0.1:6379> smembers myset		    # 查看指定Set的所有值
1) "world"
2) "hello"
127.0.0.1:6379> sismember myset hello		# 判斷某一個值是不是在set中
(integer) 1
127.0.0.1:6379> sismember myset hello1
(integer) 0
127.0.0.1:6379> 
127.0.0.1:6379> scard myset		# 獲取集合中的個數
(integer) 2
127.0.0.1:6379> sadd myset "hello2"		
(integer) 1
127.0.0.1:6379> smembers myset   
1) "world"
2) "hello2"
3) "hello"
127.0.0.1:6379> srem myset hello   # 移除元素
(integer) 1
127.0.0.1:6379> smembers myset
1) "world"
2) "hello2"
127.0.0.1:6379> 
127.0.0.1:6379> smembers myset
1) "kkk"
2) "world"
3) "hjk"
4) "hello2"
127.0.0.1:6379> srandmember myset			# 隨機抽取一個元素
"hjk"
127.0.0.1:6379> srandmember myset
"hello2"
127.0.0.1:6379> srandmember myset 2			# 隨機抽取指定個數的元素
1) "world"
2) "hello2"
127.0.0.1:6379> srandmember myset 2
1) "hello2"
2) "hjk"
127.0.0.1:6379> 
127.0.0.1:6379> smembers myset
1) "kkk"
2) "world"
3) "hjk"
4) "hello2"
127.0.0.1:6379> spop myset		# 隨機洗掉元素
"hjk"
127.0.0.1:6379> smembers myset
1) "kkk"
2) "world"
3) "hello2"
127.0.0.1:6379> spop myset
"hello2"
127.0.0.1:6379> smembers myset
1) "kkk"
2) "world"
127.0.0.1:6379> 

127.0.0.1:6379> smembers myset
1) "kkk"
2) "world"
127.0.0.1:6379> sadd myset2 set2
(integer) 1
127.0.0.1:6379> smove myset myset2 "kkk"			# 將一個特定的值,移動到另一個set集合中
(integer) 1
127.0.0.1:6379> smembers myset
1) "world"
127.0.0.1:6379> smembers myset2
1) "kkk"
2) "set2"
127.0.0.1:6379> 
127.0.0.1:6379> smembers key1
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> smembers key2
1) "e"
2) "d"
3) "c"
127.0.0.1:6379> sdiff key1 key2			# 差集
1) "b"
2) "a"
127.0.0.1:6379> sinter key1 key2         # 交集
1) "c"
127.0.0.1:6379> sunion key1 key2		# 并集
1) "e"
2) "a"
3) "c"
4) "d"
5) "b"

4、Hash(哈希)

也是 key - value 形式的,但是value 是一個map,

127.0.0.1:6379> hset myhash field xxx		# set 一個 key-value
(integer) 1
127.0.0.1:6379> hget myhash field			# 獲取一個欄位值
"xxx"
127.0.0.1:6379> hmset myhash field1 hello field2 world		# set 多個 key-value
OK
127.0.0.1:6379> hmget myhash field field1 field2			# 獲取多個欄位值
1) "xxx"
2) "hello"
3) "world"
127.0.0.1:6379> hgetall myhash				# 獲取全部的資料
1) "field"
2) "xxx"
3) "field1"
4) "hello"
5) "field2"
6) "world"
127.0.0.1:6379> hdel myhash field1		# 洗掉指定的key,對應的value也就沒有了
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "field"
2) "xxx"
3) "field2"
4) "world"
127.0.0.1:6379> 
127.0.0.1:6379> hlen myhash		# 獲取長度
(integer) 2
127.0.0.1:6379> hexists myhash field1   # 判斷指定key是否存在
(integer) 0
127.0.0.1:6379> hexists myhash field2
(integer) 1
127.0.0.1:6379> hkeys myhash		# 獲取所有的key
1) "field"
2) "field2"
127.0.0.1:6379> hvals myhash		# 獲取所有的value
1) "xxx"
2) "world"
127.0.0.1:6379> 
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
127.0.0.1:6379> 

Hash 適合存盤經常變動的物件資訊,String 更適合于存盤字串,

5、zset (有序集合)

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"
127.0.0.1:6379> 

實作排序:

127.0.0.1:6379> zadd salary 2500 xiaohong
(integer) 1
127.0.0.1:6379> zadd salary 5000 xiaoming
(integer) 1
127.0.0.1:6379> zadd salary 500 xaiozhang
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) "xaiozhang"
2) "xiaohong"
3) "xiaoming"
127.0.0.1:6379> zrangebyscore salary -inf +inf		# 從小到大顯示全部的用戶
1) "xaiozhang"
2) "xiaohong"
3) "xiaoming"
127.0.0.1:6379> zrevrange salary 0 -1		# 從大到小進行排序
1) "xiaoming"
2) "xiaohong"
3) "xaiozhang"
127.0.0.1:6379> zrangebyscore salary -inf +inf withscores   # 附帶成績的顯示所有用戶
1) "xaiozhang"
2) "500"
3) "xiaohong"
4) "2500"
5) "xiaoming"
6) "5000"
127.0.0.1:6379> zrangebyscore salary -inf 2500 withscores			# 顯示工資小于 2500 的用戶
1) "xaiozhang"
2) "500"
3) "xiaohong"
4) "2500"
127.0.0.1:6379> zrange salary 0 -1
1) "xaiozhang"
2) "xiaohong"
3) "xiaoming"
127.0.0.1:6379> zrem salary xiaohong  # 移除特定元素
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) "xaiozhang"
2) "xiaoming"
127.0.0.1:6379> zcard salary		# 獲取有序集合的個數
(integer) 2
127.0.0.1:6379> 
127.0.0.1:6379> zadd myset 1 hello
(integer) 1
127.0.0.1:6379> zadd myset 2 world 3 !
(integer) 2
127.0.0.1:6379> zcount myset 1 3		# 獲取指定區間的人員數量
(integer) 3
127.0.0.1:6379> zcount myset 1 2
(integer) 2

2、Redis 三種特殊資料型別

1、geospatial

Redis 在 3.2 推出 Geo 型別,該功能可以推算出地理位置資訊,兩地之間的距離,

檔案: https://www.redis.net.cn/order/3687.html

借助網站模擬一些資料: http://www.jsons.cn/lngcode/

geoadd 添加地理位置

規則:兩極無法直接添加,一般會下載城市資料,直接通過 Java 程式一次性匯入,

有效的經度從 -180 度到 180 度,有效的緯度從 -85.05112878 度到 85.05112878 度,當坐標位置超出指定范圍時,該命令將會回傳一個錯誤,

(error) ERR invalid longitude latitude pair xxx yyy

添加一些模擬資料:

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
(integer) 2
127.0.0.1:6379> geoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian
(integer) 2
127.0.0.1:6379> 

geopos 獲得當前定位坐標值

127.0.0.1:6379> geopos china:city beijing		# 獲得指定城市的經緯度
1) 1) "116.39999896287918091"
   2) "39.90000009167092543"
127.0.0.1:6379> geopos china:city shanghai
1) 1) "121.47000163793563843"
   2) "31.22999903975783553"
127.0.0.1:6379> 

geodist 獲取兩個位置之間的距離

單位:

  • m 表示單位為米,
  • km 表示單位為千米,
  • mi 表示單位為英里,
  • ft 表示單位為英尺,

如果用戶沒有顯式地指定單位引數, 那么 GEODIST 默認使用米作為單位,

127.0.0.1:6379> geodist china:city beijing shanghai km	# 查看北京和上海直接的直線距離
"1067.3788"
127.0.0.1:6379> geodist china:city beijing chongqing km
"1464.0708"
127.0.0.1:6379> 

georedius 以給定的經緯度為中心,找出某一半徑內的元素

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 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> 
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 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> 

GEORADIUSBYMEMBER 找出位于指定元素周圍的其他元素

127.0.0.1:6379> georadiusbymember china:city shanghai 1000 km
1) "hangzhou"
2) "shanghai"
127.0.0.1:6379> 

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"
127.0.0.1:6379> 

2、hyperloglog

基數:數學上集合的元素個數,是不能重復的,

UV(Unique visitor):是指通過互聯網訪問、瀏覽這個網頁的自然人,訪問的一個電腦客戶端為一個訪客,一天內同一個訪客僅被計算一次,

Redis 2.8.9 版本更新了 hyperloglog 資料結構,是基于基數統計的演算法,

hyperloglog 的優點是占用記憶體小,并且是固定的,存盤 2^64 個不同元素的基數,只需要 12 KB 的空間,但是也可能有 0.81% 的錯誤率,

這個資料結構常用于統計網站的 UV,傳統的方式是使用 set 保存用戶的ID,然后統計 set 中元素的數量作為判斷標準,但是這種方式保存了大量的用戶 ID,ID 一般比較長,占空間,還很麻煩,我們的目的是計數,不是保存資料,所以這樣做有弊端,但是如果使用 hyperloglog 就比較合適了,

127.0.0.1:6379> pfadd mykey a b c d e f g h i j	# 創建第一組元素
(integer) 1
127.0.0.1:6379> PFCOUNT mykey					# 統計 mykey 基數
(integer) 10
127.0.0.1:6379> PFADD mykey2 i j z x c v b n m  # 創建第二組元素
(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
127.0.0.1:6379> 

3、bitmap 位圖

bitmap就是通過最小的單位bit來進行0或者1的設定,表示某個元素對應的值或者狀態,一個bit的值,或者是0,或者是1;也就是說一個bit能存盤的最多資訊是2,

bitmap 常用于統計用戶資訊比如活躍粉絲和不活躍粉絲、登錄和未登錄、是否打卡等,

這里使用一周打卡的案例說明其用法:

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 1
(integer) 0
127.0.0.1:6379> setbit sign 6 0
(integer) 0
127.0.0.1:6379> 

查看某一天是否打卡:

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> 

統計:統計打卡的天數

127.0.0.1:6379> BITCOUNT sign
(integer) 4
127.0.0.1:6379> 

下一篇筆記將介紹 Redis 的事務和Spring Boot 整合 Redis,

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/3170.html

標籤:NoSQL

上一篇:Redis系列(一)Redis入門

下一篇:Redis系列(三)Redis的事務和Spring Boot整合

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more