Redis基础知识——数据类型及其命令
Redis
- 五大数据类型
- Redis-key
- String
- List
- Set
- Hash
- Zset(有序集合)
- 三种特殊数据类型
- Geospatial 地理位置
- Hyperloglog
- Bitmap
- 事务
五大数据类型
Redis-key
# 1.type 返回key所存储的值的类型
# 返回值 返回 key 的数据类型,数据类型有:
# none (key不存在)
# string (字符串)
# list (列表)
# set (集合)
# zset (有序集)
# hash (哈希表)
127.0.0.1:6379> set weather "sunny"
OK
127.0.0.1:6379> type weather
string# 2.rename 修改key的名称
# 改名成功则返回ok,失败则返回一个错误
127.0.0.1:6379> rename weather tianqi
OK
127.0.0.1:6379> get weather
(nil)
127.0.0.1:6379> get tianqi
"sunny"
# newkey已存在时,rename会覆盖旧newkey
127.0.0.1:6379> set pc "lenovo"
OK
127.0.0.1:6379> set perspnal_computer "dell"
OK
127.0.0.1:6379> rename pc personal_computer
OK
127.0.0.1:6379> get pc
(nil)
127.0.0.1:6379> get personal_computer #原来的值dell被覆盖了
"lenovo"
# 另一种可防止原来的newkey被覆盖 renamenx 仅当newkey不存在时改名# 3.persist 移除key的过期时间,key将持久化保持
127.0.0.1:6379> persist tianqi #未设置过期时间的话 无法执行
(integer) 0
127.0.0.1:6379> expire tianqi 10
(integer) 1
127.0.0.1:6379> persist tianqi
(integer) 1
127.0.0.1:6379> ttl tianqi
(integer) -1# 4.move 将当前数据库的key 移动到给定的数据库db中
# 语法 move key db
# 成功返回1, 失败返回0
# 若key不存在,执行失败;若源数据库和目标数据库有相同的key时,执行失败。
# 默认当前所在的数据库是0
127.0.0.1:6379> move tianqi 1
(integer) 1
127.0.0.1:6379> exists tianqi
(integer) 0
127.0.0.1:6379> select 1 #使用数据库1
OK
127.0.0.1:6379[1]> exists song
(integer) 1# 5.dump 用于序列化给定key,并返回被序列化的值
# 6.expire key second 设置key的过期时间(秒) 过期后将不再可用
# 成功返回1,失败返回0
# 7.ttl 返回给定key的剩余生存时间
# key不存在返回-2,key存在但没有设置过期时间,返回 -1,否则返回 key的剩余生存时间。* redis2.8以前,前两种情况都返回-1.
# 8.del key 在key存在时删除key 不存在则被hulue
# 返回被删除key的数量
# 9.keys pattern 查找所有符合pattern的key
# e.g.keys * 查找所有的key
# 返回符合pattern的key列表
String
# 1.append key value
# 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
# 如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
# 返回追加指定值之后字符串的长度
127.0.0.1:6379> exists my
(integer) 0
127.0.0.1:6379> append my "kuang"
(integer) 5
127.0.0.1:6379> append my "lifang"
(integer) 11
127.0.0.1:6379> get my
"kuanglifang"# 2.strlen key 返回key所存储的字符串值的长度
# 正常返回字符串的长度,当key不存在时,返回0,key存储的不是字符串值时,返回一个错误
# 3.incr/decr key 将key中存储的数字值增/减1
# 若key不存在,那key的值会先初始化为0,再执行操作;若值包含错误的类型,或字符串类型的值不能表示为数字,则返回一个错误。
# 4.incrby key num 将key所存储的值加上给定的增量值num
# 返回的判定与incr相同
# 5.getrange key start end 返回key中字符串值得子字符
127.0.0.1:6379> set mykey "hello,word"
OK
127.0.0.1:6379> getrange mykey 0 5
"hello,"
127.0.0.1:6379> getrange mykey 0 56
"hello,word"
127.0.0.1:6379> getrange mykey 0 -1
"hello,word"# 6.setrange key offset value 用value覆写给定key所存储的字符串值,从offset开始
# 返回被修改后的字符串长度
127.0.0.1:6379> set mykey "hello world"
OK
127.0.0.1:6379> setrange mykey 6 "redis"
(integer) 11
127.0.0.1:6379> get mykey
"hello redis"# 7.setex key timeout value 将value关联到key,并将key的过期时间设为second(秒) 若key已经存在,将会替换旧的值
# 成功返回ok
# 8.setnx key value key不存在时,为key设置指定的值
# 成功返回1,失败返回0
127.0.0.1:6379> exists job
(integer) 0
127.0.0.1:6379> setnx job "programmer"
(integer) 1
127.0.0.1:6379> setnx job "myjob"
(integer) 0
127.0.0.1:6379> get job
"programmer"# 9.mset 设置一个或多个key-value对 总是返回ok
127.0.0.1:6379> mset k1 "hello" k2 "world"
OK
127.0.0.1:6379> get k1
"hello"
127.0.0.1:6379> get k2
"world"# 10.mget 获取一个或多个给定key的值# 11.msetnx 设置一个或多个key-value对,当且仅当所有给定的key都不存在
# 当所有key都成功设置,返回1,有一个key设置失败,返回0# 12.设置对象
127.0.0.1:6379> set user:1 {name:zhangsan,age:3}
OK
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 2
OK
127.0.0.1:6379> keys *1) "user:1:age"2) "user:1"3) "user:1:name"
127.0.0.1:6379> get user:1
"{name:zhangsan,age:3}"
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "2"
List
# 一般都以 l开头
127.0.0.1:6379> lpush list one #在redis2.4之前,都只接收单个value值
(integer) 1 #返回执行命令后,列表的长度
127.0.0.1:6379> lpush list two #在表头插入数据
(integer) 2
127.0.0.1:6379> lrange list 0 -1 #获取列表的内容
1) "two"
2) "one"
127.0.0.1:6379> lrange list 0 1 #获取列表指定范围内的元素
1) "two"
2) "one"
127.0.0.1:6379> rpush list right #在表尾插入数据
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3) "right"
127.0.0.1:6379> lpop list #移出并获取列表的第一个元素
"two"
127.0.0.1:6379> rpop list #移出并获取列表的最后一个元素
"right"
127.0.0.1:6379> lrange list 0 -1
1) "one"
127.0.0.1:6379> lindex list 0 #通过索引获取具体的某个数据
"one"
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> llen list #获取列表的长度
(integer) 3
127.0.0.1:6379> lpush list three
(integer) 4
# lrem key count value
# count > 0:从表头开始向表尾搜索,移除与value相等的元素,数量为count
# count < 0:从表尾开始向表头搜索
# count = 0:移除表中所有与value相等的值
127.0.0.1:6379> lrem list 1 one #移除列表元素
(integer) 1 #返回被移除元素的数量,列表不存在时返回0
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
127.0.0.1:6379> lrem list 1 three
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrem list 2 three
(integer) 2
###############################################################################################
127.0.0.1:6379> rpush mylist "hello"
(integer) 1
127.0.0.1:6379> rpush mylist "hello1"
(integer) 2
127.0.0.1:6379> rpush mylist "hello2"
(integer) 3
127.0.0.1:6379> ltrim mylist 1 2 #让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello2"
127.0.0.1:6379> rpoplpush mylist otherlist #移除列表的最后一个元素,并将该元素添加到另一个列表并返回
"hello2"
127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
127.0.0.1:6379> lrange otherlist 0 -1
1) "hello2"
127.0.0.1:6379> exists l
(integer) 0
#############################################################################################
127.0.0.1:6379> lset l 0 item #通过索引设置列表元素的值 当索引参数超出范围或对一个空列表操作时,返回一个错误,成功返回ok
(error) ERR no such key
127.0.0.1:6379> lpush l value1
(integer) 1
127.0.0.1:6379> lrange l 0 0
1) "value1"
127.0.0.1:6379> lset l 1 other
(error) ERR index out of range
############################################################################################
127.0.0.1:6379> rpush list "hello"
(integer) 1
127.0.0.1:6379> rpush list "world"
(integer) 2
127.0.0.1:6379> linsert list before "world" "other" #在列表的元素前/后插入元素
(integer) 3 #若命令执行成功,返回操作完成后列表的长度,若没有找到指定元素,返回-1,若key不存在或为空列表,返回0
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "other"
3) "world"
127.0.0.1:6379> linsert list after world new
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "other"
3) "world"
4) "new"
# 注意 如果移除了所有值,空链表,也代表不存在
Set
127.0.0.1:6379> sadd myset "hello" #向集合添加一个或多个成员 当集合不是集合类型时,返回一个错误
(integer) 1
127.0.0.1:6379> sadd myset "kuangliifang" "love" #redis2.4之前,sadd只接受单个成员值
(integer) 2
127.0.0.1:6379> smembers myset #返回集合中的所有成员 不存在的集合key被视为空集合
1) "hello"
2) "love"
3) "kuangliifang"
127.0.0.1:6379> sismember myset hello #判断member元素是否是集合key的成员
(integer) 1 #是 返回1
127.0.0.1:6379> sismember myset world
(integer) 0 #不是或key不存在 返回0
127.0.0.1:6379> scard myset #获取集合的成员数
(integer) 3 #若key不存在 返回0
127.0.0.1:6379> srem myset hello #移除集合中一个或多个成员 不存在的成员会被忽略 redis2.4以前只接受单个成员值
(integer) 1 #当key不是集合类型,返回一个错误
127.0.0.1:6379> scard myset
(integer) 2
127.0.0.1:6379> smembers myset
1) "love"
2) "kuangliifang"
127.0.0.1:6379> srandmember myset #返回集合中一个或多个随机数
"kuangliifang"
#redis2.6开始,接受可选的count参数
#如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。
#如果 count 大于等于集合基数,那么返回整个集合。
#如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。
127.0.0.1:6379> srandmember myset 2
1) "kuangliifang"
2) "love"
127.0.0.1:6379> smembers myset
1) "love"
2) "kuangliifang"
127.0.0.1:6379> spop myset #移除并返回集合中的一个随机元素
"love"
127.0.0.1:6379> smembers myset
1) "kuangliifang"
127.0.0.1:6379> sadd myset1 "hello"
(integer) 1
127.0.0.1:6379> sadd myset1 "world" "klf"
(integer) 2
127.0.0.1:6379> sadd myset2 "set2"
(integer) 1
127.0.0.1:6379> smove myset1 myset2 "klf" #若源集合不存在指定的member元素,则不执行,仅返回0,若目标集合已经包含member元素,则该命令只是简单的将源集合中的member元素删除。
(integer) 1
127.0.0.1:6379> smembers myset1
1) "world"
2) "hello"
127.0.0.1:6379> smembers myset2
1) "klf"
2) "set2"
127.0.0.1:6379> sdiff myset1 myset2 #返回集合的差集
1) "hello"
2) "world"
127.0.0.1:6379> sinter myset1 myset2 #返回集合的交集
(empty list or set)
127.0.0.1:6379> sunion myset1 myset2 #返回集合的并集
1) "hello"
2) "world"
3) "set2"
4) "klf"
Hash
更适合于对象的存储,String更加适合字符串存储
127.0.0.1:6379> hset myhash field1 klf #为字段赋值
(integer) 1 #是新建字段并赋值成功
127.0.0.1:6379> hget myhash field
(nil)
127.0.0.1:6379> hget myhash field1
"klf"
127.0.0.1:6379> hset myhash field1 hello #字段已经存在哈希表中,旧值将被覆盖
(integer) 0 #返回0
127.0.0.1:6379> hget myhash field1
"hello"
127.0.0.1:6379> hmset myhash field2 world field3 value #设置多对值
OK
127.0.0.1:6379> hmget myhash field1 field2 field3 #获取多个值
1) "hello"
2) "world"
3) "value"
127.0.0.1:6379> hmset myhash field2 hello field vue #若字段已存在则会覆盖旧值
OK
127.0.0.1:6379> hmget myhash field2 field
1) "hello"
2) "vue"
127.0.0.1:6379> hgetall myhash #获取所有的键值对
1) "field1" #每个字段名之后是字段的值
2) "hello"
3) "field2"
4) "hello"
5) "field3"
6) "value"
7) "field"
8) "vue"
127.0.0.1:6379> hdel myhash field #删除一个或多个指定字段
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "hello"
3) "field2"
4) "hello"
5) "field3"
6) "value"
127.0.0.1:6379> hlen myhash #获取字段的数量
(integer) 3
127.0.0.1:6379> hexists myhash field1 #判断是否存在某个字段
(integer) 1
127.0.0.1:6379> hexists myhash field
(integer) 0
127.0.0.1:6379> hkeys myhash #获取哈希表中所有的字段名
1) "field1"
2) "field2"
3) "field3"
127.0.0.1:6379> hvals myhash #获取哈希表中所有字段的值
1) "hello"
2) "hello"
3) "value"
127.0.0.1:6379> hset myhash field4 5
(integer) 1
# 如果哈希表不存在 则会先创建表
# 如果指定的字段不存在 会先将字段的值初始化为0
127.0.0.1:6379> hincrby myhash field4 1
(integer) 6
127.0.0.1:6379> hincrby myhash field4 -1 #增量可以为负数
(integer) 5
127.0.0.1:6379> hsetnx myhash field5 hello #字段不存在时设置字段的值
(integer) 1
127.0.0.1:6379> hsetnx myhash field5 hel
(integer) 0 #若存在且没有操作被执行 则返回0
Zset(有序集合)
127.0.0.1:6379> zadd myzset 1 hello #有序集合不存在时,先创建再执行zadd操作
(integer) 1 #返回被成功添加的成员个数
127.0.0.1:6379> zadd myzset 2 world 3 klf #redis2.4以前 zadd每次只能添加一个元素
(integer) 2
127.0.0.1:6379> zrange myzset 0 -1
1) "hello"
2) "world"
3) "klf"
127.0.0.1:6379> zcount myzset 1 3 #计算在有序集合中指定区间分数的成员数
(integer) 3
127.0.0.1:6379> zadd myzset 0 hello #某个成员已经是有序集合的成员,就更新这个成员的分数值,并重新插入这个成员
(integer) 0 #那些被更新、已经存在的成员被忽略
# 通过分数返回有序集合指定区间内的成员(从小到大)
# 默认情况下,区间的取值使用闭区间(小于等于或大于等于),可通过给参数前增加“(”符号来使用可选的开区间
# zrangebyscore myzset (1 5 返回所有符合条件 1 < score <= 5的成员
127.0.0.1:6379> zrangebyscore myzset -inf +inf withscores #显示整个有序集合的值并带上score值
1) "hello"
2) "0"
3) "world"
4) "2"
5) "klf"
6) "3"
127.0.0.1:6379> zadd salary 2500 xiaoheng 5000 zhangsan 500 klf
(integer) 3
127.0.0.1:6379> zrangebyscore salary -inf +inf
1) "klf"
2) "xiaoheng"
3) "zhangsan"
127.0.0.1:6379> zrevrange salary 0 -1 #返回有序集合中指定区间内的成员 分数从大到小
1) "zhangsan"
2) "xiaoheng"
3) "klf"
127.0.0.1:6379> zrangebyscore salary -inf +inf withscores
1) "klf"
2) "500"
3) "xiaoheng"
4) "2500"
5) "zhangsan"
6) "5000"
127.0.0.1:6379> zrangebyscore salary -inf 2500 withscores #返回分数小于等于2500的成员
1) "klf"
2) "500"
3) "xiaoheng"
4) "2500"
127.0.0.1:6379> zrem salary xiaoheng #移除有序集合中的一个或多个成员 redis2.4以前 每次只能删除一个元素
(integer) 1 #被成功移除的成员数量
127.0.0.1:6379> zrange salary 0 -1
1) "klf"
2) "zhangsan"
127.0.0.1:6379> zcard salary #获取有序集合的成员数
(integer) 2
127.0.0.1:6379> zadd salary 6000 tom
(integer) 0
127.0.0.1:6379> zrangebyscore salary -inf +inf withscores
1) "klf"
2) "500"
3) "zhangsan"
4) "5000"
5) "tom"
6) "6000"
127.0.0.1:6379> zrevrank salary tom #返回有序集合中成员的排名,从大到小排序,排名以0为底 使用zrank可以获得从小到大排列的排名
(integer) 0
三种特殊数据类型
Geospatial 地理位置
127.0.0.1:6379> geoadd china:city 116.40 39.90 beijing #将指定的地理空间位置添加到key中
(integer) 1 #返回添加成功的数目,但不包括已更新score的元素
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 shenzhen
(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 china:city beijing #返回元素的位置
1) 1) "116.39999896287918"2) "39.900000091670925"
127.0.0.1:6379> geopos china:city beijing chongqing
1) 1) "116.39999896287918"2) "39.900000091670925"
2) 1) "106.49999767541885"2) "29.529999579006592"
127.0.0.1:6379> geodist china:city beijing shanghai km #返回两个给定位置之间的距离 元素不存在的话返回空值 默认单位是米
"1067.3788"
127.0.0.1:6379> georadius china:city 110 30 1000 km #以给定的经纬度为中心,找出某一半径内的元素
1) "chongqing"
2) "xian"
3) "shenzhen"
4) "hangzhou"
127.0.0.1:6379> georadius china:city 110 30 500 km withdist # 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 # withcoord 将位置元素的经纬度也一起返回
1) 1) "chongqing"2) 1) "106.49999767541885"2) "29.529999579006592"
2) 1) "xian"2) 1) "108.96000176668167"2) "34.2599996441893"
127.0.0.1:6379> georadius china:city 110 30 500 km withcoord withdist count 2 # count 获取前n个匹配元素
1) 1) "chongqing"2) "341.9374"3) 1) "106.49999767541885"2) "29.529999579006592"
2) 1) "xian"2) "483.8340"3) 1) "108.96000176668167"2) "34.2599996441893"
127.0.0.1:6379> georadiusbymember china:city beijing 1000 km # 找出位于指定范围内的元素
1) "beijing"
2) "xian"
127.0.0.1:6379> geohash china:city beijing chongqing
1) "wx4fbxxfke0"
2) "wm5xzrybty0"
Hyperloglog
127.0.0.1:6379> pfadd h1 foo zap a # 添加指定元素
(integer) 1 # 如果至少有一个元素被添加返回1
127.0.0.1:6379> pfadd h1 zap zap zap
(integer) 0 # 都没添加成功 返回0
127.0.0.1:6379> pfadd h1 zap
(integer) 0
127.0.0.1:6379> pfcount h1 # 返回给定Hyperloglog的基数估算值
(integer) 3
127.0.0.1:6379> pfadd h2 a b
(integer) 1
127.0.0.1:6379> pfmerge h3 h1 h2 # 将多个Hyperloglog合并为一个 第一个参数为目标Hyperloglog
OK
127.0.0.1:6379> pfcount h3
(integer) 4
Bitmap
Bitmap位图,数据结构,都是操作二进制来进行记录,就只有0和1两个状态
# 使用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 0
(integer) 0
127.0.0.1:6379> setbit dign 6 0
(integer) 0
127.0.0.1:6379> getbit sign 3 # 查看某一天是否打卡
(integer) 1
127.0.0.1:6379> bitcount sign # 统计这周的打卡记录
(integer) 3
事务
Redis 事务本质:一组命令的集合! 一个事务中的所有命令都会被序列化,在事务执行过程的中,会按照顺序执行!
Redis事务没有隔离级别的概念
所有的命令在事务中,并没有直接被执行,只有发起执行命令的时候才会执行!即 Exec
Redis单条命令式保证原子性,但事务不保证原子性
redis的事务:
- 开启事务(multi)
- 命令入队
- 执行事务(exec)
###########################正常执行事务#################################
127.0.0.1:6379> multi # 开启事务
OK
127.0.0.1:6379> set k1 v1 # 命令入队
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> get k2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> exec # 执行事务
1) OK
2) OK
3) "v2"
4) OK
###########################放弃执行事务#################################
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> discard # 取消事务
OK
127.0.0.1:6379> get k4 # 事务中的命令都不会被执行
(nil)
###########################编译型异常##################################
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> getset k3 # 错误的命令
(error) ERR wrong number of arguments for 'getset' command
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> exec # 执行事务报错
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get k4 # 所有命令不会被执行
(nil)
###########################运行时异常##################################
127.0.0.1:6379> set k1 "v1"
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incr k1 # 执行时会失败
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> get k3
QUEUED
127.0.0.1:6379> exec
1) (error) ERR value is not an integer or out of range # 第一条命令失败 但是其他的依然正常执行成功了
2) OK
3) OK
4) "v3"
127.0.0.1:6379> get k2
"v2"
监控 (Watch)
悲观锁:
- 很悲观,认为什么时候都会出问题,无论做什么都会加锁
乐观锁:
- 很乐观,认为什么时候都不会出现问题,所以不会上锁,更新数据的时候去判断一下,在此期间是否有人修改过这个数据
- 获取version
- 更新的时候比较version
##########################测监视测试###################################
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 # 监视 watch对象
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> decrby money 20
QUEUED
127.0.0.1:6379> incrby out 20
QUEUED
127.0.0.1:6379> exec # 事务正常结束,数据期间没有发生变化,这时候就正常执行成功
1) (integer) 80
2) (integer) 20
Redis基础知识——数据类型及其命令相关推荐
- Redis基础知识+安装+常用命令使用
Redis NoSql概述 为什么用NoSql 单机MySQL的时代! 上古90年代,更多的是静态网页,动态交互类型的网站不多.一个基本网站访问量一般不会太大,单个数据库可以轻松应付. 现如今的大数据 ...
- Redis(三):Redis基础知识与常用命令
1.基础命令 Redis默认有16个数据库,用的是第0个数据库,可以使用select进行切换数据库,使用DBSIZE查看DB大小(只针对当前数据库). 使用keys * 查看当前数据库下所有的key, ...
- 技术实践|Redis基础知识及集群搭建(上)
Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.本篇文章围绕Redis基础知识及集群搭建相关内容进行了分享,希 ...
- Redis基础 概念 数据类型 常用指令 Jedis 持久化
Redis基础 概念 数据类型 常用指令 Jedis 持久化 1. Redis 简介 1.1 NoSQL概念 1.1.1 问题现象 1.1.2 NoSQL的概念 1.2 Redis概念 1.2.1 r ...
- Redis基础知识入门
Redis快速入门 博主关于Redis高级特性的一些讲解,传送地址如下: 删除策略与淘汰策略详解 主从复制详解 哨兵模式详解 集群详解 缓存预热 & 缓存雪崩 & 缓存击穿 & ...
- 解析Redis操作五大数据类型常用命令
摘要:分享经常用到一些命令和使用场景总结,以及对Redis中五大数据类型如何使用cmd命令行的形式进行操作的方法. 本文分享自华为云社区<Redis操作五大数据类型常用命令解析>,作者:灰 ...
- C语言基础知识-数据类型
C语言基础知识-数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量与变量 1>.关键字 C的关键字共有32个.1>.数据类型关键字(12个)char,sh ...
- 【Java从0到架构师】Linux 基础知识、常用命令
Linux 基础知识.常用命令 Linux 基础知识 内核和发行版 常见的 Linux 发行版 Linux 的应用领域 Linux 与 Windows 的区别 Linux 常用命令 *系统目录结构 s ...
- Redis学习 - NoSQL简介、redis安装、redis基础知识、数据类型、持久化、订阅发布、主从复制、哨兵模式、缓存击穿和雪崩
学习视频地址:https://www.bilibili.com/video/BV1S54y1R7SB 完结撒花,感谢狂神 文章目录 1. NoSQL 1.1 单机Mysql的演进 1.2 当今企业架构 ...
最新文章
- MinkowskiEngine多GPU训练
- IExtensibleObjectExtensibleHttpApplication的性能问题
- 计算机主机硬件图片,电脑主机内部有哪些硬件
- 谈谈java中的集合框架
- stm32基本入门(一)
- pandas 字符串切片后保存_Pandas时间序列基础详解(转换,索引,切片)
- jquey知识点整理
- make[1]: *** [storage/perfschema/unittest/CMakeFiles/pfs_connect_attr-t.dir/all] 错误 2 解决方法...
- L298N电机驱动模块的简单介绍
- 【系统分析师之路】系统分析师冲刺习题集(企业信息化)
- pdfminer将pdf转为csv
- Android实现通话呼叫转移与监听通话录音功能
- netware 6.5的故障解决
- 结合mahout的数据挖掘算法介绍
- 谷歌默认打开hao123
- Spring Tools Suite(STS)的下载与安装
- html调微信加好友,个人微信加好友的四个实用方法
- 【原】群晖btrfs系统修复
- 【数据技术】关于HP Vertica MPP列式数据库资源池设置的一点心得
- 大一集训--c++ set集合
热门文章
- 安卓AlarmManager(闹钟服务)
- 从测试和 QA 角度,如何看待 Ant Design 圣诞节彩蛋事件?
- C++课程设计,题目:通讯录管理系统
- 红外目标模拟器中的高精度可编程TEC半导体温度控制解决方案
- linux实验:基于mykernel的一个简单的时间片轮转多道程序内核代码分析
- 网络工程师——初步了解
- gym102460 2019ICPC台湾L Largest Quadrilateral
- android 下载apk并自动安装,Android下载apk并自动安装(兼容Android7.0)
- 好文章,《李录:现代化十六讲》
- 商派ECmall的支付接口初探(一)