启动 Redis 客户端:
$ redis-cli
设置字符串:
set key value
SET 命令的第一个参数是键(Key),第二个参数是值(Value)
删除字符串:
del key value
获取字符串:
det key value
Redis中的列表
- LPUSH 命令可用于将元素推入列表的左侧
- RPUSH 命令可将元素推入列表的右侧
- LPOP 和 RPOP 就分别从列表的左侧和右侧弹出元素
- LINDEX 可以获取指定位置上的元素
- LRANGE 可以获取指定范围的全部元素
- redis 127.0.0.1:6379> rpush testlist item
- (integer) 1
- redis 127.0.0.1:6379> rpush testlist item2
- (integer) 2
- redis 127.0.0.1:6379> rpush testlist item
- (integer) 3
- redis 127.0.0.1:6379> lrange testlist 0 -1
- 1) "item"
- 2) "item2"
- 3) "item"
- redis 127.0.0.1:6379> lindex testlist 1
- "item2"
- redis 127.0.0.1:6379> lpop testlist
- "item"
- redis 127.0.0.1:6379> lrange testlist 0 -1
- 1) "item2"
- 2) "item"
Redis中的集合
由于集合是无序的,所以我们只能通过统一的 SADD 命令将元素添加到集合中,SREM 命令将元素从集合中移除。你还可以通过:
- SMEMBERS 命令获取到集合中的所有元素
- SISMEMBER 命令来判断一个元素是否已存在在集合中
- redis 127.0.0.1:6379> sadd testset item
- (integer) 1
- redis 127.0.0.1:6379> sadd testset item2
- (integer) 1
- redis 127.0.0.1:6379> sadd testset item
- (integer) 0
- redis 127.0.0.1:6379> smembers testset
- 1) "item"
- 2) "item2"
- redis 127.0.0.1:6379> sismember testset item3
- (integer) 0
- redis 127.0.0.1:6379> sismember testset item
- (integer) 1
- redis 127.0.0.1:6379> srem testset item2
- (integer) 1
- redis 127.0.0.1:6379> srem testset item2
- (integer) 0
- redis 127.0.0.1:6379> smembers testset
- 1) "item"
上面示例的集合中包含的元素少,所以执行 SMEMBERS
命令没有问题,一旦集合中包含的元素非常多时,SMEMBERS
命令的执行速度会很慢,所以要谨慎的使用这个命令。
Redis中的哈希
- hset 用于插入元素
- 第一个参数为该哈希的键名,如果该哈希不存在,则创建一个
- 第二个参数为哈希中的域名
如果不存在,则创建该域,并与第三个参数的值进行映射
- 如果存在,则使用第三个参数更新该域的值
- 第三个参数为哈希中的值
- hgetall 会获取到该哈希的所有域-值对
- hget 用于获取哈希中的某一个域
- hdel 用户删除哈希中的某一个域
- redis 127.0.0.1:6379> hset testhash key1 value1
- (integer) 1
- redis 127.0.0.1:6379> hset testhash key2 value2
- (integer) 1
- redis 127.0.0.1:6379> hset testhash key1 newvalue
- (integer) 0
- redis 127.0.0.1:6379> hgetall testhash
- 1) "key1"
- 2) "newvalue"
- 3) "key2"
- 4) "value2"
- redis 127.0.0.1:6379> hdel testhash key2
- (integer) 1
- redis 127.0.0.1:6379> hget testhash key1
- "newvalue"
- redis 127.0.0.1:6379> hgetall testhash
- 1) "key1"
- 2) "newvalue"
Redis中的有序集合
有序集合和哈希一样,也是存储键值对。
只是有序集合的键被称为成员(member
),每个成员都是唯一的,有序集合的值则被称为分值(score
),这个分值必须为浮点数。所以有序集合既可以通过成员访问元素,也可以通过分值来排序元素。
- ZADD 命令将带有指定分值的成员添加到有序集合中
- ZRANGE 命令根据分值有序排列后的集合获取到指定范围的元素
- ZRANGEBYSCORE 命令获取指定分值范围内的元素
- ZREM 命令从有序集合中删除指定成员
- redis 127.0.0.1:6379> zadd testzset 100 member1
- (integer) 1
- redis 127.0.0.1:6379> zadd testzset 200 member0
- (integer) 1
- redis 127.0.0.1:6379> zrange testzset 0 -1 withscores
- 1) "member1"
- 2) "100"
- 3) "member0"
- 4) "200"
- redis 127.0.0.1:6379> zrangebyscore testzset 0 150 withscores
- 1) "member1"
- 2) "100"
- redis 127.0.0.1:6379> zrem testzset member1
- (integer) 1
- redis 127.0.0.1:6379> zrange testzset 0 -1 withscores
- 1) "member0"
- 2) "200"
使用 Python 连接 Redis
- # 导入 redis 模块
- import redis
- # 创建连接池
- pool = redis.ConnectionPool(host='127.0.0.1', port=6379, decode_responses=True)
- # 创建客户端并连接到 Redis
- r = redis.Redis(connection_pool=pool)
- # 使用 SET 命令设置一个字符串键
- r.set("test", "hello")
- # 显示字符串键 test 的值
- print(r.get("test"))
Python操作Redis:
import redis
conn = redis.Redis()
import time
time.time() 获得时间戳
conn.hset("哈希表","键","值") #无就创建,有就修改
conn.hget("哈希表","键") #获取值
conn.hkeys("hash1") #获取hash中所有的key
conn.hmset("hash2", {"k2": "v2", "k3": "v3"}) 批量增加
conn.incr("键") 将 key 中储存的数字值增一
conn.hincrby("哈希表", "键", 1) 将键值加1
conn.hgetall("testhash") hgetall:返回哈希表中所有的域-值对
pipeline:将多条命令按照先后顺序放进一个队列中,一般配合execute一同使用,原子性(atomic)地执行队列里的命令。
- conn = redis.Redis()
- pipe = conn.pipeline(True) # 事务开始
- pipe.incr("counter")
- pipe.incr("counter")
- pipe.incr("counter")
- pipe.execute() # 事务执行
Set集合就是不允许重复的列表,本身是无序的。
有序集合,在集合的基础上,为每元素排序;元素的排序需要根据另外一个值来进行比较,所以,对于有序集合,每一个元素有两个值,即:值和分数,分数专门用来做排序。
conn.zscore("testzset", "member1") 返回有序集合中指定成员的分值。
conn.zadd("testzset", "member2", 3) 将成员加入到有序集合中,并确保其在正确的位置上。
conn.zrem("testzset", "member1") 从有序集合中移除指定成员
conn.zrange("testzset", 0, 1) zrange:返回有序集合中指定区间内的成员
conn.zrevrange("testzset", 0, -1) zrevrange:按分值递减的顺序返回有序集合中指定区间内的成员