本节内容有:
redis五大数据类型及操作
python操作redis的代码
1 string
- redis命令不区分大小写,但是key区分的 redis中的数据都是字符串。
- redis是单线程,(不适合存储比较大的数据)
- 使用incr 命令,如果key 不存在,会自动创建key 并自动+1.
- redis中所有的数据都是字符串。
set key value 设置值
get key 获取值
incr key 加一
decr key 减一
2 hash
- 相当于一个key 对应一个map (map中又是key- value),
- 应用于归类
hset key field value 设置值
hget key field 获取值
hincrby key field num 设置增数量
3 list
List是有顺序可重复(数据结构中的:双链表,队列)
可作为链表 ,从左添加元素 也可以从右添加元素。
lpush list a b c d (从左添加元素)
rpush list 1 2 3 4 (从右边添加元素)
lrange list 0 -1 (从0 到 -1 元素查看:也就表示查看所有)
lpop list (从左边取,删除)
rpop list (从右边取,删除)
4 set
Set无顺序,不能重复
-
sadd set1 a b c d d (向set1中添加元素) 元素不重复
smembers set1 (查询元素) srem set1 a (删除元素)
5 zset
有顺序,不能重复
适合做排行榜 排序需要一个分数属性
zadd zset1 9 a 8 c 10 d 1 e (添加元素 zadd key score member )
(ZRANGE key start stop [WITHSCORES])(查看所有元素:zrange key 0 -1
withscores)
如果要查看分数,加上withscores.
zrange zset1 0 -1 (从小到大)
zrevrange zset1 0 -1 (从大到小)
zincrby zset2 score member (对元素member 增加 score)
127.0.0.1:6379> zadd zset1 8 a 4 b 5 c 1 d
(integer) 4
127.0.0.1:6379> zrange zset1 0 -1
1) "d"
2) "b"
3) "c"
4) "a"
127.0.0.1:6379> zadd zset1 9 a
(integer) 0
127.0.0.1:6379> zrange zset1 0 -1
1) "d"
2) "b"
3) "c"
4) "a"
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "d"
2) "1"
3) "b"
4) "4"
5) "c"
6) "5"
7) "a"
8) "9"
127.0.0.1:6379> zrevrange zset1 0 -1
1) "a"
2) "c"
3) "b"
4) "d"
127.0.0.1:6379> zincrby zset1 1 a
"10"
127.0.0.1:6379> zrevrange zset1 0 -1 withscores
1) "a"
2) "10"
3) "c"
4) "5"
5) "b"
6) "4"
7) "d"
8) "1"
下面是python操作redis的代码:
1.python连接redis(两种方式)
1 # decode_responses=True: 解决获取的值类型是bytes字节问题
2 r = redis.Redis(host='localhost', port='6379', db=0, decode_responses=True)
1 pool = redis.ConnectionPool(host='localhost', port=6379, db=0, decode_responses=True)
2 r = redis.Redis(connection_pool=pool)
2.字符串类型 String
1 # ex过期时间 单位秒S
2 r.set('name', 'Jack', ex=20)
3 rst = r.get('name')
4 print(rst)
5
6
7 结果: "Jack"
3.列表类型 list
1 r.lpush('object', 'one')
2 r.lpush('object', 'two')
3 r.lpush('object', 'three')
4 r.lpush('object', 'four')
5 r.lpush('object', 'five')
6 r.lpush('object', 'six')
7 ret = r.lrange('object', 0, 5)
8 print(ret[::-1], len(ret))
9
10
11 结果: ['one', 'two', 'three', 'four', 'five', 'six'] 6
4.哈希类型 hash
1 r.hset('user:info', 'name', 'Jack')
2 r.hset('user:info', 'age', 20)
3 r.hset('user:info', 'phone', '18712909999')
4 r.hset('user:info', 'email', '[email protected]')
5 rst = r.hgetall('user:info')
6 print(rst)
7
8
9 结果: {'age': '20', 'email': '[email protected]', 'name': 'Jack', 'phone': '18712909999'}
5.集合类型 set
1 r.sadd('set', 'one')
2 r.sadd('set', 'two')
3 r.sadd('set', 'three')
4 res = r.smembers('set')
5 print(res)
6
7
8 结果: {'two', 'one', 'three'}
6.有序集合类型 sorted set
1 r.zadd('mark', 'one', 1)
2 r.zadd('mark', 'two', 2)
3 r.zadd('mark', 'three', 3)
4 r.zadd('mark', 'four', 4)
5 r.zadd('mark', 'five', 5)
6 result = r.zrange('mark', 0, 10)
7 print(result)
8
9
10 结果: ['one', 'two', 'three', 'four', 'five']