1.什么是Redis?

Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server,该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。

Redis端口:6379

Redis优点:

  • 异常快速 : Redis是非常快的,每秒可以执行大约110000设置操作,81000个/每秒的读取操作。
  • 支持丰富的数据类型 : Redis支持最大多数开发人员已经知道如列表,集合,可排序集合,哈希等数据类型。
    这使得在应用中很容易解决的各种问题,因为我们知道哪些问题处理使用哪种数据类型更好解决。
  • 操作都是原子的 : 所有 Redis 的操作都是原子,从而确保当两个客户同时访问 Redis 服务器得到的是更新后的值(最新值)。
  • MultiUtility工具:Redis是一个多功能实用工具,可以在很多如:缓存,消息传递队列中使用(Redis原生支持发布/订阅),在应用程序中,如:Web应用程序会话,网站页面点击数等任何短暂的数据;

Redis应用场景:
因为Redis交换数据快,所以在服务器中常用来存储一些需要频繁调取的数据,这样可以大大节省系统直接读取磁盘来获得数据的I/O开销,更重要的是可以极大提升速度。
将这种热点数据存到Redis(内存)中,要用的时候,直接从内存取,极大的提高了速度和节约了服务器的开销。

2.安装Redis

sudo apt-get update
sudo apt-get install redis-server

3.进入Redis:

redis-cli

4.Redis五种数据类型及操作

  • string  字符串
  • list      列表
  • hash    哈希
  • set      集合
  • sorted set   有序集合

string

#设置
set key value     例:   ( set name 'lucky' )
#  获取
get key           例:   ( get name   )
# key是唯一的,不能用同一个key 不然就会覆盖

查看过期时间

# -1 表示永久     -2 表示 不存在
ttl key         例:    ( ttl name )

设置过期时间

# 给已经存在 key,设置过期时间
expire key seconds   例:  ( expire name 20  )

# 设置 key的同时,设置过期时间
set key value ex seconds   例: ( set age 18 ex 20 )
或
setex key seconds value    例: ( setex sex 20 '男' )

追加

# 给已有的value,再添加新的值
# append key value
例
append name  love
#get name

设置 / 获取 多个

#设置多个 string
mset key value  key value..
例子
mset username 'lucky'  password  '123'

#获取多个
mget key key key ...
例
mget username password name

key 操作

# 查看所有的key
 keys *
 
# 删除
 del key        例:  (del name)
 
# 查看key是否存在  ,存在返回 1, 不存在返回 0
 exists key 

# 查看key类型
 type key

运算

set num 1    # 自动识别,字符串里面的 整数
# +1
incr key        例 (incr num)
# -1
decr key        例 (decr num)

# +整数
incrby key increment              例 (incrby num 50)

# -整数
decrby key increment              例 (decrby num 50)

list

  • 设置
# lpush  左添加  (栈)
lpush  key  value     #例  lpush my_list a b c d

#rpush  右添加   (队列)
rpush  key  value     #例  rpush my_rlist a b c d
  • 查看
# lrange  key  start  stop
例  查看所有
lrange my_list 0 -1
  • 获得list的元素个数
llen key        #例  llen  my_list
  • 查看位于lidex 位置上的元素
lindex key  index    #例 lindex my_list  3
  • 删除
  • lpop 删除左边第一个
  • lpop key        #例 lpop my_list
  • rpop 删除右边第一个
rpop key        #例 rpop  my_list
  • lrem 删除指定
rpush  test_list  a a b b c d e a d f m c
#lrem  key count value

#count > 0 从左往右 删除数量为count的value
例 : lrem test_list 2 a

#count = 0 删除所有的 value
例 : lrem test_list 0 a

#count < 0 从右往左 删除数量为count的value
例 : lrem test_list -1 b

hash

  • 设置
#  hset key field value
例  user { name:lucky}
hset user name lucky
  • 获取
#  hget key field
例
hget user name
  • 删除
#  hdel key field
例
hdel user name
  • 设置多个
#hmset key field value [field value]
例  user{name:lucky , age:18, sex:male }
hmset user name lucky age 18 sex male
  • 获取多个
# hmget key field field
例
hmget user name age
  • 获取全部field value
# hgetall key 
例
hgetall user
  • 获取所有的field
# hkeys key
例
hkeys user
  • 获取所有的value
# hvals key 
例
hvals user
  • 获取field的个数
# hlen key
例  hlen user

set

  • 设置
# sadd key value [value]    (唯一,无序)
例   sadd my_set m n b v c x z b
  • 获取
# smembers key
例   smembers my_set
  • 删除
  • srem指定删除
# srem key member
例
srem my_set c
  • spop随机删除
# spop  key
例
spop my_set
  • 移动一个集合的值到另一个集合
# smove oldkey newkey member
例
smove my_set my_set2 b
  • 判断集合存在某个值
# sismember key value
例
sismember my_set2 b
  • 交集
# sinter key1 key2 ..
例
sinter my_set my_set2

把 key1 key2的交集合并到newkey

# sinterstore newkey key1 key2
例
sinterstore  new_set my_set my_set2
  • 并集
# sunion key1 key2 ...
例
sunion my_set my_set2

把 key1 key2的并集合并到newkey

# sunionstore newkey key1 key2
例
sunionstore new_set2 my_set my_set2
  • 差集
# sdiff key1 key2
sdiff my_set my_set2

把 key1 key2的差集合并到newkey

# sdiffstore newkey key1 key2
例
sdiffstore new_set3 my_set my_set2
  • 获取集合个数
# scard key
例
scard my_set
  • 随机返回一个
# srandmember key
例
srandmember my_set

zset

  • 设置
# zadd key score member
例
zadd  my_zset 1 'one'
zadd  my_zset 2 'two'
zadd  my_zset 3 'three'
zadd  my_zset 4 'four'
zadd  my_zset 5 'five'
  • 获取
  • zrange正序
#zrange key start stop    (withscores)
zrange my_zset 0 -1
  • zrevrange倒序
#zrevrange key start stop
zrevrange my_zset 0 -1
  • 删除
#zrem key member
zrem my_zset two
  • 索引
  • zrank正序
# zrank key member
例
zrank my_zset three
  • zrevrank反序
# zrevrank key member
例
zrevrank my_zset three
  • zcard 查看有序集合元素数
# zcard key
例
zcard my_zset
  • zrangebyscore 返回集合中 score 在给定区间的元素
# zrange my_zset 0 -1 withscores

 zrangebyscore my_zset 2 3 withscores
#返回了 score 在 2~3 区间的元素
  • zcount 返回集合中 score 在给定区间的数量
# zcount key min max
例
zcount my_zset 2 3
  • zscore : 查看score值
# zscore key member
例
zscore my_zset2 a
  • zremrangebyrank : 删除集合中排名在给定区间的元素
# zrange my_zset 0 -1 withscores
zremrangebyrank my_zset 1 3
  • zremrangebyscore : 删除集合中 score 在给定区间的元素
# zrange my_zset 0 -1 withscores
zremrangebyscore my_zset 1 2

以上只是Redis的一些基础知识,详细的可以参考:Redis更详细的讲解

 

接下来简单介绍一下如何在Python中使用Redis:

安装Redis库:pip install redis
# 创建连接
 re = redis.Redis(host='127.0.0.1', port='55555')
 ## 测试
 re.set('num',15)
 print(re.get('num'))## set 中文
 re.set('name','张三')
 print(re.get('name').decode('utf8') )
 ### 大部分的命令 和 redis 中操作一样
 不同:
 re.ttl()       ### 不能看 负数 -1    -2
 re.mset()         ##  用键值对
 re.incr()        ## incr   可以加参数,代替了 incrby
 re.decr()        ## decr   可以加参数,代替了 decrby
 re.lrem()        ## num 放到后面
 re.hmset()       # 多插入,用字典
#-*- coding:utf-8-*-
import redis

conn = redis.Redis(host='192.168.26.128', port='6379')
conn.set('name','小美')

#print(conn.get('name'))  bytes:
print(conn.get('name').decode('utf-8'))
### 大部分的命令 和 redis 中操作一样
#不同:
conn.ttl('name')       ### 不能看 负数 -1    -2
#原生设置多个字符串  mset k1 v1 k2 v2
conn.mset(name = 'lucky',age = 18)#区别,同时设置多个,用键值对
print(conn.get('read_count'))
# conn.decr()        ## decr   可以加参数,代替了 decrby
conn.decr('read_count',amount=10)
# conn.incr()        ## incr   可以加参数,代替了 incrby
conn.incr('read_count',amount=10)
print(conn.get('read_count'))
# conn.lrem()        ## num 放到后面
conn.lrem('my_list',3,0)
# conn.hmset()       # 多插入,用字典
#hset key xx  xxx
#website = {'google':'www.google.com'}    相当于  conn.hset('website','google','www.google.com')
conn.hmset('website',{'baidu':'www.baidu.com','taobao':'www.taobao.com'})
print(conn.hgetall('website'))

conn.lrem('my_list',3,0)  原始列表

redis python 判断STREAM是否存在键值 python中redis的用法_redis

删除完:

redis python 判断STREAM是否存在键值 python中redis的用法_hg_02

七月的天,真的是要热死人~~~也好,早点起来学习也不错啊、