redis——介绍、安装、基本连接、连接池、基本数据类型、字符串操作、hash操作

系列文章目录



一、介绍

1 是一个软件(用c语言写的,初级版本代码只有1w多行 7.x,公司 5.x,4.x多)
2 非关系型(mysql关系型数据库;没有外键关联关系)数据库,nosql(not only sql)数据库,
3 数据都放在内存中(读写速度超级快理论上限每秒的qps 10w)
4 key-value数据库(储存形式都是key对应value的形式)
5 有5大数据类型(字符串,list,hash(字典),集合,有序集合)
6 redis是单例设计模式开发的软件,使用时不需要担心并发问题
redis中的指令大写是为了与普通语句区分开,实际上redis对指令是不区分大小写的


二、安装

redis官网下载地址

下载安装包后直接安装即可

python连接redis是需要安装连接驱动

pip install redis

三、基本连接

# 第一步:导入Redis类
from redis import Redis

# 第二部: 实例化得到对象
conn=Redis()  # 默认连本地:6379端口中的数据库0
# 第三步:操作数据(非常对方法,操作:字符串,hash,链表操作)
conn.set('name','kdq')
# 第四步:使用完毕后关闭连接
conn.close()

四、连接池

# 第一步:导入redis
import redis
# 第二步:设置连接池
POOL = redis.ConnectionPool(max_connections=10) # max_connections设置连接池中的最大连接数
# 第三步:从连接池中获取连接
conn = redis.Redis(connection_pool=POOL)
# 第四步:操作数据(非常对方法,操作:字符串,hash,链表操作)
conn.set('age', '19')
print(conn.get('age'))
conn.close()

上述方式可以使用连接池,但每次执行都会产生一个新的连接池,这样设置连接池的目的便没有意义了。此时我们可以将连接池的设置作为一个单独的包、模块来进行导入,这样连接池始终只会有一个。

pool.py

import redis
POOL = redis.ConnectionPool(max_connections=10) # max_connections设置连接池中的最大连接数

在需要连接redis的地方直接连接使用即可
例如:

import redis
# 第一步导入连接池
from pool import POOL

# 第二步:从池中取一个链接使用
conn = redis.Redis(connection_pool=POOL)
# 第三步:操作数据(非常对方法,操作:字符串,hash,链表操作)
conn.set('age', '19')
print(conn.get('age'))
conn.close()

五、基本数据类型

redis有五种数据类型

1.字符串

String(字符串)
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。(Memcached也是一个缓存数据库,但是一旦断电就会丢失数据,现在很少使用)

string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

string类型是Redis最基本的数据类型,一个键最大能存储512MB。

127.0.0.1:6379> set name1 'kdq'
OK
127.0.0.1:6379> get name1
"kdq"
127.0.0.1:6379>

2.列表

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

127.0.0.1:6379> lpush list 1
(integer) 1
127.0.0.1:6379> lpush list 'apple'
(integer) 2
127.0.0.1:6379> lrange list 0 1
1) "apple"
2) "1"
127.0.0.1:6379>

3.哈希

Hash(哈希)
Redis hash 是一个键名对集合。

Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

127.0.0.1:6379> hmset user:1 username password
OK
127.0.0.1:6379> hgetall user:1
1) "username"
2) "password"
127.0.0.1:6379>

4.集合

Set(集合)
Redis的Set是string类型的无序集合。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

sadd 命令
添加一个string元素到,key对应的set集合中,成功返回1,如果元素已经在集合中返回0,key对应的set不存在返回错误。

在这里插入代码片

5.有序集合

zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

127.0.0.1:6379> zadd zset1 0 'kdq'
(integer) 1
127.0.0.1:6379> zadd zset1 0 18
(integer) 1
127.0.0.1:6379> zadd zset1 0 'sleep'
(integer) 1
127.0.0.1:6379> zrangebyscore zset1 0 2
1) "18"
2) "kdq"
3) "sleep"
127.0.0.1:6379>

六、字符串操作

1.python 操作字符串

# 1 set(name, value, ex=None, px=None, nx=False, xx=False)
# ex:过期时间(秒),px,过期时间(毫秒), nx:设置为True,如果该name存在就修改value, xx:设置为True,如果该值不存在就设置value
redis.set('food', 'buff')

# 2 setnx(name, value)
# 相当于set方法设置nx为True,如果该name存在,就替换value
redis.setnx('food', 'beef')

# 3 psetex(name, time_ms, value)
# time_ms以毫秒计时,时间到后消失
redis.psetex('food', 3000, 'beef')

# 4 mset(*args, **kwargs)
# 批量设置
redis.mset({'food':'beef', 'food1':'fish'})

# 5 get(name)
# 获取对应name的值
print(redis.get('food'))

# 6 mget(keys, *args)
# 批量获取name的值
print(redis.mget('food', 'food1'))
print(redis.mget(['food', 'food1']))

# 7 getset(name, value)
# 先获取旧value的值再赋予新的value,该函数返回的是旧value
print(redis.getset('food', 'milk'))

# 8 getrange(key, start, end)
# 根据起始和终止,获取字符串,以字节计数
print(redis.getrange('food', 0, 2))

# 9 setrange(name, offset, value)
# 指定位置设置值
redis.setrange('food', 4, 'mmm')

# 10 setbit(name, offset, value)
# 在指定bit位置设置值(0或者1)
redis.setbit('food', 2, 1)

# 11 getbit(name, offset)
# 获取对应bit位置的值
print(redis.getbit('food', 2))

# 12 bitcount(key, start=None, end=None)
# 计算从起始位到结束位置位置以字符来获取,字符的bit位所含的1数量
print(redis.bitcount('food', 0, 2))

# 13 strlen(name)
# 获取该字符bit位长度
print(redis.strlen('food'))

# 14 incrby(self, name, amount=1)
# 计数器,每次对name所属值+1,通过修改amount来修改每次加的值
redis.incrby('num', amount=2)

# 15 incrbyfloat(self, name, amount=1.0)
# 计数器,每次对name所属值+1.0,通过修改amount来修改每次加的值
redis.incrbyfloat('num', amount=2.0)

# 16 decr(self, name, amount=1)
# 计数器,每次对name所属值-1,通过修改amount来修改每次减的值
redis.decr('num', amount=2)

# 17 append(key, value)
# 在字符串末尾拼接value
redis.append('food', 'vvv')

2.redis操作字符串

方法方法使用
SET key value设置指定 key 的值。
GET key获取指定 key 的值。
GETRANGE key start end返回 key 中字符串值的子字符
GETSET key value将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
GETBIT key offset对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
MGET key1 [key2…]获取所有(一个或多个)给定 key 的值。
SETBIT key offset value对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
SETEX key seconds value将值 value 关联到 key ,并将 key 的过期时间设为 seconds(以秒为单位)。
SETNX key value只有在 key 不存在时设置 key 的值。
SETRANGE key offset value用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
STRLEN key返回 key 所储存的字符串值的长度。
MSET key value [key value …]同时设置一个或多个 key-value 对。
MSETNX key value [key value …]同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
PSETEX key milliseconds value这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
INCR key将 key 中储存的数字值增一。
INCRBY key increment将 key 所储存的值加上给定的增量值(increment) 。
INCRBYFLOAT key increment将 key 所储存的值加上给定的浮点增量值(increment) 。
DECR key将 key 中储存的数字值减一。
DECRBY key decrementkey 所储存的值减去给定的减量值(decrement) 。
APPEND key value如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。

七、hash操作

1.python操作hash

from redis import Redis

redis = Redis()

# 1 hset(name, key, value)
# 设置hash,可以批量设置也可以设置单个
redis.hset('name', 'key', 'value') # 单个设置
redis.hset('name', mapping={'food':'beef', 'price':66}) # 批量设置

# 2 hget(name,key)
# 获取一个hash
redis.hget('name', 'food')

# 3 hmget(name, keys, *args)
# 批量获取hash
redis.hmget('name', ['food', 'price'])

# 4 hgetall(name)
# 获取某个name下全部hash
redis.hgetall('name')

# 5 hlen(name)
# 获取hash内的元素个数
print(redis.hlen('name'))

# 6 hkeys(name)
# 获取hash中所有key值
print(redis.hkeys('name'))

# 7 hvals(name)
# 获取hash中所有value
print(redis.hvals('name'))

# 8 hexists(name, key)
# 判断该key是否存在于hash中
print(redis.hexists('name', 'food'))

# 9 hdel(name,*keys)
# 删除hash中一个或者多个key
redis.hdel('name', ['food'])
redis.hdel('name', ['food', 'price'])

# 10 hincrby(name, key, amount=1)
# 对应key值增加整数
redis.hincrby('name', 'price', amount=2)

# 11 hincrbyfloat(name, key, amount=1.0)
# 对应key值增加整数或者浮点数
redis.hincrbyfloat('name', 'price', amount=2.0)

# 12 hscan(name, cursor=0, match=None, count=None)
# 返回的每个元素都是一个元组,每一个元组元素由一个字段(field) 和值(value)组成。
print(redis.hscan('name'))

# 13 hscan_iter(name, match=None, count=None)
# 返回的每个元素都是一个元组,每一个元组元素由一个字段(field) 和值(value)组成。
for i in redis.hscan_iter('name', count=1):
    print(i)
    
redis.close()

2.redis操作hash

方法作用
HDEL key field1 [field2]删除一个或多个哈希表字段
HEXISTS key field查看哈希表 key 中,指定的字段是否存在。
HGET key field获取存储在哈希表中指定字段的值。
HGETALL key获取在哈希表中指定 key 的所有字段和值
HINCRBY key field increment为哈希表 key 中的指定字段的整数值加上增量 increment 。
HINCRBYFLOAT key field increment为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
HKEYS key获取所有哈希表中的字段
HLEN key获取哈希表中字段的数量
HMGET key field1 [field2]获取所有给定字段的值
HMSET key field1 value1 [field2 value2 ]同时将多个 field-value (域-值)对设置到哈希表 key 中。
HSET key field value将哈希表 key 中的字段 field 的值设为 value 。
HSETNX key field value只有在字段 field 不存在时,设置哈希表字段的值。
HVALS key获取哈希表中所有值。
HSCAN key cursor [MATCH pattern] [COUNT count]迭代哈希表中的键值对。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值