redis 复习


Redis 概述

是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

优点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

  • Redis支持数据的备份,即master-slave模式的数据备份。

Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化
  • 不仅支持K-V类型数据,支持多数据结构存储
  • redis支持数据备份master-slave模式数据备份

优势

  • 性能极高
  • 丰富的数据类型
  • Redis的单个操作都是原子性的
  • 丰富的特性 eg:发布/订阅, 通知, key 过期等等特性

Redis 操作

数据库操作
16个数据库为:DB 0~DB 15

切换到DB n
dbsize 可以查看当前数据库的大小,与key数量相关。
>select n

>dbsize

keys * :查看当前数据库中所有的key。

flushdb:清空当前数据库中的键值对。

flushall:清空所有数据库的键值对。

redis 基本命令

命令描述
exists key命令用于检查给定 key 是否存在,1 key存在,0 key不存在
move key db将当前数据库的 key 移动到数据库 db 当中,如果 key 在目标数据库中已存在,或者 key 在源数据库中不存,则key 不会被移动
del key命令用于删除给定的一个或多个 key
explre keys seconds命令设置 key 的过期时间
tll key查看key 的剩余过期时间
rename key newkey命令用于修改 key 的名字为 newkey
type key以字符串的形式返回存储在 key 中的值的类型

五大数据类型

  1. String
命令描述
append key value存在就追加字符串,不存在就 set ;返回值 执行后的字符串值的长度
decr keykey 储存的数字值减去一 key 不存在 先初始化为 0 然后再执行 DECR 操作
incr key储存的数字值增一
incrby key increment将 key 中储存的数字加上指定的增量
decrby key increment将 key 中储存的数字减去指定的增量
incrbyfloat key incremet为键 key 中储存的值加上浮点数增量 increment
strlen key用于获取指定 key 所储存的字符串值的长度
getrange key start end获取字符串【start , end】范围的字串
setrange key offset value从 offset 位置开始用value 覆盖
getset key value将键 key 的值设为 value , 并返回键 key 在被设置之前的旧值.
setnx key value命令在指定的 key 不存在时,为 key 设置指定的值,这种情况下等同 SET 命令。当 key存在时,什么也不做
setex key seconds value命令将键 key 的值设置为 value , 并将键 key 的生存时间设置为 seconds 秒钟。
mset key value [key value …]命令设置多个 key 的值为各自对应的 value
msetnx key value [key value …]当且仅当所有给定键都不存在时, 为所有给定键设置值
mget key [key …]返回所有(一个或多个)给定 key 的值,值的类型是字符串。
  1. List

列表是简单的字符串列表,可以对列表的头部(左边)或者尾部(右边)操作,命令也就分为了LXXX和RLLL

命令描述
[L/R]push key value用于将一个或多个值插入到列表key 左或者右 多值一个一个插入
lrange key start end用于返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定
[L/R]pushx key value在当 key 存在并且存储着一个 list 类型值时,向值 list 的头部插入 value。 与 LPUSH 相反,当key 不存在时,不操作
linsert key before/after pivot value把 value 插入存于 key 的列表中在基准值pivot 的前面或后面
llen key返回存储在 key 里的list的长度
lindex key index返回列表里的元素的索引== index ==存储在 key 里面。
lset key index value设置 index 位置的list元素的为 value。
[l/r]pop key移除并且返回 key 对应的 list 的左边或右边第一个元素
rpoplpush key1 key2移除key1右侧最后一个元素并将该元素放在KGY2的列表头部
ltrim key start stop返回指定范围的元素
lrem key count value移除前 count 次出现的值为 value 的元素
  1. Set
命令描述
sadd key member添加一个或多个指定的member元素到集合的 key中.
scard key元素的数量
smembers key返回key集合所有的元素
sismember key member返回 member是否是存储的集合Key的成员,是返回1,不存在返回0
spop key [count]从存储在key的集合中移除并返回一个或多个随机元素。
smove key1 key2 member将member从key1 移动到key2
srem key member member在key集合中移除指定的元素.
sdiff key [key …]返回一个集合与给定集合的差集的元素.
sinter key [key …]返回指定所有的集合的成员的交集.
sunion key [key …]返回给定的多个集合的并集中的所有成员.
  1. Hash
命令描述
hset key field value设置 key 指定的哈希集中指定字段的
hmset key field value设置 key 指定的哈希集中指定字段的值
hsetnx key field value只在 key 指定的哈希集中不存在指定的字段设置字段的
hexists key field返回hash里面field是否存在
hget key field返回 key 指定的哈希集中该字段所关联的
hmget key field返回 key 指定的哈希集中指定字段的值
hgetall key返回 key 指定的哈希集中所有字段和值
hkeys key返回 key 指定的哈希集中所有字段的名字
hlen key== 返回== key 指定的哈希集包含的字段的数量
hvals key返回 key 指定的哈希集中所有字段的值
hdel key field [field]从 key 指定的哈希集中移除指定的字段。在哈希集中不存在的字段将被忽略。
hincrby key field incr增加 key 指定的哈希集中指定字段的数值
hincrbyfloat key field incr增加 key 指定的哈希集中指定字段float数值
  1. Zset

ZADD key [NX|XX] [CH] [INCR] score member [score member …]
将所有指定成员添加到键为key有序集合(sorted set)里面,添加时可以指定多个分数/成员(score/member)对。
XX: 仅仅更新存在的成员,不添加新成员。
NX: 不更新存在的成员。只添加新成员。
CH: 修改返回值为发生变化的成员总数,原始是返回新添加成员的总数 (CH 是 changed 的意思)。更改的元素是新添加的成员,已经存在的成员更新分数。 所以在命令中指定的成员有相同的分数将不被计算在内。
INCR: 当ZADD指定这个选项时,成员的操作就等同ZINCRBY命令,对成员的分数进行递增操作。

ZCARD key
返回key的有序集元素个数

ZCOUNT key min max
返回有序集key中,score值在min和max之间

ZSCORE key member
返回有序集key中,成员member的score值

ZRANK key member
返回有序集key中成员member的排名

ZRANGE key start stop [WITHSCORES]
返回存储在有序集合key中的指定范围的元素。

ZREVRANGE key start stop [WITHSCORES]
返回有序集key中,指定区间内的成员。

ZREM key member [member …]
删除有序集合中的元素,当key存在,但是其不是有序集合类型,就返回一个错误。

Geospatial (地理位置)
GEOADD key longitude latitude member [longitude latitude member …]
将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。

GEOPOS key member [member …]
从key里返回所有给定位置元素的位置(经度和纬度)。

GEODIST key member1 member2 [unit]
返回两个给定位置之间的距离

GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
以给定的经纬度为中心, =返回=键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
WITHDIST: 在返回位置元素的同时,将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。
WITHCOORD: 将位置元素的经度和维度也一并返回。
WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。

GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
找出位于指定元素周围的其他元素

Hyperloglog(基数)

PFADD key element [element …]
添加指定元素到 HyperLogLog 中。

PFCOUNT key [key …]
返回给定 HyperLogLog 的基数估算值

PFMERGE destkey sourcekey [sourcekey …]
将多个 HyperLogLog合并(merge)为一个 HyperLogLog 。

BiMaps(位图)

SETBIT key offset value
设置或者清空key的value(字符串)在offset处bit值

GETBIT key offset
返回ey对应的string在offset处的bit值

BITCOUNT key [start end]
统计字符串被设置为1的bit数.

二、python 连 redis

import redis
r = redis.Redis(host='192.168.136.102', port=6379, db=0,decode_responses=True)
import redis    # 导入redis 模块
pool = redis.ConnectionPool(host='192.168.136.102', port=6379, decode_responses=True)
r = redis.Redis(connection_pool=pool)

String 字符串
1.String set 设置单个键值

set(name, value, ex=None, px=None, nx=False, xx=False)
ex:过期时间(秒),时间到了后redis会自动删除
px:过期时间(毫秒),时间到了后redis会自动删除。ex、px二选一即可
nx:如果设置为True,则只有name不存在时,当前set操作才执行
xx:如果设置为True,则只有name存在时,当前set操作才执行

String get 获取单个值

v = r.get('name')
print(v)

3.String mset 设置多个键值

mset(*args, **kwargs)
name_dict = {
    'name_1' : 'zhangsan',
    'name_2' : 'lisi'
}
r.mset(name_dict)

4.String mget 获取多个值

mget(keys, *args)
r.mget('name_1', 'name_2')

5.String setrange 根据索引修改某个键的value值

setrange(name, offset, value)

返回值为:修改后的字符串长度
name:键,所给不存在时自动添加
offset:偏移量,以0开始
value:修改的字符或字符串,字符串时以offset向后顺延

length = r.setrange('name_2', 1, 'zhihu')
print(length)
  1. ==getrange ==根据索引获取某个键的部分value值
    若所给的键不存在时,返回空值 b’’
getrange(key, start, end)
v = r.getrange('name_1', 0, 2)

7.String strlen 获取value的长度
strlen(name)
所给的键不存在时,返回值为0

length = r.strlen('name_2')

String append value后面追加
append(key, value)
若所给的键不存在,则设置新值,返回值为修改后的字符串的长度

length = r.append('name_1', '666')

1.lpush(key , value) 将一个或多个值 value 插入到列表 key 的表头

 r.lpush('list', 'a', 'b', 'c', 'd')

2.rpush(key , value) 将一个或多个值 value 插入到列表 key 的表尾

 r.rpush('rlist', 'a', 'b', 'c', 'd')

3.llen key 返回列表 key 的长度

 r.llen('list')

4.lrem key count value 根据参数 count 的值,移除列表中与参数 value 相等的元素

r.lrem('list',2, 'b')

集合

1.sadd(name,values) 向对应的集合中添加元素

r.sadd("set1", 33, 44, 55, 66) 

2.scard(name)
获取name对应的集合中元素个数

r.scard('set1')

3.srandmember key [count] 返回集合中的 1 或 count 个随机元素

r.srandmember("set1") 

4.==spop ==key 移除并返回集合中的一个随机元素获取name对应的集合中元素个数

r.spop('set1')

5.smove source destination member 将 member 元素从 source 集合移动到 destination 集合

  r.smove('set1', 'set2', 66)

Hash

1.hmset key field value [field value …]同时将多个 field-value (域-值)对设置到哈希表 key 中

r.hmset('zhangsan',{'name':'zhangsan','age':20,'tel':123456})

2.Hash hmget 获取哈希中多个键值对
hmget(name, keys, *args)
返回值:值的列表 list 形如: [‘1’, ‘123’] <class ‘list’>

r.hmget('zhangsan', ['sex', 'tel'])

3.Hash hget 获取指定key的值

hget(name, key)
r.hget('zhangsan', 'tel')

4.Hash hgetall 获取哈希中所有的键值对
hgetall(name)
返回值:dict类型

r.hgetall('zhangsan')

有序集合
1.Zset zadd 有序集合中添加元素
zadd(name, *args, **kwargs)
添加元素时需指定元素的分数
返回值:返回添加的个数

r.zadd('myzset', {'a': 3, 'b': 4,'c':5})
r.zadd('myzset', 'a', 3, 'b', 4,'c',5})  #不同版本

2.Zset ==zcard ==返回有序集合中元素个数
zcard(name)

v = r.zcard('myzset')

3.Zset zscore 返回有序集合中指定某个值的分数
zscore(name, value)
返回值:float 类型的分数;形如: -5.0 <class ‘float’>

v = r.zscore('myzset', ‘a’)

Zset zincrby 增加有序集合中某个值的分数
zincrby(name, value, amount=1)
value:若存在,则增加其amount分数;若不存在,则增加新值以及对应的分数
amount:增加的值,可以为负数
返回值:增加后的分数 float类型 ;

v = r.zincrby('myzset',1,’a’)

4.Zset zincrby 增加有序集合中某个值的分数
zincrby(name, value, amount=1)
value:若存在,则增加其amount分数;若不存在,则增加新值以及对应的分数
amount:增加的值,可以为负数
返回值:增加后的分数 float类型 ;

v = r.zincrby('myzset',1,’a’)

Zset zrevrange 返回有序集合分数排序的一段数据
zrevrange(name, start, end, withscores=False, score_cast_func=float)
name:redis的name
start:有序集合索引起始位置(非分数)
end:有序集合索引结束位置(非分数)
withscores:是否获取元素的分数,默认只获取元素的值
score_cast_func:对分数进行数据转换的函数
返回值:list类型

r.zadd('myzset1', {'a': 4, 'b': 2,'c':3,'d':6,'e':1,'f':9})
def double(num):
    return float(num)*float(num)
print(r.zrevrange('myzset1',0,3,withscores=True))
print(r.zrevrange('myzset1',0,3,withscores=True,score_cast_func=double))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值